【Android】「自作ライブラリ」を「GitHub」に置いて「Gradle」でビルドするだけで利用できるようにする(2)


あらすじ

前回、

【Android】「自作ライブラリ」を「GitHub」に置いて「Gradle」でビルドするだけで利用できるようにする(1)

では、「Android ライブラリ」を新規作成し、「AAR」ファイルを生成した。

次は――。

(2)ローカル環境に「Maven リポジトリ」を作成する

作成した「AAR」を全世界に配布するには、全世界からアクセスできる「リポジトリ」が必要だ。

なので、その「リポジトリ」を「GitHub」に配置し公開する、というのが最終形になる。

手順としては、

1. ローカル環境に「Maven リポジトリ」を作成する
2. ローカル環境に作成した「Maven リポジトリ」を「GitHub」にアップロードし公開する

となる。

(2.1)「build.gradle」に「Maven リポジトリ」作成スクリプトを追記する

Maven リポジトリ」を生成する為には、「build.gradle」にスクリプトを追記する必要がある。

ここで生成される「Maven リポジトリ」は、前回作成した「AAR」ファイルを格納した状態になる。

まず、以下が、私作モジュールの最終的な(全世界に配信済みの)「build.gradle」の全内容だ。

apply plugin: 'com.android.library'

android {
    compileSdkVersion 26
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 7
        versionName "1.1.4"
        version = android.defaultConfig.versionName
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'assets/*'
    }
    libraryVariants.all { variant ->
        variant.outputs.all { output ->
            output.packageLibrary.exclude("libs/*")
            if (variant.name == android.buildTypes.release.name) {
                outputFileName = output.outputFile.name.replace(("-release.aar"), "-${version}.aar")
            } else if (variant.name == android.buildTypes.debug.name) {
                outputFileName = output.outputFile.name.replace((".aar"), "-${version}.aar")
            }
        }
    }
}

dependencies {
    compileOnly fileTree(dir: 'libs', include: ['*.jar'])
}

def repo = new File(rootDir, "repository")

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository url: "file://${repo.absolutePath}"
            pom.version = '1.1.4'
            pom.groupId = 'cutboss.support'
            pom.artifactId = 'review'
        }
    }
}

上記後半、以下の部分が、Maven リポジトリ」作成スクリプトになっている。

def repo = new File(rootDir, "repository")

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository url: "file://${repo.absolutePath}"
            pom.version = '1.1.4'
            pom.groupId = 'cutboss.support'
            pom.artifactId = 'review'
        }
    }
}

以下にて、補足の説明をする。

(2.1.1)プロジェクトルートに「repository」フォルダを作成する

スクリプト冒頭の

def repo = new File(rootDir, "repository")

だが、「rootDir」というのはプロジェクトルートのことで、そこに、「repository」というフォルダを生成することを定義している。

この結果、

私作ライブラリ環境だと、↑こうなっている。

(2.1.2)「pom(Maven 設定ファイル)」を作成する

「Android ライブラリ」を「Maven 形式」で配布する為に、「Maven プラグイン」を利用する。

apply plugin: 'maven'

今回追記するこのスクリプトを実行すると、「pom」と呼ばれるMavenの設定ファイルが生成される。

「pom」には、自作ライブラリの「バージョン」「グループドメイン」「ライブラリ名」を設定する必要がある。

uploadArchives {
    repositories {
        mavenDeployer {
            repository url: "file://${repo.absolutePath}"
            pom.version = '1.1.4'               // バージョン
            pom.groupId = 'cutboss.support'     // グループドメイン
            pom.artifactId = 'review'           // ライブラリ名
        }
    }
}

私の場合、既に、どのようにして全世界で使ってほしいかが、先行して頭の中にあって、

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'cutboss.support:review:1.1.4'
    implementation 'cutboss.support:util:1.0.0'
}

こういうイメージだった。

完全にイメージ先行で、こうするにはどうしなければならないのか、を考えた。

その結果、私の頭の中を実現すると、

implementation 'pom.groupId:pom.artifactId:pom.version'

こういうことだった。

前回も記載したが、ライブラリモジュールの「パッケージ名」や「クラス名」と一致している必要はまったくない

のだが、なるべく近しい方が、利用者は分かりやすいと思う。

(2.2)「Terminal」でスクリプトを実行する

「build.gradle」に記述した以下、

uploadArchives {

は、実はコマンドで、このコマンド「uploadArchives」を実行することで、いよいよ、ローカルに「Maven リポジトリ」が作成される。

前回の「AAR」作成と同様で、「Android Studio」下部の「Terminal」にて、以下のコマンド「gradlew uploadArchives」を実行する。

C:\Job\svn\trunk\barber\maid\android\SupportBoss>gradlew uploadArchives

何も操作していなければ、プロジェクトルート(この例なら「C:\Job\svn\trunk\barber\maid\android\SupportBoss」)がデフォルトで表示されているはずなので、そこでそのままこのコマンドを実行しよう。

以下が表示され、

「repository」フォルダの中に「pom」ファイルなどが生成されていれば、無事、成功だ。

プロジェクトルート > repository > グループドメイン > ライブラリ名 > バージョン

次回、この「repository」フォルダを、丸々フォルダごと、「GitHub」にアップロードすることになる。

(※執筆時「Android Studio 3.0.1」を使用)

サンプルアプリ

以下アプリには、「ある条件下でユーザにレビューをお願いする」機能が搭載されていて、これは、本記事記載の方法で作成したライブラリで動作しているので、良かったら参考にしてみてほしい。


シンプルなメモ帳はロック画面にも通知する-簡単操作とマテリアルデザインの無料ノート-MEMOBOSS

【動作環境】
Android OS 5.0以上

Made in Japan.
© CUTBOSS
Producer & Director, Boss of the Barber.
Lead Programmer & Designer, Boss of the Barber.

参考記事