LoginSignup
126
107

More than 5 years have passed since last update.

CI環境でAndroid SDKのダウンロードを自動化する2016

Last updated at Posted at 2016-07-25

みなさん、CIしてますか。

AndroidアプリのCI環境となるマシンには、Android SDKがインストールされていないといけません。今までみなさんは、どのように環境構築を行っていたでしょうか。

Gradle Plugin for Android v2.2.0で、CI環境構築が少しだけ簡単になりそうなので、紹介したいと思います。

一般的な方法

CI職人の諸兄ならば、CI環境へAndroid SDKをダウンロードするために、いずれかの方法を使ったことがあるのではないでしょうか。

筆者の観測範囲では、自分で細かく操作したい人はandroid update sdkコマンド、ある程度おまかせで行きたい人はsdk-manager-pluginを使っていたように思います。

さよならsdk-manager-plugin、こんにちはauto-download

さて、6月にJWがsdk-manager-pluginをdeprecatedにしたことはご存知でしょうか。

これはGoogleが公式に同様の機能をサポートしたのが理由です。Gradle Plugin for Android v2.2.0-alpha4のリリースノートを見ると、次の項目が入っています。

SDK auto-download: Gradle will attempt to download missing SDK packages that a project depends on.

Awesome!

sdk-manager-pluginも、新しいサポートライブラリが出たりすると保守が間に合わなくてしばらく動かせなくなるなど、問題を抱えていたので、公式サポートは大歓迎です。

使い方

2つの設定が必要です。

  1. Gradle Pluginのバージョンを上げる
  2. ライセンスファイルをAndroid SDKのフォルダに置く

Gradle Pluginのバージョンを上げる

Gradle Plugin for Androidをv2.2.0-alpha4より高いバージョンにしてください。

build.gradle
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
    }
}

ライセンスファイルをAndroid SDKのフォルダに置く

実は、Gradle Pluginのバージョンを上げただけだと、初回に落ちます。罠ですね。

Gradleビルドが落ちる
$ ./gradlew clean :lib:testDebugUnitTest
# 省略
FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':lib'.
> You have not accepted the license agreements of the following SDK components:
  [Android SDK Build-Tools 24.0.1].
  Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager.
  Alternatively, to learn how to transfer the license agreements from one workstation to another, go to http://d.android.com/r/studio-ui/export-licenses.html

You have not accepted the license agreements of the following SDK components

GUIからAndroid SDKを更新するときに出てくるライセンスの承認を、Gradleビルド中にできなかったために起きているエラーのようです。

対策は次のURLで紹介されています。

ざっくりまとめると、

  • $ANDROID_HOME/licensesディレクトリに入っているファイルには、どのライセンスを承認済みなのかというデータが入っている
  • 手元のマシンで承認したライセンスについてのファイルを、CI環境の$ANDROID_HOME/licensesにコピーしてね

ということでした。実際に手元の$ANDROID_HOMEを漁ってみます。

$ cat $ANDROID_HOME/licenses/android-sdk-license
8933bad161af4178b1185d1a37fbf41ea5269c55%

これをCIサーバーにコピーすると、ライセンスが承認された状態でCIが動くようになります。

$ ./gradlew clean :lib:testDebugUnitTest
Preparing "Install Android SDK Build-Tools 24.0.1".
"Install Android SDK Build-Tools 24.0.1" ready.
Finishing "Install Android SDK Build-Tools 24.0.1"
Installing Android SDK Build-Tools 24.0.1 in /Users/ciuser/.android-sdk/build-tools/24.0.1
"Install Android SDK Build-Tools 24.0.1" complete.

自動でダウンロードされてる! やった!

まとめ

一昔前と比べて、Android開発のCI環境構築が随分と楽になってきたように思います。

とはいえ、まだまだ導入している企業は多くはないようです。

自動テストをガッツリやれとはいいません。Lintとかビルドが通るか試すだけでもいいので、品質向上のために、CIサーバー上で./gradlew clean buildを回してみませんか。

宣伝(プライベート)

↑のアンケートを取ってた@mochicoが夏コミに向けてAndroidのCIサービスについてまとめた記事を書いてるらしいので、みなさんコミケでは是非、3日目西a-05abのTechBoosterにお越しください。

宣伝(会社)

ウォーターセル株式会社では、CIに造詣が深いモバイルエンジニアを募集しています。地球人口100億人時代の食糧問題を解決する礎になるお仕事に興味がある方はご連絡ください。

126
107
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
126
107