Help us understand the problem. What is going on with this article?

GitHubのPrivateリポジトリにAndroidライブラリをデプロイする

More than 5 years have passed since last update.

頻繁に使用/メンテするライブラリはMavenリポジトリなどから外部参照し、個々のアプリプロジェクトからは切り離して管理したいですね。ただ、社内ライブラリなど一般に公開したくないものもあると思うので、そういう場合にはGitHubのPrivateリポジトリを利用するのが楽かなと思います。

やりたいこと

  • ライブラリプロジェクトをMavenリポジトリにデプロイする
  • GitHubのPrivateリポジトリで管理したい

ライブラリ側でやること

MavenリポジトリへPushするスクリプトを書く

適当なファイル名でライブラリモジュールのディレクトリ直下に配置します。

maven-push.gradle
publishing {
    publications {
        maven(MavenPublication) {
            groupId 'com.hoge.lib' //ライブラリ公開用のGroupドメイン
            artifactId project.name //ライブラリ名
            version android.defaultConfig.versionName //バージョン
            artifact source: file("${project.buildDir}/outputs/aar/${project.name}-release.aar") //デプロイしたいアーカイブのパス
        }
    }
    repositories {
        maven {
            url "file:${rootDir}/maven-repo" //Mavenリポジトリを作る場所の指定

        }
    }
}

ライブラリモジュールのbuild.gradleから上記のスクリプトを読み込みます。

build.gradle
apply from: 'maven-push.gradle'

最後に、MavenリポジトリにPushするためのタスクを実行するためにmaven-publishプラグインを追加します。

build.gradle
apply plugin: 'maven-publish'

aarファイルの作成

ビルドを実行し、artifactで指定したパスにaarファイルが出来ていることを確認します。

MavenリポジトリへPushする

maven-publishプラグインを追加した状態でビルドしたのでpublishMavenPublicationToMavenRepositoryというタスクが追加されているはずです。Gradle tasksのActive Tool Windowから確認できます。

スクリーンショット 2015-01-14 2.04.34.png

このタスクを実行すると指定した場所にMavenリポジトリが作成されます。
※前述のスクリプトの内容だとプロジェクトの直下にmaven-repoというディレクトリ名

MavenリポジトリをGitHubへPushする

maven-repoディレクトリを丸ごとGitHubにPushします。

以上でデプロイが完了!!

ライブラリを使う側でやること

デプロイするだけならけっこう情報が出てくるのですが、肝心の参照に手こずりました。

リポジトリの参照

問題はここです。デプロイ先がPublicな場所であれば以下のように参照すればOKです。

build.gradle
repositories {
    maven {
        url 'https://github.com/<githubユーザー名>/<githubリポジトリ名>/raw/master/maven-repo'
    }
    // git-flowなどでfeature/hogeのようなブランチを切っている場合
    maven {
        url 'https://github.com/<githubユーザー名>/<githubリポジトリ名>/raw/feature/hoge/maven-repo'
    }
}

が、今回はPrivateなので上記の方法だと見つかりません。以下の記述でも無理でした。

build.gradle
repositories {
    maven {
        credentials {
            username "${GITHUB_USERNAME}"
            password "${GITHUB_PASSWORD}"
        }
        url 'https://github.com/<githubユーザー名>/<githubリポジトリ名>/raw/master/maven-repo'
    }
}

どうすればいいか

git-repoというプラグインが解決してくれました。

まずプラグインを使う準備としてプロジェクト直下のbuild.gradleのbuildscriptに以下の2行を追記します。

build.gradle
buildscript {
    repositories {
        jcenter()
        maven { url "https://github.com/layerhq/releases-gradle/raw/master/releases" } // ここと
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        classpath group: 'com.layer', name: 'git-repo-plugin', version: '1.0.0' //ここ
    }
}

これでgit-repoが使えるようになったので今度はアプリモジュールのbuild.gradleを編集します。

まずはプラグインの呼び出し

build.gradle
apply plugin: 'git-repo'

そしてリポジトリを参照する記述です。

build.gradle
repositories {
    github("<githubユーザー名>", "<githubリポジトリ名>", "master", "maven-repo")
}

補足
git-repoプラグインを使用するための更に事前準備として、SSH Keyの登録が必要です。
GitHubへの公開鍵の登録、及び、configファイルに参照を記述したりssh-addするなどして
ssh-agentに秘密鍵を登録しておく必要があります。

これをやらないと以下のエラーで怒られます。

Process 'command 'git'' finished with non-zero exit value 128

ライブラリの参照

ここはMavenリポジトリがPublicだろうがPrivateだろうが変わりません。

build.gradle
dependencies {
    compile '<groupIdで指定したドメイン>:<artifactIdで指定したライブラリ名>:<バージョン>'
}

以上となります、お疲れ様でした。

参考サイト

shimada_takuya
シェフのこだわり料理を食べられるフードトラックサービス「TLUNCH<トランチ>」の運営に必要なシステム全般を担当しています。
ignis
累計7000万DL超のスマホアプリを自社企画・開発 ツール系からマンガ、ゲームなど幅広いジャンルのアプリを展開
http://1923.co.jp/service-information
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした