Flutterプロジェクトでのメタデータバージョン不一致エラーの解決
問題の説明
FlutterプロジェクトでAndroid APKをビルドする際、次のエラーが発生します:
ERROR: R8: java.lang.IllegalArgumentException:
Provided Metadata instance has version 2.1.0,
while maximum supported version is 2.0.0.
To support newer versions, update the kotlinx-metadata-jvm library.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:minifyReleaseWithR8'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable
Compilation failed to complete
このエラーは、Kotlinメタデータのバージョン不一致が原因で発生します。プロジェクトで使用されているkotlinx-metadata-jvm
ライブラリがKotlin 2.1.0のメタデータをサポートしていない状態です。
根本原因
- Kotlinプラグインのバージョン(2.1.0)が新しすぎる
- 古いAndroid Gradle Plugin(AGP)が新しいKotlinメタデータを処理できない
- R8圧縮ツールとの互換性の問題
推奨解決策
方法1: Android Gradle Pluginの更新(最適解)⚡️
最新のAndroid StudioとFlutterツールとの互換性を確保するには、Android Gradle Pluginを更新します。
android/gradle.properties
ファイルに以下を追加:
# Gradle設定
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
android.enableJetifier=true
# 最新プラグイン用に警告を無効化
android.suppressUnsupportedCompileSdk=34
android/build.gradle
で依存関係を更新:
// android/build.gradle
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:8.6.0' // 8.6.0に更新
// ... 他の依存関係
}
}
android/gradle/wrapper/gradle-wrapper.properties
を修正:
# 最新のGradle Wrapperを使用
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
android/settings.gradle
のプラグインバージョン更新:
plugins {
id "com.android.application" version "8.6.0" apply false
// Kotlinバージョンはそのまま維持
id "org.jetbrains.kotlin.android" version "2.1.0" apply false
}
ビルド後のアクション
変更後は必ずプロジェクトをクリーン:
flutter clean
rm -rf android/build android/app/build
方法2: kotlinx-metadata-jvmの明示的追加
エラーメッセージが示唆する通り、直接依存関係を追加する方法です。
android/app/build.gradle
のdependencies
セクションに追加:
dependencies {
// 他の依存関係
// メタデータバージョン互換性を解決
runtimeOnly("org.jetbrains.kotlin:kotlinx-metadata-jvm:0.9.0")
}
この解決法の特徴
- 即効性があり、短期的な解決に適している
- 根本的なツールの互換性問題は解決しないため、中長期的にはプラグイン更新が推奨
非推奨: Kotlinプラグインダウングレード(最後の手段)
⚠️ この方法は新しいKotlin機能が使えなくなるため、一時的な回避策としてのみ使用:
// android/settings.gradle
plugins {
// Kotlinバージョンを2.0.0にダウングレード
id "org.jetbrains.kotlin.android" version "2.0.0" apply false
}
注意点
この方法では:
- Kotlinの最新機能が使用できなくなる
- 他のライブラリとバージョン衝突が発生する可能性が増加
- Flutterの将来のアップデートで互換性問題が再発するリスクあり
エラー発生メカニズムの詳細
- R8圧縮ツールがKotlinメタデータを処理
- プロジェクトのKotlinバージョン(2.1.0)がR8の対応上限(2.0.0)を超過
- 互換性エラー発生 → ビルドプロセス中断
予防的措置
定期的な依存関係更新:
bashflutter pub outdated flutter pub upgrade
プロジェクト作成時のバージョン指定:
bashflutter create --android-language kotlin --min-sdk-version 23 .
マルチデックス対応の確認:
groovy// android/app/build.gradle defaultConfig { multiDexEnabled true // 必須 }
Flutter SDKアップデート後のチェック:
bashflutter doctor flutter upgrade
まとめ
解決方法 | 推奨度 | 実行難易度 | 長期的安定性 |
---|---|---|---|
Android Gradle Plugin更新 | ★★★★★ | 中 | 高い |
kotlinx-metadata-jvm追加 | ★★★☆☆ | 低 | 中 |
Kotlinプラグインダウングレード | ★☆☆☆☆ | 低 | 低い |
最新のAndroidツールチェインとの互換性を維持するには、Android Gradle Pluginの更新(方法1) が最適解です。プロジェクト全体のツールバージョンを最新に保つことで、同様の互換性問題を未然に防止できます。