📗

Androidライブラリ (AAR) をGitHub Packagesで公開する

2022/05/08に公開

自作したAndroidライブラリ (AAR) をGitHub PackagesのMavenリポジトリで公開する方法です。

正直、JitPackで公開したほうが簡単かつシンプルなので、JitPackのほうがおすすめです。

サンプルプロジェクトはこちら

(1) Androidライブラリを作成しGitHubにプッシュする

こちらの説明は他の記事に任せるとして、割愛する。

(2) GitHubのPersonal access tokensを取得する

  1. GitHubのトップページにアクセスし、自分のアイコンをクリックしてメニューを表示し、Settingsをクリックする。
  2. Developer settingsをクリックする。
  3. Personal access tokensをクリックする。
  4. Generate new tokenをクリックする。
  5. Noteに識別しやすい名前、Expirationに任意のトークン有効期間を入力し、write:packagesdelete:packagesにチェックを入れる(関連するパーミッションに自動でグレーのチェックが入る)。
  6. Generate tokenをクリックする。
  7. トークンが表示されるので、控えておく。この画面でしかトークンを確認できないので注意。 トークンの例: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

(3) local.propertiesにGitHubの認証情報を追加する

...

# GitHub Packages
com.github.user=otsuka-kohei
com.github.token=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

com.github.userには自分のGitHubユーザ名、com.github.tokenには手順(2)で取得したPersonal access tokensを指定する。この情報は秘密情報なので.gitingoreにlocal.propertiesが含まれていることを確認する。

(4) Androidライブラリプロジェクトのbuild.gradleを編集する

Androidライブラリプロジェクトにサンプルアプリなどの別モジュールが含まれている場合は、ルートのbuild.gradleに加えて、ライブラリモジュールのbuild.gradleがある。その場合は、ライブラリモジュールのbuild.gradleを編集する。

  1. Maven Publishプラグインを追加する。
plugins {
    ...

    id 'maven-publish'
}
  1. バージョン名を保持するプロパティを追加する。
ext {
    ...
    
    versionName = "0.4"
}

3.コンポーネントの設定をする。

android {
    ...
    
    publishing {
        singleVariant('release') {
            withSourcesJar()
        }
    }
}

これを次の手順で参照することで、公開するPOMにAndroidライブラリが依存する外部モジュールが追加され、Androidライブラリを利用するモジュール側で推移的に依存関係を解決できるようになる。

  1. Maven Publishプラグインの設定をする。
publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = 'https://maven.pkg.github.com/otsuka-kohei/rhinoroid'

            credentials {
                def localProperties = new Properties()
                localProperties.load(project.rootProject.file('local.properties').newDataInputStream())

                username = localProperties.containsKey("com.github.user") ? localProperties.getProperty('com.github.user') : ''
                password = localProperties.containsKey("com.github.token") ? localProperties.getProperty('com.github.token') : ''
            }
        }
    }

    publications {
        GitHubPackages(MavenPublication) {
            groupId "com.github.otsuka_kohei"
            artifactId "rhinoroid"
            version versionName

            afterEvaluate {
                from components.release
            }

            pom {
                url = 'https://github.com/otsuka-kohei/rhinoroid'

                licenses {
                    license {
                        name = 'Apache License Version 2.0'
                    }
                }
            }
        }
    }
}

publishing.repositories.maven.urlhttps://maven.pkg.github.com/<GitHubユーザ名>/<GitHubリポジトリ名>となる。
publishing.publications.GitHubPackages.groupIdにはAndroidライブラリのパッケージ名、publishing.publications.GitHubPackages.artifactIdにはリポジトリ名を指定する。この例ではGradleでこのAndroidライブラリへの依存関係を追加するときにimplementation 'com.github.otsuka_kohei:rhinoroid:0.4'と指定することになる。
publishing.publications.GitHubPackages.pom.urlにはGitHubリポジトリのURLを指定する。
publishing.publications.GitHubPackages.pom.licenses.license.nameには任意のライセンス名指定する。
publishing.publications.GitHubPackages.versionには手順(4)-2で追加したプロパティを参照するようになっている。
publishing.publications.GitHubPackages.afterEvaluate.fromには手順(4)-3で追加したコンポーネントを参照するようになっている。

(4) GitHub Packagesに公開する

./gradlew assembleRelease publishを実行してGitHub Packagesに公開する。
GitHub Packagesに公開されるとこのように表示される。

Discussion