🐞

AndroidStudioをLadybugに上げると、コンパイルエラーになる

2024/11/26に公開

事象

AndroidStudioをLadybugに上げると、Koalaではビルドできていたものが、エラーになるようになった。

Execution failed for task ':hoge-module:compileKotlin'.
> Inconsistent JVM-target compatibility detected for tasks 'compileJava' (17) and 'compileKotlin' (21).

メッセージとしてはJVM-targetに一貫性が無いと言われているが、Koalaでは通っていて何も変更はしていない。
また、compileOptionsとKotlinOptionsは、共通化した下記を各build.gradleに適用していたので、なぜエラーが出るのか謎だった。

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }

原因と解決

エラーになっているモジュールを見ると、全てjava-libraryだった。
共通化したものはandroid-library向けのもので、java-libraryには適用していなかった。
そして、javaのcompatibilityの記載はあったが、kotlinOptionsの記載がなかった。
Koalaまでは、それでもビルドが通るので、デフォルトのjvmTargetが21に変わったのかもしれない。

記載していなかったモジュールのgradleファイルに、下記を記載すればビルドが通る。

tasks.compileKotlin {
    kotlinOptions {
        jvmTarget = "17"
    }
}

が、記載するとkotlinOptionsがdeprecatedになっている。

調べてみると、下記の記事が出てくる。
https://stackoverflow.com/questions/77363060/how-to-replace-the-deprecated-kotlinoptions-in-a-java-library-kotlin-module

この記事の通りにすればdeprecatedもなくなった。

ktsの場合
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile

tasks.withType<KotlinJvmCompile>().configureEach {
    compilerOptions {
        jvmTarget.set(JvmTarget.JVM_17)
    }
}
groovyの場合
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile

tasks.withType(KotlinJvmCompile).configureEach {
  compilerOptions {
    jvmTarget.set(JvmTarget.JVM_17)
  }
}

めでたしめでたし。

Discussion