Androidのコードをライブラリ化して他プロジェクトでも使えるようにする手順
以前、Kotlinの高階関数で遊んでいた時に、ロギング用のユーティリティを作っていたのですが、他のサンプルアプリやプロジェクトでも同様の処理を行うことが多々あったのでライブラリ化して使いまわせるようにしました。
ライブラリ化のために行った設定などを書いておきます。
元ネタの処理はこれ
いつも通り、ライブラリのコードなどは github上に置いてますので、そちらも参照ください。
環境
- macOS Sierra 10.12.6
- Android Studio 3.0
ライブラリ公開するまで
Android Studio ではライブラリ単体のプロジェクトを作成するということが出来ないみたいなので、一旦通常通りのAndroidアプリのプロジェクトを作成します。
その後、下記手順でライブラリのプロジェクトとして公開するようにします。
build.gradle の変更
こちらの記事を参考にさせていただきました。
【Android】Libraryを作ってprivateなgithubリポジトリにpushして、チームのみんなでgradleに書くだけで使えるようにするまで
変更は3点
- build.gradle の先頭で
apply plugin: 'com.android.application'
となっているところをapply plugin: 'com.android.library'
に変更 -
Maven リポジトリ作成用のタスクを追加
-
applicationId の定義を削除
build.gradle としては下記のようなファイルになるかと。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
apply plugin: 'com.android.library' // 1. apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' def repo = new File(rootDir, "repository") apply plugin: 'maven' // 2. uploadArchives { repositories { mavenDeployer { repository url: "file://${repo.absolutePath}" pom.version = '1.0.0' pom.groupId = 'com.ryuta46' pom.artifactId = 'android-logger' } } } android { compileSdkVersion 26 defaultConfig { // 3. // applicationId "com.ryuta46.androidlogger" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } ... |
apply plugin: 'com.android.library'
ではなく apply plugin: 'android-library'
と書いてある記事などもありますが、今は ‘android-library’ の記載は非推奨になっていて、下記のような警告がでますので ‘com.android.library’ を使うようにしています。
1 2 |
android-library' is deprecated; use 'com.android.library' instead |
また、3. で applicationId の定義を削除していますが、定義を残しておくと下記エラーが出てビルドできなくなりますので削除しています。
自動で付与されるので明示するなということでしょうかね。
1 2 |
Error:Library projects cannot set applicationId. applicationId is set to 'com.ryuta46.androidlogger' in default config. |
ライブラリ生成タスクを実行
作成した uploadArchives タスクを実行してライブラリを生成します。
1 2 |
$ ./gradlew uploadArchives |
あとは生成物をプッシュすれば公開完了です。
ライブラリ利用側の設定
リポジトリのパスを設定し、ライブラリの参照を追加すればOKです。
リポジトリのパスは、github上のリポジトリであれば https://raw.github.com/${githubのユーザ名}/${githubのプロジェクト名}/${リポジトリまでのパス}
でいけます。
github 上の階層と照らしあわせてもらえればどういうパスになるかイメージできるかと思います。
1 2 3 4 5 6 7 8 |
repositories { maven { url 'https://raw.github.com/ryuta46/android-logger/master/project/repository'} } dependencies { implementation 'com.ryuta46:android-logger:1.0.0' } |
ちなみに、Android Studio 3.0(で使われる Gradle 3.0) から dependencies に compile を指定するのは非推奨になっています。今回のように Android のライブラリを参照する場合は implementationとするのが良いようです。
implementation にするとビルド時間が劇的に早くなるそうですよ。
さいごに
同じような処理はライブラリ化して使いまわそうと思っていますが、プロジェクトをまたいで共有するのは後回しになってました。
今回、それほど苦なく共有できたのでよく使う部品は積極的に共有するようにしていきたいと思います。
(2017/10/30追記)
作成したライブラリ、Javaから見ると微妙だったので少し改良しました。
最後まで読んでいただきありがとうございます。 このブログを「いいな」と感じていただけましたら、Twiter にてフォローいただけるとうれしいです。ブログ更新情報などもお届けします。
Follow @ryuta461
この記事をシェアする

フリーランスのエンジニアしてます。Android、iOS アプリの開発、対向サーバの開発、C/C++のライブラリ開発が現在のメイン。趣味はテニス。3児の父。
もっと詳しく