Skip to content

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設定の場合

kotlin
// プロジェクトレベルの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構文を使用している場合

kotlin
// 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
}

バージョン確認

最新のKotlinバージョンは公式サイトで確認してください。また、Android Gradle PluginとKotlinの互換性については公式ドキュメントを参照してください。

2. Flutterプロジェクトの特別な対応

Flutterプロジェクトでは、Kotlinのバージョン設定がandroid/settings.gradleに移動している場合があります:

kotlin
// 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を実行

手動でキャッシュを削除する場合

bash
# Gradleキャッシュを削除
rm -rf ~/.gradle/caches

# またはプロジェクト内のキャッシュを削除
./gradlew cleanBuildCache

4. 依存関係の衝突解決

特定のライブラリがKotlinバージョンの衝突を引き起こしている場合:

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"
}

詳細なトラブルシューティング

ビルド設定の確認

プロジェクトのビルド設定を段階的に確認することをお勧めします:

  1. Kotlinプラグインのバージョンを統一する
  2. Gradleラッパーのバージョンを最新化する
  3. 依存ライブラリのKotlinバージョンを確認する
  4. 必要に応じてキャッシュをクリアする

React Nativeプロジェクトの場合

React Nativeプロジェクトでは、以下の設定をandroid/build.gradleに追加することで解決する場合があります:

groovy
allprojects {
    repositories {
        exclusiveContent {
            filter {
                includeGroup "com.facebook.react"
            }
            forRepository {
                maven {
                    url "$rootDir/../node_modules/react-native/android"
                }
            }
        }
    }
}

予防策

  1. 定期的なアップデート:KotlinとGradleプラグインを定期的に更新する
  2. バージョン変数の使用:ハードコーディングせず変数を使用する
  3. 互換性の確認:新しいライブラリを追加する際はKotlinバージョンの互換性を確認する
  4. CI環境の統一:開発環境とCI環境のツールバージョンを統一する

ライブラリ開発者向け

ライブラリを開発する場合、下位互換性を維持するために以下の設定を考慮してください:

kotlin
compileKotlin {
    kotlinOptions {
        jvmTarget = '1.8'
        languageVersion = '1.4' // 互換性を維持するために下位バージョンを指定
        apiVersion = '1.4'
    }
}

まとめ

Kotlinのメタデータバージョン不一致エラーは、主にバージョン間の互換性問題から発生します。プロジェクト全体で使用されるKotlinのバージョンを統一し、必要に応じてキャッシュのクリアや依存関係の調整を行うことで解決できます。

最新の安定版を使用し、定期的なメンテナンスを行うことで、これらの問題を未然に防ぐことが可能です。