2015.02.10
Android アプリのSDK 開発におけるJenkins の導入
こんにちは。次世代システム研究室のT.M. です。現在、Android アプリのためのSDK を開発しており、CI としてJenkins を導入しております。この記事では、SDK 開発におけるJenkins の導入方法について記述いたします。


はじめに
Android のSDK 開発では以下の一連の作業を何度も繰り返します。その作業の手間を省くため、CI としてJenkins を導入しました。一般的なAndroid アプリの開発と異なる点は、SDK のビルドおよび難読化をかける、という作業です。それらの作業もJenkins で行えるように、Jenkins の設定をしました。
- 単体テスト
- SDK のビルド
- 難読化
- SDK を組み込んだサンプルアプリのビルド
- DeployGate へのアップロード
前提とする環境
- Jenkins がインストールされている。
- Jenkins に以下のプラグインがインストールされている。
- Git Plugin
- Android Emulator Plugin
- Jenkins Multiple SCMs plugin
- Jenkins サーバにおいて、Android SDK がインストールされており、エミュレートする環境が整っている。
- SDK およびそのSDK を呼び出すサンプルアプリ、SDK の単体テストのソースコードがそれぞれGit リポジトリで管理されている。
- SDK のための難読化の設定ファイルが存在する。
Jenkins プロジェクトの設定
- Git リポジトリを登録する。
- ソースコード管理においてMultiple SCMs を選択する。
- Add SCM でGit を選択する。
- Git のRepositories において、Repository URL にSDK のGit リポジトリのURLを入力する。
- Additional Behaviours から Check out to a sub-directory を選択し、Local subdirectory for repo にsdk と入力する。
- サンプルおよびテストのGit リポジトリも同様に登録する。
- テストを行うためのエミュレータ環境を設定する。
- ビルド環境においてRun an Android emulator during build を選択する。
- テストで実行したい環境のエミュレータを設定する。
- ビルドからデプロイまでの手順を設定する。
SDK 開発において主に以下の手順が異なります。- テストは難読化をかけたいメソッドにも行うため、難読化をかけていないSDK を作成する。
- ビルド手順においてシェルの実行を選択し、シェルスクリプトにおいて以下のライブラリプロジェクト作成スクリプトを記述する。
cd ${WORKSPACE} export PATH=$PATH:/var/lib/jenkins/android-sdk-linux/tools:/usr/bin; android update lib-project -p ./sdk --target android-18
- Ant の呼び出しを選択し、以下のデバッグビルドの設定を記述する。(以下、Ant の呼び出しの際のプロパティの設定は同様のため省略する。)
使用するAnt: Ant ターゲット: clean debug ビルドファイル: sdk/build.xml プロパティ: sdk.dir=/var/lib/jenkins/android-sdk-linux java.compilerargs=-Xlint:-options
- ビルド手順においてシェルの実行を選択し、シェルスクリプトにおいて以下のライブラリプロジェクト作成スクリプトを記述する。
- 3-1 で作成したSDK のテストを実行する。
- 3-1 で作成したSDK をsample/libs に配置し、テストプロジェクトを作成するスクリプトをシェルスクリプトに記述する。
cd ${WORKSPACE} cp sdk/bin/classes.jar sample/libs/app-android-sdk.jar cp sdk/bin/classes.jar test/libs/app-android-sdk.jar export PATH=$PATH:/var/lib/jenkins/android-sdk-linux/tools:/usr/bin; android update test-project -m ../sample -p ./test
- Ant の呼び出しを選択し、以下のテストの設定を記述する。
使用するAnt: Ant ターゲット: clean debug install test ビルドファイル: test/build.xml
- 3-1 で作成したSDK をsample/libs に配置し、テストプロジェクトを作成するスクリプトをシェルスクリプトに記述する。
- SDK としてリリースするために、難読化をかけたSDK を作成する。
- 難読化したSDK を作成するためには、リリースビルドを行えば良いので、Ant の呼び出しを選択し、以下の設定を記述する。
使用するAnt: Ant ターゲット: clean release ビルドファイル: sdk/build.xml
- 難読化したSDK を作成するためには、リリースビルドを行えば良いので、Ant の呼び出しを選択し、以下の設定を記述する。
- 3-3 で作成した難読化をかけたSDK を利用したサンプルアプリをビルドする。サンプルはリリースせず、またDeployGate SDK の機能を利用するため、デバッグビルドを行う。
- 3-3 で作成したSDK を3-2 で配置した難読化をかけていないSDK に上書きをし、アンドロイドプロジェクトを作成する。ただし、難読化したSDK はsdk/bin/app-android-sdk.jar として作成されるよう難読化設定ファイルに記述されているものとする。
cd ${WORKSPACE} mv sdk/bin/app-android-sdk.jar sample/libs/app-android-sdk.jar export PATH=$PATH:/var/lib/jenkins/android-sdk-linux/tools:/usr/bin; android update project -p ./sample --target android-18
- Ant の呼び出しを選択し、以下のデバッグビルドの設定を記述する。
使用するAnt: Ant ターゲット: clean debug ビルドファイル: sample/build.xml
- 3-3 で作成したSDK を3-2 で配置した難読化をかけていないSDK に上書きをし、アンドロイドプロジェクトを作成する。ただし、難読化したSDK はsdk/bin/app-android-sdk.jar として作成されるよう難読化設定ファイルに記述されているものとする。
- 3-4 で作成したサンプルアプリをDeploy Gate にアップロードする。
- シェルスクリプトにおいてDeploy Gate API によりアップロードするスクリプトを記述する。
cd ${WORKSPACE}/sample/bin curl -F "[email protected]" -F "token=トークン" https://deploygate.com/api/users/ユーザ名/apps
- シェルスクリプトにおいてDeploy Gate API によりアップロードするスクリプトを記述する。
- テストは難読化をかけたいメソッドにも行うため、難読化をかけていないSDK を作成する。
- ビルド後の処理を設定する。
- ビルド後の処理の追加から成果物を保存を選択する。
- 作成したサンプルアプリのapk およびサンプルアプリに必要なSDK ファイルを保存する。
保存するファイル: **/sample/bin/*.apk,**/sample/libs/*.jar
- 作成したサンプルアプリのapk およびサンプルアプリに必要なSDK ファイルを保存する。
- ビルド後の処理の追加から成果物を保存を選択する。
おわりに
以上の設定を記述することで、Android アプリのSDK 開発においてJenkins を導入することができます。今後は、よりビルド作業の手間を省き、またより品質の高いものをリリースできるように、Jenkins の環境を整えようと考えております。
参考
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD