【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.
参考記事
Author And Source
この問題について(【Android】「自作ライブラリ」を「GitHub」に置いて「Gradle」でビルドするだけで利用できるようにする(2)), 我々は、より多くの情報をここで見つけました https://qiita.com/CUTBOSS/items/b4f180d4824fdd50e91a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .