8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

自作のAndroidライブラリを手軽に全世界に公開する

Posted at

はじめに

最近、Adaptive LayoutというJetpack Compose用のライブラリを公開しました。

Androidライブラリの開発と公開を行うことが自分にとっては初めての体験だったため、どのように公開すれば良いのか試行錯誤を繰り返していました。

そんなときに出会ったのがJitPackというサービスです。
このライブラリは、JitPackを使って公開を行なっています。

はじめてAndroidライブラリを公開するにあたり、ものすごく簡単にAndroidライブラリを公開できてしまいました。
この体験をみなさんにもぜひ共有したかったので、今回は忘備録としてまとめてみることにしました。

JitPackってなに?

Jitpackは、JVMとAndroidプロジェクトのために存在するパッケージリポジトリです。
Gitプロジェクトをオンデマンドでビルドして、すぐに利用可能なアーティファクトと呼ばれるjaraarを提供してくれます。

Jitpackでは、プロジェクトをGitHubにプッシュするだけで、ライブラリとして世界中に公開することができるようになっています。もちろん、GitLabやBitBucketでも動作します。

簡単にいうと、GitHubなどにコミットするだけで、自作のライブラリをAndroidプロジェクトなどでインストール可能にしてくれるサービスということです。

JitPackを使ってAndroidライブラリを公開してみる

それでは、実際にJitPackの設定を行い、Androidライブラリを公開しようと思います。

今回は、Androidライブラリ自体の作り方については割愛させていただきます。すでにAndroidライブラリを開発している状態で、これから公開しようと考えている方を前提に話を進めていきます。

手順1: JitPack Mavenリポジトリを追加する

ルートレベルに存在するbuild.gradlerepositoresmaven { 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にライブラリのアーティファクトが作成されていることが確認できます。

名称未設定のデザイン (44).png

手順5: GitHubでリリースを作成する

Android Studioで、タグを作成します。メニューからGitそしてNew Tagの順番に選択します。

名称未設定のデザイン (45).png

タグ名と、メッセージを入力してタグを作成します。

名称未設定のデザイン (46).png

Android Studioで、Pushウィンドウを開きます。

Push tagsにチェックを入れて、Current Branchを選択してPushをクリックします。

名称未設定のデザイン (47).png

GitHubを確認してみると、新しいタグが作成されていることが確認できます。

名称未設定のデザイン (48).png

そのまま、Releases画面を開いて、タイトルと説明を入力して、リリースを公開します。

名称未設定のデザイン (49).png

リリースの作成が完了したら、JitPackへアクセスして、リポジトリのURLを入力して検索を行います。

名称未設定のデザイン (50).png

ビルドが成功すると、Logのアイコンが緑色になります。

名称未設定のデザイン (51).png

公開されたライブラリをインストールして使用する

Androidプロジェクトの、ルートレベルに存在するsettings.gradlemaven { 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.gradleallprojects { 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の末端にincluderootProject.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を使って自作ライブラリをどんどん公開してみてください!

参考にした記事

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?