13
11

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 5 years have passed since last update.

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

Last updated at Posted at 2017-12-25

#あらすじ

前回、

【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」というフォルダを生成することを定義している。

この結果、

repository.png

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

###(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」)がデフォルトで表示されているはずなので、そこでそのままこのコマンドを実行しよう。

upload.png

以下が表示され、

upload_complete.png

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

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

repository_pom.png

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

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

#サンプルアプリ

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

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

【動作環境】
Android OS 5.0以上

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

#参考記事

13
11
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
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?