はじめに #
Flutterを使ってandroidのアプリを作っていました。 androidのSDKを上げようと思い作業をしたのですが、コンパイラのバージョンが衝突するエラーが起きました。 今回試行錯誤の結果、対策らしきものが見つかったので整理します。
結論 #
以下で行けました。2,3の情報があまりなく、苦労しました。
- build.gradleにコンパイラの設定をする
- flutter pub cleanでライブラルのキャッシュを削除する
- flutterプロジェクトのコンパイラ設定はandorid/build.gradleでsubproject毎に設定する
エラー内容 #
以下のようなエラーです。
‘compileDebugJavaWithJavac’ task (current target is 1.8) and ‘kaptGenerateStubsDebugKotlin’ task (current target is 17) jvm target compatibility should be set to the same Java version.
パッケージごとに違うバージョンでエラーが出たり、1.8と17が逆だったりします。
設定内容 #
こちらの記事を参考にベースの設定をします AGP8とJDK17に対応した際の調査結果まとめ|TechRacho by BPS株式会社
基本的には以下の内容です。
- android/app/build.gradleでSDKのバージョンを指定しよう
- android/app/build.gradleでJAVAコンパイラオプションを指定しよう
- android/app/build.gradleでkotlin用のJAVAコンパイラオプションを指定しよう
私はこれを指定してもエラーが消えませんでした。 ので以下を実施しました。
上記設定をしてもだめな場合、flutterのライブラリキャッシュを消します。
flutter pub cache clean -f
どうやらflutterのライブラリでつかうコンパイラのバージョンがうまく解決されていないように思います。
gralde を更新後にキャッシュをクリアし改めてflutter pub getするとビルドできる場合がありました。
それでもだめな場合、全てのモジュールにコンパイラバージョンを指定します。
android/build.gradleに以下を追記します。
:::details subproject毎にコンパイラを指定するコード
subprojects {
// android projectのコンパイラ設定を実施
// ここで設定しないと全てのモジュールに設定がされないみたいで、モジュールごとに古いコンパイラを使ってしまってエラーになったりする
afterEvaluate { project ->
if (project.hasProperty("android")) {
project.android {
compileSdkVersion 使いたいSDKバージョン
ndkVersion = 使いたいNDKバージョン
compileOptions {
sourceCompatibility JavaVersion.使いたいJAVAバージョン
targetCompatibility JavaVersion.使いたいJAVAバージョン
}
}
project.tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
jvmTarget = '使いたいJAVAバージョン'
}
}
}
}
}
:::
:::details android/build.gradleのサンプル
allprojects {
repositories {
google()
mavenCentral()
}
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:deprecation"
}
}
subprojects {
// android projectのコンパイラ設定を実施
// ここで設定しないと全てのモジュールに設定がされないみたいで、モジュールごとに古いコンパイラを使ってしまってエラーになったりする
afterEvaluate { project ->
if (project.hasProperty("android")) {
project.android {
compileSdkVersion 35
ndkVersion = '27.0.12077973'
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
project.tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
jvmTarget = '17'
}
}
}
}
}
}
rootProject.buildDir = "../build"
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(":app")
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
:::
挙動をみると、flutterで使っているパッケージごとにコンパイラのバージョンが不一致であるというエラーが出てしまいます。android/app/build.gradleで指定してもライブラリのコンパイラバージョンは指定できていない?様に思いました。上記設定を実施すると無事ビルドできました。
Reply by Email