長らくiOSアプリを開発していましたが、新規アプリ開発のタイミングでAndroidアプリ開発の門を叩き早くも3ヶ月がたちます。
Androidアプリエンジニアとしてのプレゼンスを高めるために、何かOSS開発してみようと思い立ちました。
これまでiOSアプリ開発のためのライブラリもいくつか公開してきましたが、アプリを開発するのとは違う作業がいくつも必要になり思いの外手間がかかってしまいます。
本記事ではAndroidアプリ向けのライブラリを公開する流れをiOSアプリ開発者視点で紹介します。
3行まとめ
- Androidにおけるライブラリとは
- ライブラリ公開までのステップ
- 公開したライブラリのインストール方法
環境
- Android Studio 3.0.1
- Kotlin 1.2.0-release-Studio3.0-1
Androidにおけるライブラリ
iOSアプリ開発のライブラリはCarthageなどを使ってライブラリをインストールすることが一般的になっていますが、Androidアプリではどのようになっているのでしょうか。
公開する側と利用する側から説明します。
公開する側
ライブラリのAARをMavenリポジトリに含めて配布する
利用する側
build.gradleにAARをインストールする設定を書いてビルドする
用語 | 解説 |
---|---|
AAR | ・ Android ARchiveの略 ・ Androidライブラリのソースコードと画像やXMLなどのリソースをまとめて管理 ・ 実態は特定のディレクトリ構造をzipしたもの |
Maven | Javaプログラムをビルドするためのツール |
build.gradle | ビルドシステムであるGradleの設定ファイル |
文章にすると一言になってしまいましたが、具体的な作業についてさらに説明していきます。
ライブラリ公開までのステップ
- プロジェクト作成
- ライブラリモジュールを追加
- ライブラリ本体のコードを書く
- build.gradleを編集
- AARをビルド
- Mavenリポジトリを作成
- GitHubに公開
プロジェクトを作成
まずはAndroidアプリのプロジェクトを作成します。
Activityの種類を選択する画面では、何を選択してもよいのですが、Empty Activityを選択しておくとライブラリの動作確認に役立つでしょう。
ライブラリモジュールを追加
下記の流れでライブラリモジュールを追加します
File → New → New Module → Android Library
コードを書く
ここでライブラリ本体のコードを書いていきましょう。
今回は、文字列がemailかどうかを判別する簡単なクラスを一つ作成しました。
ライブラリのコードをデバッグするにあたって、プロジェクト作成時に作ったEmptyActivityのAndroidアプリ上で動かしてみるのが良いと思います。
build.gradleを編集
ライブラリのコードができあがったら、build.gradleを変更します。
app/build.gradle
アプリモジュールをライブラリモジュールに変換するように設定を変更します。
またライブラリモジュールはapplicationId
を持つことができないので、設定を削除します。
// apply plugin: 'com.android.application'
apply plugin: 'com.android.library' // 1行目を変更
// applicationId "com.worlddowntown.emailvalidator" // 消す
この設定変更によって、プロジェクトを実機やシミュレータにビルドすることができなくなります。
再びライブラリのデバッグをする際は設定を元に戻しましょう。
library/build.gradle
AARを含むMavenリポジトリを生成するGradleスクリプトを追記します。
ここでライブラリのバージョンなどを指定します。
これらはGradleスクリプトを実行するとpomと呼ばれるMavenの設定ファイルに記述されます。
def repo = new File(rootDir, "repository")
apply plugin: "maven"
uploadArchives {
repositories {
mavenDeployer {
repository url: "file://${repo.absolutePath}"
pom.version = '1.0.0'
pom.groupId = 'com.worlddowntown.emailvalidator'
pom.artifactId = 'emailvalidator'
}
}
}
AARをビルド
gradlew
コマンドを実行して、AARを作成して見ましょう。
gradlew
コマンドは、Androidプロジェクトで利用可能なすべてのビルドタスクを実行するためのコマンドです。
引数に assembleRelease
を付けることでリリースビルドができます。
コマンド実行後、下記のような .aar ファイルが作成されます。
$ ./gradlew assembleRelease
$ tree app/build/outputs
app/build/outputs
├── aar
│ └── app-release.aar
└── logs
└── manifest-merger-release-report.txt
Mavenリポジトリを作成
build.gradleに記述したコマンドを実行し、Mavenリポジトリを作成します。
$ ./gradlew uploadArchives
$ tree repository
repository
└── com
└── worlddowntown
└── emailvalidator
└── emailvalidator
├── 1.0.0
│ ├── emailvalidator-1.0.0.aar
│ ├── emailvalidator-1.0.0.aar.md5
│ ├── emailvalidator-1.0.0.aar.sha1
│ ├── emailvalidator-1.0.0.pom
│ ├── emailvalidator-1.0.0.pom.md5
│ └── emailvalidator-1.0.0.pom.sha1
├── maven-metadata.xml
├── maven-metadata.xml.md5
└── maven-metadata.xml.sha1
GitHubにアップロード
リポジトリ本体をGitHubにアップロードすると、ライブラリの公開は完了です。
$ git push origin master
ホスティング方法はさまざま
個人のライブラリ開発にはGitHubにホスティングするが一番手軽ですが、ホスティング先は他にも幾つか存在します。
それぞれ特徴がありますが、下に行くほど公開するまでの手間が多く敷居が高いイメージです。
サービス | 説明 |
---|---|
GitHub | 今回のように個人が気軽にライブラリを公開するならこれ |
JitPack | GitHubのコードをbuild.graldeでインストールする形式にパッケージ化してくれるサービス |
JFrog Bintray | JFrog社が提供するライブラリ配布のためのサービス |
Bintray JCenter | Bintrayが管理する公式の中央リポジトリ |
Maven Central Repository | Sonatype社が管理するMavenの中央リポジトリ |
今回の成果物
文字列のEmail判定をするだけのシンプルなライブラリを公開しました。
ライブラリを利用する
Androidアプリプロジェクトのbuild.gradleに追記
dependencies {
compile 'com.worlddowntown.emailvalidator:emailvalidator:1.0.0'
}
repositories {
maven { url 'http://raw.github.com/WorldDownTown/EmailValidator/master/repository/' }
}
import com.worlddowntown.emailvalidator.EmailValidator
...
EmailValidator("foobar@example.com").isValid // true
EmailValidator("foobarexample.com").isValid // false
参考資料
Android ライブラリの作成 | Android Studio
まとめ
MavenリポジトリとしてAARをGitHubにpushすることで、Androidライブラリとして公開することができました。
iOS開発でのCarthageやCocoaPodsのような外部ライブラリに依存せずに、Androidアプリの設定を記述するGradleファイルで、ライブラリ設定も記述できるのが良いですね。
イケてるライブラリが作れたら、今後大きなリポジトリに公開してみたいものです。