Hilt Unsupported metadata version in Kotlin
問題の概要
KotlinプロジェクトでDagger Hiltを使用する際に、以下のエラーが発生することがあります:
error: [Hilt]
Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException: Unsupported metadata version. Check that your Kotlin version is >= 1.0
at dagger.internal.codegen.kotlin.KotlinMetadata.metadataOf(KotlinMetadata.java:206)
このエラーは、KotlinのバージョンとHiltのバージョンが互換性がない場合に発生します。特にKotlin 1.5.10以降のバージョンを使用している場合によく見られます。
根本原因
この問題は、使用しているDagger Hiltのバージョンが、プロジェクトで使用されているKotlinのメタデータバージョンをサポートしていない場合に発生します。Hiltは内部でKotlinのメタデータを解析するため、両者のバージョンの互換性が重要です。
WARNING
古いバージョンのHiltは新しいKotlinバージョンのメタデータ形式を認識できない場合があります。逆に、新しいHiltバージョンは古いKotlinバージョンとの互換性に問題がある可能性もあります。
解決策
方法1: バージョンの互換性を確保する
最も一般的な解決策は、KotlinバージョンとHiltバージョンの互換性を確保することです。以下は推奨されるバージョンの組み合わせです:
plugins {
id("org.jetbrains.kotlin.android") version "1.9.24" apply false
id("com.google.dagger.hilt.android") version "2.48" apply false
}
plugins {
id("kotlin-kapt")
id("com.google.dagger.hilt.android")
}
dependencies {
implementation("com.google.dagger:hilt-android:2.48")
kapt("com.google.dagger:hilt-android-compiler:2.48")
}
kapt {
correctErrorTypes = true
}
plugins {
id 'org.jetbrains.kotlin.android' version '1.9.24' apply false
id 'com.google.dagger.hilt.android' version '2.48' apply false
}
plugins {
id 'kotlin-kapt'
id 'com.google.dagger.hilt.android'
}
dependencies {
implementation 'com.google.dagger:hilt-android:2.48'
kapt 'com.google.dagger:hilt-compiler:2.48'
}
kapt {
correctErrorTypes true
}
方法2: バージョン変数の使用
バージョンの不一致を防ぐために、変数を使用して一元的にバージョン管理することをお勧めします:
buildscript {
extra.apply {
set("hiltVersion", "2.48")
}
}
val hiltVersion = rootProject.extra.get("hiltVersion") as String
dependencies {
implementation("com.google.dagger:hilt-android:$hiltVersion")
kapt("com.google.dagger:hilt-android-compiler:$hiltVersion")
}
ext {
hiltVersion = '2.48'
}
dependencies {
implementation "com.google.dagger:hilt-android:${rootProject.ext.hiltVersion}"
kapt "com.google.dagger:hilt-android-compiler:${rootProject.ext.hiltVersion}"
}
方法3: Gradleバージョンカタログの使用
より現代的なアプローチとして、Gradleのバージョンカタログを使用することもできます:
[versions]
hilt = "2.48"
kotlin = "1.9.24"
[libraries]
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" }
[plugins]
hilt-android-plugin = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
plugins {
alias(libs.plugins.hilt.android.plugin) apply false
}
plugins {
alias(libs.plugins.hilt.android.plugin)
}
dependencies {
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
}
推奨バージョン対応表
以下は、KotlinバージョンとHiltバージョンの互換性対応表です:
Kotlinバージョン | Hiltバージョン | 備考 |
---|---|---|
1.5.x | 2.35 - 2.37 | サポート終了間近 |
1.6.x | 2.40 - 2.42 | 安定版 |
1.7.x | 2.42 - 2.44 | 安定版 |
1.8.x | 2.44 - 2.45 | 安定版 |
1.9.x | 2.48 - 2.50 | 推奨 |
2.0.0 | 2.51.1 | 最新 |
INFO
常に最新の互換性情報については、Dagger Hilt公式ドキュメントを確認してください。
その他の注意点
クラスパスと実装のバージョン一致: プロジェクトレベルのクラスパスとアプリレベルの実装バージョンが一致していることを確認してください。
KSPの使用: KAPTの代わりにKSP(Kotlin Symbol Processing)を使用する場合、適切なバージョンの組み合わせが必要です:
plugins {
id("com.google.devtools.ksp") version "1.9.24-1.0.20"
}
dependencies {
ksp("com.google.dagger:hilt-compiler:2.48")
}
- 関連ライブラリのバージョン:
androidx.hilt
ライブラリも互換性のあるバージョンを使用してください:
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")
kapt("androidx.hilt:hilt-compiler:1.0.0")
トラブルシューティング
問題が解決しない場合は、以下の手順を試してください:
- Clean & Rebuild: プロジェクトをクリーンして再ビルド
- キャッシュの削除: File > Invalidate Caches / Restart
- スタックトレースの確認: エラーの詳細を確認するために
--stacktrace
オプション付きでビルド
./gradlew assembleDebug --stacktrace
まとめ
「Unsupported metadata version」エラーは、KotlinとHiltのバージョンの互換性問題が原因であることがほとんどです。公式ドキュメントを確認し、推奨されるバージョンの組み合わせを使用することで、この問題を解決できます。バージョン管理を一元的に行うことで、今後同様の問題を防ぐことができます。