こういうエラーの解決方法
- Class 'XXX' was compiled with an incompatible version of Kotlin.The binary version of its metadata is 1.8.0, expected version is 1.6.0
意訳
- パッケージ「 Kotlin
1.8.0
が欲しいよ〜。 君が持ってる1.6.0
じゃ古すぎて嫌だよ〜。」
どうすれば良い?
- 必ずしも
1.8.0
ぴったりを用意する必要はなく、少し新しめの Kotlin を用意すれば解決することが多いです。ただしコピペで終わるような解決策がないのでちょこっと知識が必要です。急がば回れです。
Kotlinを新しくしたいだけなのに...
面倒なたらい回しが始まるので覚悟しましょう。数字は今回適当なのでエラーを見ながら設定しましょう。
- パッケージ 「Kotlin
1.8.0
が欲しいよ〜」 - Kotlin 「KGP
1.8.0
が欲しいよ〜」 - KGP 「Gradle
7.3.3
が欲しいよ〜」 - Gradle 「Java
17
が欲しいよ〜」 - Java 「Android Studio
2024.1.1
が欲しいよ〜」
パッケージ 「Kotlin 1.8.0
が欲しいよ〜」
エラーの通りなので、以下のファイルを変更しましょう。Flutterバージョンによっては書かなくて良いときもあるので 記述が見つからなければ何もしなくてOK です。
// android/build.gradle
buildscript {
ext.kotlin_version = '1.8.0'
}
Kotlin 「KGP 1.8.0
が欲しいよ〜」
ついでに AGP 1.8.0
も欲しいよ〜。
- KGP ...Gradleを強化してKotlin関連の機能を補ってくれるプラグイン
- AGP ...Gradleを強化してAndroid関連の機能を補ってくれるプラグイン
書き方はいくつかパターンがあります。自分のプロジェクトに当てはまりそうなパターンを選んでください。
パターン1
// android/build.gradle
buildscript {
dependencies {
// AGP
classpath 'com.android.tools.build:gradle:7.3.0'
// KGP ($kotlin_version と書いてあれば変更しなくてOK)
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
パターン2
// android/settings.gradle
plugins {
// AGP
id "com.android.application" version "7.3.0" apply false
// KGP
id "org.jetbrains.kotlin.android" version "1.8.0" apply false
}
パターン3
// android/settings.gradle.kts
plugins {
// AGP
id("com.android.application") version "7.3.0" apply false
// KGP
id("org.jetbrains.kotlin.android") version "1.8.0" apply false
}
KGP 「Gradle 7.3.3
が欲しいよ〜」
// android/gradle/wrapper/gradle-wrapper.poperties
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
Gradle 「Java 17
が欲しいよ〜」
今回、直接Javaのバージョンを変えるわけではないので、確認だけしておきます。
# 今現在プロジェクトで使われているJavaを確認
$ flutter doctor -v
# OpenJDK と書かれているところで Java のバージョンがわかる
# OpenJDK は 1.x の表記になっている
# 例えば 1.8 なら Java 8 のこと
- flutter に頼らない Java バージョン確認方法
1. Android Studioを開く
2. メニュー > File > Project Structure > SDK Location > JDK Location
3. 例えば jdk1.8.0 と表示されていれば、Java 8 のこと
Java 「Android Studio 2024.1.1
が欲しいよ〜」
とりあえず Android Studio は最新で大丈夫です。
最近のモバイルアプリ開発の場合, Javaを単体で用意することは少なく Android Studio についてくる OpenJDK を使っているはず。なので Java を更新したければ Android Studio をインストールしなおすのが一番早いです。
(Flutterの大型アップデートに合わせて, 3ヶ月に一回くらいは Android Studio や Xcode も更新しよう)
それでもJavaのバージョンが足りない場合、 Android Studio はそのままで Java だけアップデートすることもできます。以下のページに説明があります。
https://developer.android.com/build/jdks
おまけ Android Studio 「AGP 3.2 以上 が欲しいよ〜」
あまり気にすることは少ないですが、ここで AGP の手順まで戻ることもあります。
バージョン対応はこちらから確認
https://developer.android.com/studio/releases?hl=ja
全員「((これで準備OK))」
これでようやく目的のパッケージを使うことができます。ビルドエラーが出ないことを確認してください。
それでもダメな場合
1. パッケージの組み合わせが不可能
例えば、
- パッケージA ... 新すぎる
- パッケージB ... 古すぎる
みたいになっていたら両方の要求を満たすのが難しいことがあります。
どちらかのパッケージを新しくしたり古いバージョンに戻してみましょう。
2. パッケージ特有の設定が必要
パッケージによっては build.gradle に〜を書き込んでください。のような注意書きがあります。
パッケージ公式の説明ページを呼んで見逃しがないか確認しましょう。
他にも何か情報があれば追記します。