Skip to content

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バージョンの互換性を確保することです。以下は推奨されるバージョンの組み合わせです:

kotlin
plugins {
    id("org.jetbrains.kotlin.android") version "1.9.24" apply false
    id("com.google.dagger.hilt.android") version "2.48" apply false
}
kotlin
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
}
groovy
plugins {
    id 'org.jetbrains.kotlin.android' version '1.9.24' apply false
    id 'com.google.dagger.hilt.android' version '2.48' apply false
}
groovy
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: バージョン変数の使用

バージョンの不一致を防ぐために、変数を使用して一元的にバージョン管理することをお勧めします:

kotlin
buildscript {
    extra.apply {
        set("hiltVersion", "2.48")
    }
}
kotlin
val hiltVersion = rootProject.extra.get("hiltVersion") as String

dependencies {
    implementation("com.google.dagger:hilt-android:$hiltVersion")
    kapt("com.google.dagger:hilt-android-compiler:$hiltVersion")
}
groovy
ext {
    hiltVersion = '2.48'
}
groovy
dependencies {
    implementation "com.google.dagger:hilt-android:${rootProject.ext.hiltVersion}"
    kapt "com.google.dagger:hilt-android-compiler:${rootProject.ext.hiltVersion}"
}

方法3: Gradleバージョンカタログの使用

より現代的なアプローチとして、Gradleのバージョンカタログを使用することもできます:

toml
[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" }
kotlin
plugins {
    alias(libs.plugins.hilt.android.plugin) apply false
}
kotlin
plugins {
    alias(libs.plugins.hilt.android.plugin)
}

dependencies {
    implementation(libs.hilt.android)
    kapt(libs.hilt.compiler)
}

推奨バージョン対応表

以下は、KotlinバージョンとHiltバージョンの互換性対応表です:

KotlinバージョンHiltバージョン備考
1.5.x2.35 - 2.37サポート終了間近
1.6.x2.40 - 2.42安定版
1.7.x2.42 - 2.44安定版
1.8.x2.44 - 2.45安定版
1.9.x2.48 - 2.50推奨
2.0.02.51.1最新

INFO

常に最新の互換性情報については、Dagger Hilt公式ドキュメントを確認してください。

その他の注意点

  1. クラスパスと実装のバージョン一致: プロジェクトレベルのクラスパスとアプリレベルの実装バージョンが一致していることを確認してください。

  2. KSPの使用: KAPTの代わりにKSP(Kotlin Symbol Processing)を使用する場合、適切なバージョンの組み合わせが必要です:

kotlin
plugins {
    id("com.google.devtools.ksp") version "1.9.24-1.0.20"
}

dependencies {
    ksp("com.google.dagger:hilt-compiler:2.48")
}
  1. 関連ライブラリのバージョン: androidx.hiltライブラリも互換性のあるバージョンを使用してください:
kotlin
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")
kapt("androidx.hilt:hilt-compiler:1.0.0")

トラブルシューティング

問題が解決しない場合は、以下の手順を試してください:

  1. Clean & Rebuild: プロジェクトをクリーンして再ビルド
  2. キャッシュの削除: File > Invalidate Caches / Restart
  3. スタックトレースの確認: エラーの詳細を確認するために--stacktraceオプション付きでビルド
bash
./gradlew assembleDebug --stacktrace

まとめ

「Unsupported metadata version」エラーは、KotlinとHiltのバージョンの互換性問題が原因であることがほとんどです。公式ドキュメントを確認し、推奨されるバージョンの組み合わせを使用することで、この問題を解決できます。バージョン管理を一元的に行うことで、今後同様の問題を防ぐことができます。