Avatar ·

Hilt Unsupported metadata version в Kotlin: как исправить ошибку при сборке Android-проекта

Привет, коллеги! Я новичок в Android-разработке и использую Kotlin с Jetpack Compose. Недавно решил добавить в проект Hilt для внедрения зависимостей, но столкнулся с ошибкой, которую не могу победить уже третий день. Вот мой build.gradle.kts (app): ```kotlin plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("kotlin-kapt") id("dagger.hilt.android.plugin") } android { compileSdk = 34 buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.4" } } dependencies { implementation("com.google.dagger:hilt-android:2.48") kapt("com.google.dagger:hilt-compiler:2.48") implementation("androidx.hilt:hilt-navigation-compose:1.1.0") } ``` При сборке получаю ошибку: ``` Execution failed for task ':app:kaptDebugKotlin'. > Unsupported metadata version in Kotlin. Please update your Kotlin version or use a compatible Hilt version. ``` Версия Kotlin: 1.9.20. Пробовал менять версии Hilt — не помогает. Кто сталкивался? Как это исправить? Может, нужно что-то менять в настройках Gradle? Заранее спасибо! <<>>

Причина ошибки

Ошибка Unsupported metadata version in Kotlin возникает из-за несовместимости версий Kotlin и Hilt. Hilt использует kapt для генерации кода, и каждая версия Hilt поддерживает только определённый диапазон версий Kotlin. В вашем случае Kotlin 1.9.20 требует Hilt 2.50+ (или более новую версию), а вы используете Hilt 2.48.

Решение

Есть два надёжных способа исправить проблему:

Способ 1: Обновить Hilt до совместимой версии

Измените версию Hilt в build.gradle.kts (обычно в корневом файле проекта):

// build.gradle.kts (project-level)
plugins {
    id("com.google.dagger.hilt.android") version "2.50" apply false
}

// build.gradle.kts (app)
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("kotlin-kapt")
    id("dagger.hilt.android.plugin")
}

dependencies {
    implementation("com.google.dagger:hilt-android:2.50")
    kapt("com.google.dagger:hilt-compiler:2.50")
    implementation("androidx.hilt:hilt-navigation-compose:1.1.0")
}

Способ 2: Использовать Hilt с KSP вместо kapt (рекомендуется)

KSP (Kotlin Symbol Processing) работает быстрее kapt и лучше поддерживает новые версии Kotlin. Для этого:

  • Добавьте плагин KSP в корневой build.gradle.kts:
// build.gradle.kts (project-level)
plugins {
    id("com.google.devtools.ksp") version "1.9.20-1.0.14" apply false
}
  • Измените build.gradle.kts (app):
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.devtools.ksp") // вместо kotlin-kapt
    id("dagger.hilt.android.plugin")
}

dependencies {
    implementation("com.google.dagger:hilt-android:2.50")
    ksp("com.google.dagger:hilt-compiler:2.50") // ksp вместо kapt
    implementation("androidx.hilt:hilt-navigation-compose:1.1.0")
}

Проверка совместимости

Актуальную таблицу совместимости можно найти в официальной документации Hilt. На момент написания ответа:

  • Hilt 2.48 поддерживает Kotlin 1.8.0 - 1.9.0
  • Hilt 2.50 поддерживает Kotlin 1.9.0 - 1.9.22
  • Для Kotlin 2.0+ нужна Hilt 2.51+

Дополнительные советы

  • Всегда синхронизируйте версии Hilt в implementation и kapt/ksp.
  • Проверьте, что в gradle-wrapper.properties используется версия Gradle 8.2+ для Hilt 2.50.
  • После изменений выполните: Build -> Clean Project и Build -> Rebuild Project.
<<>>

Альтернативное решение: понижение версии Kotlin

Если по какой-то причине вы не можете обновить Hilt (например, из-за других зависимостей), можно понизить Kotlin до версии, совместимой с Hilt 2.48.

В корневом build.gradle.kts укажите:

// build.gradle.kts (project-level)
plugins {
    id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}

И в composeOptions используйте совместимую версию Kotlin Compiler Extension:

composeOptions {
    kotlinCompilerExtensionVersion = "1.5.4" // для Kotlin 1.9.0
}

Важно: Этот подход временный. Рекомендуется мигрировать на KSP и актуальные версии библиотек, так как kapt объявлен устаревшим и в будущих версиях Kotlin может быть удалён.

Также проверьте, что в gradle.properties нет устаревших флагов kapt, которые могут мешать:

kapt.use.worker.api=true
kapt.incremental.apt=true

После изменений синхронизируйте проект и пересоберите.