0
0

BindingExpressionBaseVisitor has been compiled by a more recent version of the Java Runtime

Posted at

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であればよい関係性ですね。

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0