悩んだ点
Android Studio で apk などをビルドするとき、build.gradle に、Java JDK のバージョンを指定する場合がありますが、指定しない(android.compileOptions を指定しない)場合は、Android Gradle Plugin がよしなに処理します。
- 例
- compileSdkVersion を 19 にする -> JDK 1.6 が設定される
- compileSdkVersion を 23 にする -> JDK 1.7 が設定される
どこでよしなにやっているのかが分からなかったので調べました。
JavaVersion javaVersionToUse;
if (compileSdkLevel == null || (0 <= compileSdkLevel && compileSdkLevel <= 20)) {
javaVersionToUse = JavaVersion.VERSION_1_6;
} else {
javaVersionToUse = JavaVersion.VERSION_1_7;
}
つまるところ、Google としては、compileSdkVersion が API20 以下だと JDK1.6、API21からは JDK 1.7 でコンパイルすることをデフォルトとしている、ということになります。ちなみに CompileOptions クラスの JDK のデフォルト値は JavaVersion.VERSION_1_6 になっています。
おまけ
gradle(w) 実行時に、--debug オプションを付けるとわかるのですが、ログに -source, -target が出ないことがあります。
- 例:JDK1.7 環境 + compatibility を 1.6 にする
[DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: -source 1.7 -target 1.7 -d ...
- 例:JDK1.7 環境 + compatibility を 1.7 にする
[DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: -d ...
つまり、ビルド環境の JDK のバージョンと、compatibility のバージョンが一致していた場合は、-source, -target がログに出ないことになります。こちらは Gradle Java Plugin の仕様のようです。