Avatar ·

Ошибка KaptExecution при сборке Android проекта с Kotlin: что делать?

Всем привет! Я новичок в Android разработке на Kotlin, и у меня возникла проблема при сборке проекта. Использую Android Studio, проект на Kotlin с Room и Dagger Hilt. При запуске сборки (Build -> Make Project) я получаю следующую ошибку: ``` A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution ``` Полный лог ошибки длинный, но в конце там что-то про "java.lang.reflect.InvocationTargetException" и "no constructor for class ..." или "cannot find symbol". Вот пример моего `build.gradle.kts` (app-level): ```kotlin plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("kotlin-kapt") } android { compileSdk = 34 defaultConfig { applicationId = "com.example.myapp" minSdk = 24 targetSdk = 34 } } dependencies { implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.dagger:hilt-android:2.44") kapt("com.google.dagger:hilt-android-compiler:2.44") implementation("androidx.room:room-runtime:2.6.1") kapt("androidx.room:room-compiler:2.6.1") } ``` И пример моего DAO: ```kotlin @Dao interface UserDao { @Insert fun insert(user: User) @Query("SELECT * FROM user") fun getAllUsers(): List } ``` Пробовал чистить проект (Build -> Clean Project), пересобирать, инвалидировать кэш (File -> Invalidate Caches), но ошибка остаётся. Что я делаю не так? Помогите, пожалуйста! <<>>

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

Ошибка org.jetbrains.kotlin.gradle.internal.KaptExecution возникает, когда процесс обработки аннотаций (kapt) не может выполниться из-за проблем в коде, зависимостях или настройках Gradle. В вашем случае, судя по фрагменту лога и использованию Dagger Hilt и Room, проблема, скорее всего, в несовместимости версий или неправильном использовании аннотаций.

Наиболее частая причина: несовместимость версий Hilt и Kotlin

Hilt 2.44 требует Kotlin 1.8.0 или выше, а также совместимую версию плагина kotlin-kapt. Убедитесь, что в вашем корневом build.gradle.kts (project-level) указана актуальная версия Kotlin:

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

Решение: проверка и исправление всех частей

Выполните последовательно:

  • Шаг 1: Обновите Kotlin до версии 1.9.22 (или новее, но совместимой с вашей версией Android Gradle Plugin).
  • Шаг 2: Обновите Hilt до последней стабильной версии (на момент написания — 2.51.1). В build.gradle.kts замените:
// app-level build.gradle.kts
plugins {
    id("kotlin-kapt")
}
dependencies {
    implementation("com.google.dagger:hilt-android:2.51.1")
    kapt("com.google.dagger:hilt-android-compiler:2.51.1")
    // Room тоже лучше обновить
    implementation("androidx.room:room-runtime:2.6.1")
    kapt("androidx.room:room-compiler:2.6.1")
}
  • Шаг 3: Проверьте, что все классы, использующие аннотации Hilt (например, @HiltAndroidApp, @AndroidEntryPoint, @Inject), корректно объявлены. Например, Application класс:
@HiltAndroidApp
class MyApplication : Application()
  • Шаг 4: Убедитесь, что ваша Entity-модель (например, User) имеет конструктор без параметров или использует аннотацию @Entity корректно. Пример:
@Entity(tableName = "user")
data class User(
    @PrimaryKey val id: Int,
    val name: String
)
  • Шаг 5: Выполните Build -> Clean Project и затем Build -> Rebuild Project.

Если ошибка осталась — смотрите полный лог

Откройте вкладку Build в Android Studio и найдите строку * What went wrong:. Там будет указан точный файл и строка, где возникла проблема. Часто это бывает из-за отсутствия импорта, неправильного типа или конфликта библиотек. Также попробуйте добавить в app/build.gradle.kts:

kapt {
    correctErrorTypes = true
}

Это иногда помогает при неочевидных ошибках в сгенерированном коде.

<<>>

Альтернативный подход: откат на более стабильные версии

Если обновление не помогло, попробуйте откатиться на проверенные стабильные версии. Например, для проектов на Kotlin 1.7.20 используйте Hilt 2.44 и Room 2.5.0. Иногда свежие версии библиотек содержат баги, несовместимые с вашей конфигурацией.

Также проверьте, не конфликтуют ли зависимости. В app/build.gradle.kts добавьте:

configurations.all {
    resolutionStrategy {
        force("org.jetbrains.kotlin:kotlin-stdlib:1.9.22")
    }
}

Это принудительно установит единую версию Kotlin stdlib.

И последнее: если вы используете Java 8 или Java 11 в настройках compileOptions, убедитесь, что они совместимы с вашими библиотеками. В android блоке добавьте:

compileOptions {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
    jvmTarget = "17"
}

Это особенно важно для Hilt 2.50+ и Room 2.6+.