DataBindingを使っているプロジェクトで、AGPのバージョンを上げたところ以下のようなエラーが発生するようになりました。
エラー: cannot generate view binders java.lang.UnsupportedClassVersionError:
android/databinding/parser/BindingExpressionBaseVisitor has been compiled by
a more recent version of the Java Runtime (class file version 61.0),
this version of the Java Runtime only recognizes class file versions up to 55.0
※DataBindingはメンテナンスモードで推奨されません。脱却を急ぎましょう。
原因
build.gradle.kts
kotlin {
jvmToolchain(11)
}
AGPのJavaバージョンが17になっているのに、11を指定しているからですね。
指定するなら17以上にしましょう。
そもそも、通常これを指定する必要はありません。
どうしても指定しなければならない事情(そういう事情がありうるのか私には分かりませんが)でもなければ、削除しちゃいましょう。
Jakeも指定して良いことはほとんど無いといっています。
よくある勘違い
JDKが17になったから、targetも17にしなければならない、と思ってしまうというのが、よくある勘違いです。
これはデフォルトのJava 8のままでよいでしょう。DesugarによってJava 11までは使えるようになっていますので、11にしても良さそうです。
build.gradle.kts
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
targetは生成されるバイトコードのバージョン指定です。
上位バージョンのJDKでも下位バージョン向けにコンパイルすることは可能です。(下限はありますが)
toolchain ≧ targetであればよい関係性ですね。
以上です。