Ошибка KaptExecution при сборке проекта Android/Kotlin: как исправить?
Причина ошибки и основное решение
Ошибка KaptExecution с InvocationTargetException почти всегда связана с конфликтами версий процессоров аннотаций (kapt) или несовместимостью библиотек. В вашем случае типичная проблема — использование устаревшей или несовместимой версии Dagger с Room, либо отсутствие явного указания версии Kotlin и KSP.
Вот пошаговый план исправления (работает в 90% случаев):
Шаг 1. Обновите Kotlin и плагины до актуальных версий
В корневом build.gradle (project-level) убедитесь, что версия Kotlin соответствует AGP (Android Gradle Plugin). Для compileSdk 34 рекомендую:
plugins {
id("com.android.application") version "8.2.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.22" apply false
}
Шаг 2. Явно укажите версию Kotlin для kapt
Добавьте в build.gradle (app-level) блок kapt с конфигурацией:
kapt {
correctErrorTypes = true
useBuildCache = true
}
Шаг 3. Проверьте совместимость Dagger и Room
Dagger 2.50 требует Kotlin 1.9+ и AGP 8.2+. Room 2.6.1 совместим с Dagger 2.50, но иногда возникает конфликт из-за разных версий javax.inject. Добавьте явную зависимость:
dependencies {
// ... ваши зависимости ...
implementation("javax.inject:javax.inject:1")
// Убедитесь, что kapt-зависимости имеют одинаковую версию Kotlin
kapt("com.google.dagger:dagger-compiler:2.50")
kapt("androidx.room:room-compiler:2.6.1")
}
Шаг 4. Полная очистка и пересборка
Выполните команды в терминале:
./gradlew clean
./gradlew build --stacktrace
Шаг 5. Альтернатива: перейдите на KSP (Kotlin Symbol Processing)
KSP — более быстрая и стабильная замена kapt. Для Room это особенно актуально. Замените плагин и зависимости:
// Вместо kotlin-kapt используйте:
plugins {
id("com.google.devtools.ksp") version "1.9.22-1.0.17"
}
dependencies {
// Вместо kapt("androidx.room:room-compiler:2.6.1")
ksp("androidx.room:room-compiler:2.6.1")
// Dagger пока оставьте на kapt, но можно и его перевести на KSP через Anvil
}
Почему это работает?
Ошибка KaptExecution возникает, когда процессор аннотаций (например, Dagger или Room) не может загрузиться из-за несовместимости версий Kotlin или отсутствия необходимых классов в classpath. Явное указание javax.inject и использование KSP устраняет эти конфликты.
После этих шагов ошибка должна исчезнуть. Если нет — проверьте, нет ли в вашем коде аннотаций, которые не поддерживаются (например, @Inject в неправильном месте).
Дополнительный совет: проверьте конфигурацию Gradle JVM
Иногда ошибка KaptExecution возникает из-за того, что Gradle использует неправильную версию JDK. Убедитесь, что в gradle.properties указана версия JDK 17 или 21 (для AGP 8.x):
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.jetifier.ignorelist=javax.annotation
Также проверьте в настройках Android Studio (File → Settings → Build, Execution, Deployment → Build Tools → Gradle), что используется Gradle JDK версии 17 (не 11 и не 20).
Если проблема остаётся — попробуйте временно отключить Dagger и собрать проект только с Room. Если сборка пройдёт успешно, значит проблема именно в Dagger. В таком случае обновите Dagger до 2.51 (вышла в апреле 2024) или переведите его на KSP через библиотеку Anvil от Square.
Ответов пока нет.
Войдите чтобы оставить ответ