AndroidのCIパイプラインでAndroid StudioのJDKを使う
AndroidのCIパイプラインでgradleタスク実行する場合にはJDKが必要になります。
Android Studio経由でgradleタスク実行する場合はAndroid Studioに内包されたJDKが用いられます。
一方でmacOSのTerminalでプロジェクト作成時にimportされるgralde wrapper経由でgradleタスクを実行すると、利用するJDKはmacOSのものになります。
例えばCIパイプラインをmacOSのCI Runnerで実行する場合、何も設定しないとmacOS側のJDKが用いられてします。macOS側ではJava14、15を入れていた場合にはAndroid Studioで実行した結果と変わってしまう可能性があります。
例えばmacOSのTerminalでの./gradlew --version
の結果とAndroid Studio側での実行結果が微妙に異なっています。
# macOSでの./gradlew --versionの結果 $ ./gradlew --version ------------------------------------------------------------ Gradle 6.7.1 ------------------------------------------------------------ Build time: 2020-11-16 17:09:24 UTC Revision: 2972ff02f3210d2ceed2f1ea880f026acfbab5c0 Kotlin: 1.3.72 Groovy: 2.5.12 Ant: Apache Ant(TM) version 1.10.8 compiled on May 10 2020 JVM: 11.0.10 (Oracle Corporation 11.0.10+9) OS: Mac OS X 11.3.1 x86_64 # Android StudioのJREでの./gradlew --versionの結果 $ ./gradlew --version ------------------------------------------------------------ Gradle 6.7.1 ------------------------------------------------------------ Build time: 2020-11-16 17:09:24 UTC Revision: 2972ff02f3210d2ceed2f1ea880f026acfbab5c0 Kotlin: 1.3.72 Groovy: 2.5.12 Ant: Apache Ant(TM) version 1.10.8 compiled on May 10 2020 JVM: 11.0.8 (JetBrains s.r.o 11.0.8+10-b944.6916264) OS: Mac OS X 10.16 x86_64
ちなみにAndroid Studio 4.2からBundleされるJDKが11系に変わったようです。
build.gradleで利用するバージョンをきちんと指定していれば問題ないのですが、気になる場合はAndroid StudioのJDKでgralde タスクを実行するようにしておきましょう。
具体的にはgradleタスクを実行する前にJAVA_HOMEの設定をAndroid Studioが内包しているものに変更すればよいです。
例えばCIパイプラインを実行するシェルスクリプトの最初にJAVA_HOMEを入れ替えるようにするとよいでしょう。
macOSの場合、Android StudioのJDKは/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home
にあります。
!/bin/sh set -e set -x ... JAVA_HOME="/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home" ./gradlew --version ./gradlew lint ./gradlew test ./gradlew connectedAndroidTest