前:CircleCIでAndroidのプロジェクトをビルドする

色々やってプロジェクトが複雑化してきたら、2回ビルドできなくなった。けど解決した。

circle.ymlはこうなっている

machine:
java:
version: oraclejdk8
environment:
JAVA_OPTS: "-Xms518m -Xmx2048m"
dependencies:
pre:
- echo y | android update sdk --no-ui --all --filter "extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository"
test:
pre:
- cd mobile/src/main/java/org/shokai/voicetweet/ && cp TwitterConfig.java.sample TwitterConfig.java
override:
- ./gradlew assembleDebug

メモリが足りない


メモリを4GB以上使うとテストがこける。

Warning: You build has exceeded the memory limit of 4G on 1 container.


CircleCiでAndroid開発を爆速にする | Covelline Developer Blog
を参考に、machineのJAVA_OPTSでメモリ使用量を設定した。
AndroidのVMを起動してのテストせず、ビルドだけなので2GBに制限した。見ているとgradleからたまにjavaのプロセスがforkしているように見えたのでとりあえず4GBの半分使うようにしておいた。

CircleCIでの実行時は環境変数CIRCLECIが設定されるのでbuild.gradleも設定した。

android {
(略)
dexOptions {
if(System.getenv()["CIRCLECI"] as boolean) {
javaMaxHeapSize "2048M"
preDexLibraries false
}
}
}
あとCircleCIではdex(Dalvic VMの実行ファイルだが、次回コンパイルを高速にするらしい?)を生成しないようにした。


Android SDKのアップデート


play-service-wearableを6.5.87から8.3.0にアップデートしたら、CircleCIに8.3.0が無くてこういうエラーが出る

Could not find com.google.android.gms:play-services-wearable:8.3.0.
Searched in the following locations:
https://jcenter.bintray.com/com/google/android/gms/play-services-wearable/8.3.0/play-services-wearable-8.3.0.pom
https://jcenter.bintray.com/com/google/android/gms/play-services-wearable/8.3.0/play-services-wearable-8.3.0.jar
file:/usr/local/android-sdk-linux/extras/android/m2repository/com/google/android/gms/play-services-wearable/8.3.0/play-services-wearable-8.3.0.pom
file:/usr/local/android-sdk-linux/extras/android/m2repository/com/google/android/gms/play-services-wearable/8.3.0/play-services-wearable-8.3.0.jar
file:/usr/local/android-sdk-linux/extras/google/m2repository/com/google/android/gms/play-services-wearable/8.3.0/play-services-wearable-8.3.0.pom
file:/usr/local/android-sdk-linux/extras/google/m2repository/com/google/android/gms/play-services-wearable/8.3.0/play-services-wearable-8.3.0.jar


CircleCIのドキュメントによるとdependenciesのpreでandroidコマンドを実行してupdateできるとの事だったので、circle.ymlに設定した。

dependencies:
pre:
- echo y | android update sdk --no-ui --all --filter "extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository"
–filterオプションに渡せるパッケージ名は
% android list sdk --all --extended

で確認できる。