はじめに
最近、Adaptive LayoutというJetpack Compose用のライブラリを公開しました。
Androidライブラリの開発と公開を行うことが自分にとっては初めての体験だったため、どのように公開すれば良いのか試行錯誤を繰り返していました。
そんなときに出会ったのがJitPackというサービスです。
このライブラリは、JitPackを使って公開を行なっています。
はじめてAndroidライブラリを公開するにあたり、ものすごく簡単にAndroidライブラリを公開できてしまいました。
この体験をみなさんにもぜひ共有したかったので、今回は忘備録としてまとめてみることにしました。
JitPackってなに?
Jitpackは、JVMとAndroidプロジェクトのために存在するパッケージリポジトリです。
Gitプロジェクトをオンデマンドでビルドして、すぐに利用可能なアーティファクトと呼ばれるjar
やaar
を提供してくれます。
Jitpackでは、プロジェクトをGitHubにプッシュするだけで、ライブラリとして世界中に公開することができるようになっています。もちろん、GitLabやBitBucketでも動作します。
簡単にいうと、GitHubなどにコミットするだけで、自作のライブラリをAndroidプロジェクトなどでインストール可能にしてくれるサービスということです。
JitPackを使ってAndroidライブラリを公開してみる
それでは、実際にJitPackの設定を行い、Androidライブラリを公開しようと思います。
今回は、Androidライブラリ自体の作り方については割愛させていただきます。すでにAndroidライブラリを開発している状態で、これから公開しようと考えている方を前提に話を進めていきます。
手順1: JitPack Mavenリポジトリを追加する
ルートレベルに存在するbuild.gradleのrepositores
にmaven { url 'https://jitpack.io'
を追加します。
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
手順2: maven-publish
プラグインを追加する
作成したライブラリのモジュールレベルに存在するbuild.gradleで、maven-publish
プラグインを追加します。
plugins {
id 'com.android.library'
id 'maven-publish'
}
手順3: afterEvaluate
を追加してアーティファクトを生成できるようにする
先ほどmaven-publish
プラグインを追加したのと同じライブラリのbuild.gradleの最下部にafterEvaluate {}
を追加します。
plugins {
...
id 'maven-publish'
}
group = 'com.github.takagimeow'
version = '1.0'
...
afterEvaluate {
publishing {
publications {
// Creates a Maven publication called "release".
release(MavenPublication) {
from components.release
groupId = 'com.github.takagimeow'
artifactId = 'adaptive-layout'
version = '1.0'
}
}
}
}
groupId
は、com.github.Username
を表します。
artifactId
は、リポジトリ名を表します。
version
は、リリースタグ、コミットを表すハッシュ値(コミットハッシュ)、もしくはブランチ名-SNAPSHOT
を表します。
コミットハッシュを利用することで、リリース前にライブラリをインストールしてテストすることが可能となります。ブランチ名-SNAPSHOT
を利用した場合も、そのブランチの最新のコミットがビルドされたアーティファクトをインストールすることが可能になります。
手順4: インストール可能かどうかをチェックする
GitHubにコミットして、リリースタグを作成する前に、一度ローカルでインストール可能かどうかを検証してみましょう。
./gradlew publishToMavenLocal
publishToMavenLocal
を実行して、BUILD SUCCESSFULL
が表示されると成功です。
この結果、ローカルディレクトリの$HOME/.m2/repository
にライブラリのアーティファクトが作成されていることが確認できます。
手順5: GitHubでリリースを作成する
Android Studioで、タグを作成します。メニューからGitそしてNew Tagの順番に選択します。
タグ名と、メッセージを入力してタグを作成します。
Android Studioで、Pushウィンドウを開きます。
Push tagsにチェックを入れて、Current Branchを選択してPushをクリックします。
GitHubを確認してみると、新しいタグが作成されていることが確認できます。
そのまま、Releases画面を開いて、タイトルと説明を入力して、リリースを公開します。
リリースの作成が完了したら、JitPackへアクセスして、リポジトリのURLを入力して検索を行います。
ビルドが成功すると、Logのアイコンが緑色になります。
公開されたライブラリをインストールして使用する
Androidプロジェクトの、ルートレベルに存在するsettings.gradleにmaven { url 'https://jitpack.io' }
を追加します。
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
モジュールレベルのbuild.gradleに依存関係を追加します。
dependencies {
implementation 'com.github.takagimeow:adaptive-layout:0.1.2'
}
実際に自分が公開しているライブラリを依存関係として追加する場合は、上記の内容を適宜変更してください。
おまけ
実は、Adaptive Layoutライブラリをリリースしたとき、0.1から0.1.2に至るまでJitPack.io側でのビルドに何度も失敗し続けてしまいました。
その時のログはこちらから確認することができます。
そのときに、ビルドが成功するまでに行ったこととしては、まず、maven { url 'https://jitpack.io' }
をルートレベルのbuild.gradleではなく、settings.gradleに設定しました。
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
JitPackのドキュメントなどでは、ルートレベルのbuild.gradleにallprojects { repositories {} }
の内部にmaven {}
を記載するように説明されているのですが、これを行おうとするとエラーが発生します。
Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by build file 'build.gradle'
そのため、エラーを回避するためにsettings.gradleにて設定するようにしています。
Androidプロジェクトを新規作成した後に、ライブラリをモジュールとして追加するとsettings.gradleの末端にinclude
やrootProject.name
が設定されているのですが、これを公開予定のライブラリのモジュール以外すべて削除しました。
// rootProject.name = "My Application"
// include ':app'
include ':adaptivelayout'
最初、これらの設定を削除していなかったためビルド時に* What went wrong: A problem occurred configuring root project 'My Application'.
というエラーなどが発生していました。
ルートディレクトリに、jitpack.ymlを追加して、ビルド時にopenjdk 11
を使うように指定しました。
jdk:
- openjdk11
これらの修正を施した結果、無事ビルドが通り、ライブラリを公開することができました。
まとめ
僕がnpmに初めてパッケージを公開したときには、もっと大変だった思い出があります。なのでその時の記憶の影響で、オープンソース用のライブラリを開発したり公開したりすることに若干の抵抗が今まではありました。
今回初めてAndroidライブラリを公開するにあたって、JitPack用のアカウント作成も特に必要なく、GitHubでリリースを作成するだけで公開できてしまったので、本当に素晴らしい開発体験でした。
みなさんも、ぜひJitPackを使って自作ライブラリをどんどん公開してみてください!
参考にした記事