android.compileOptions.targetCompatibility は sourceCompatibility と一致していなければいけない

(追記: 最初targetCompatibilityを1.6, sourceCompatibilityを1.7にするのがベストだと考えたが、ビルドできなかったので修正)

Android Studio (as of 0.5.5) で新規プロジェクト作成のとき、Java7を選ぶことができる。しかし、Java7に対応しているのは Android 4.4からなので、minSdkVersionが 19 でないかぎりJava7のフル機能を使えるわけではない*1。プロジェクト作成直後は以下の様な build.gradle が作成されるが、Java7で追加されたクラスライブラリの新機能は使えない。

//app/build.gradle
android {
 
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

}

このとき、sourceCompatibilityとtargetCompatibilityが一致していないと "Information:javacTask: source release 1.7 requires target release 1.7" と怒られるので、間違って 1.7 のクラスライブラリを使ってもなにも言われないので注意しないといけない。

Java7の新しいクラスライブラリをうっかり使って実行時例外になるのも困るので、targetCompatibilityは1.6にしておくのがよさそうだ。そうしておくと、 Objects.equals() などを使おうとすると正しくコンパイルエラーになる。

android {
 
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_6
    }

}

*1:Android 4.4でもフル機能を使えるわけではないようだけど。