错误:执行任务“:app:kaptDebugKotlin”失败。

81

我刚开始使用 Kotlin 并尝试将其与 Dagger2 配置,看了一些例子但似乎都不适用于我。

我一直得到以下错误:

Error:Execution failed for task ':app:kaptDebugKotlin'.

Internal compiler error. See log for more details

我在 build.gradle (Module: app) 中进行配置。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "com.exampleapp"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    kapt {
        generateStubs = true
    }
    dexOptions {
        javaMaxHeapSize "2048M"
    }
}

ext {
    supportLibVer = '25.0.0'
    daggerVer = '2.8'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // Support lib
    compile "com.android.support:appcompat-v7:${supportLibVer}"

    kapt "com.google.dagger:dagger-compiler:${daggerVer}"
    compile "com.google.dagger:dagger:${daggerVer}"
    provided "javax.annotation:jsr250-api:${javaxVer}"

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"


}
repositories {
    mavenCentral()
}

切换到Gradle控制台并查看日志输出。 IDE只会向您显示编译错误,但您必须查看输出以查看错误。 - David Medenjak
将所有相关的类转换为 Kotlin。 - Shahab Saalami
32个回答

88

运行./gradlew clean build命令来查看你的代码到底有什么问题。只需将其粘贴到Android Studio中的终端中即可。


22
对于Windows用户,请使用反斜杠。类似这样:.\gradlew clean build。 - Mehroze Yaqoob
3
如果你是在Linux系统中第一次运行gradlew,请先使用chmod +x ./gradlew命令进行授权。这会使其可执行并且方便使用,但不会改变其原本的意思。 - Siamak
1
太棒了。这真的帮助我看到哪些错误需要修复。谢谢! - Antroid
2
似乎每次开始新项目时,我都会遇到大量的构建错误,而且每次出错的原因都不同(有时很愚蠢)。使用命令行参数的这种技术,让我能够看到我的 Dao / 数据库注释中使用 Float 时的错误(使用 Room)。./gradlew clean build --debug --stacktrace - mobibob
1
我只得到了一个"BUILD FAILED in 40m 30s"的错误信息。 - StackOverflower
显示剩余3条评论

26
如果你使用的是 Room 数据库并出现了 KAPT 错误,请检查以下三个方面:
1. 数据库声明 2. Data Access Object 声明 3. 数据类字段
这是由于未正确使用 Room 注解引起的问题。如需更多信息,请查看构建日志。
在这张图片中,你可以看到在扩展错误日志之前,我看到了注解丢失的错误提示:You can see here in this picture before expanding the error log, I can see the annotation missing error.

4
如果Dao中的SQL语句出现错误,还需获取该错误。 - BertKing

22
在我的情况下,我替换了这个。
implementation 'com.google.dagger:dagger:2.27'
kapt 'com.google.dagger:dagger-compiler:2.27'
implementation 'com.google.dagger:dagger:2.27'
annotationProcessor "com.google.dagger:dagger-compiler:2.27"

并解决了问题


这对我也起作用了。有人能解释一下为什么吗?我以为kapt插件提供了Dagger所需的所有注释。 - David Read

18

我遇到了这个问题一段时间。帮助我的很多是阅读构建选项卡,因为它提供了库失败的原因。
以下是该选项卡 Build tab 我有很多问题,
1. 我没有将我创建的新实体添加到@Database注释中
2. 我没有在我的接口中添加@Dao注释
3. 我没有更新一些在@Query注释中编写的变量名称
所以我不得不逐个解决问题,最后它可以运行。
此外,我正在清理我的项目并重建以确保代码不会被卡住。还要关闭和打开Android Studio。

此外,您可以查看启用错误日志记录的答案来帮助您找到错误。


10

我遇到了这个问题一段时间。我的错误是在@Inject字段中使用私有访问修饰符。

如果您正在使用Dagger,请检查@Inject私有字段或添加此命令行选项以了解确切的原因:

--stacktrace --info --scan

在 Mac 上,前往 Android Studio > Preferences > Build, Execution, Deployment > Compiler

在 Windows 上,前往 File > Settings > Build, Execution, Deployment > Compiler


对我来说问题不在于Dagger,但是因为命令行选项而点赞。 - Reza

6

只需将保留的关键字替换为annotationProcessor,一切都可以正常运作。


这对我有效。!! - Pranay Das

6

问题可能与Room和Kotlin 1.4.10相关。

尝试将Room依赖项中的android.arch.persistence更改为androidx.room

使用

kapt "androidx.room:room-compiler:$roomVersion"

而不是

kapt "android.arch.persistence.room:compiler:$roomVersion"


我之前使用过Persistence Room,但当我添加了Hilt依赖后,出现了未知错误。直到我看到了你的评论,才花了两天时间解决问题。非常感谢! - NimaAzhd
经过很多搜索,您的解决方案修复了我的问题,谢谢!!! 运行正常! - Sina Mirshafiei

6
在我的情况下,我忘记将 room db 实体添加到数据库中。
@Database(version = 1,
    entities = [DummyEntity::class]
 )

6

如果您正在使用Hilt和字段注入,则请从注入的对象中删除私有修饰符,这对我有效。

@Inject
private lateinit var helper: Helper

@Inject
lateinit var helper: Helper

哇,这就是了,我简直不敢相信,谢谢你。 - undefined

4

在设置dagger2时,我遇到了类似的问题。当我更改了这行代码后,问题最终得到解决:

kapt "com.google.dagger:dagger-compiler:${daggerVer}"

转化为这个

annotationProcessor "com.google.dagger:dagger-compiler:${daggerVer}"

两年多过去了,升级到最新版本,在一个旧项目中开始使用Compose,这真是救了我的一天。只是一个词的替换而已 :| - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接