Kotlin メタデータバージョン不一致エラーの解決
問題の概要
AndroidやFlutterプロジェクトのビルド時に、以下のようなエラーが発生することがあります:
Module was compiled with an incompatible version of Kotlin.
The binary version of its metadata is 1.5.1, expected version is 1.1.16
このエラーは、プロジェクト内で使用されているKotlinのバージョンに互換性がない場合に発生します。具体的には、依存ライブラリが新しいバージョンのKotlinでコンパイルされているのに対し、プロジェクト自体は古いバージョンのKotlinを使用している場合などです。
注意点
この問題はさまざまな要因で発生する可能性があり、プロジェクトの種類(Flutter、React Native、ネイティブAndroidなど)によって解決方法が異なります。
主な解決方法
1. Kotlinバージョンの統一
最も一般的な解決策は、プロジェクト内のKotlin関連のバージョンを統一することです。
従来のbuild.gradle設定の場合:
// プロジェクトレベルのbuild.gradle
buildscript {
ext.kotlin_version = '1.9.23' // 最新の安定版を使用
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:8.3.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
新しいplugins構文を使用している場合:
// settings.gradle(Flutterプロジェクトなど)
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.3.1" apply false
id "org.jetbrains.kotlin.android" version "1.9.23" apply false
}
2. Flutterプロジェクトの特別な対応
Flutterプロジェクトでは、Kotlinのバージョン設定がandroid/settings.gradle
に移動している場合があります:
// android/settings.gradle
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.3.1" apply false
id "org.jetbrains.kotlin.android" version "1.9.23" apply false // ここを修正
}
3. キャッシュのクリア
ビルドキャッシュが原因でエラーが発生することがあります:
Android Studioの場合:
File > Invalidate Caches / Restart
を実行
手動でキャッシュを削除する場合:
# Gradleキャッシュを削除
rm -rf ~/.gradle/caches
# またはプロジェクト内のキャッシュを削除
./gradlew cleanBuildCache
4. 依存関係の衝突解決
特定のライブラリがKotlinバージョンの衝突を引き起こしている場合:
// app/build.gradle
dependencies {
// 競合するライブラリを除外
implementation("some.library") {
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib'
}
// または、明示的にバージョンを指定
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.23"
}
詳細なトラブルシューティング
ビルド設定の確認
プロジェクトのビルド設定を段階的に確認することをお勧めします:
- Kotlinプラグインのバージョンを統一する
- Gradleラッパーのバージョンを最新化する
- 依存ライブラリのKotlinバージョンを確認する
- 必要に応じてキャッシュをクリアする
React Nativeプロジェクトの場合
React Nativeプロジェクトでは、以下の設定をandroid/build.gradle
に追加することで解決する場合があります:
allprojects {
repositories {
exclusiveContent {
filter {
includeGroup "com.facebook.react"
}
forRepository {
maven {
url "$rootDir/../node_modules/react-native/android"
}
}
}
}
}
予防策
- 定期的なアップデート:KotlinとGradleプラグインを定期的に更新する
- バージョン変数の使用:ハードコーディングせず変数を使用する
- 互換性の確認:新しいライブラリを追加する際はKotlinバージョンの互換性を確認する
- CI環境の統一:開発環境とCI環境のツールバージョンを統一する
ライブラリ開発者向け
ライブラリを開発する場合、下位互換性を維持するために以下の設定を考慮してください:
compileKotlin {
kotlinOptions {
jvmTarget = '1.8'
languageVersion = '1.4' // 互換性を維持するために下位バージョンを指定
apiVersion = '1.4'
}
}
まとめ
Kotlinのメタデータバージョン不一致エラーは、主にバージョン間の互換性問題から発生します。プロジェクト全体で使用されるKotlinのバージョンを統一し、必要に応じてキャッシュのクリアや依存関係の調整を行うことで解決できます。
最新の安定版を使用し、定期的なメンテナンスを行うことで、これらの問題を未然に防ぐことが可能です。