Edited at

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

More than 3 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で指定したライブラリ名>:<バージョン>'
}

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


参考サイト