错误:任务':app:kaptDebugKotlin'的执行失败

leg*_*ggo 14 android kotlin dagger-2

我是新手使用Kotlin并试图用Dagger2设置它,我已经看到了一些例子,但它们似乎都不适合我.

我一直这样

错误:任务':app:kaptDebugKotlin'的执行失败.

内部编译器错误.有关详细信息,请参阅日志

我有我的build.gradle(模块: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()
}
Run Code Online (Sandbox Code Playgroud)

小智 27

就我而言,我替换了这个

implementation 'com.google.dagger:dagger:2.27'
kapt 'com.google.dagger:dagger-compiler:2.27'
Run Code Online (Sandbox Code Playgroud)

经过

implementation 'com.google.dagger:dagger:2.27'
annotationProcessor "com.google.dagger:dagger-compiler:2.27"
Run Code Online (Sandbox Code Playgroud)

并解决了问题


小智 21

使用./gradlew clean build命令运行应用程序以查看代码的确切错误.只需将其粘贴到Android Studio中的终端即可.

  • 对于 Windows 用户,请使用反斜杠。类似于 .\gradlew clean build (15认同)
  • 如果这是您第一次在 Linux 中调用 *gradlew* ,请先使用 `chmod +x ./gradlew` 。 (4认同)
  • 看来对于每个新项目,我都会遇到这些巨大的构建错误,而且每次都是出于不同的(有时是愚蠢的)原因。这种使用命令行参数的技术使我能够在我的 Dao/数据库(使用 Room)的注释中使用 Float 看到我的错误。./gradlew clean build --debug --stacktrace (2认同)

Wil*_*ute 20

如果您正在使用 Room 数据库并收到 KAPT 错误,请检查您的

  1. 数据库声明
  2. 数据访问对象声明
  3. 数据类字段

这是由于 Room 的注释使用不当引起的问题。有关更多信息,请使用您的构建日志

在展开错误日志之前,您可以在此图片中看到此处,我可以看到注释丢失错误。

  • 如果 Dao 的 SQL 语句出现错误,也会得到错误 (2认同)

Gia*_*men 14

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

此外,您可以检查此答案以帮助您找到错误enable more log on error


Jat*_*eva 10

我遇到这个问题有一段时间了。我的错误是使用带有 @Inject 字段的私有访问说明符。

如果您使用 Dagger,则检查 @Inject 私有字段或了解确切原因,将其添加为命令行选项:

--stacktrace --info --scan
Run Code Online (Sandbox Code Playgroud)

在 Mac 上,转到Android Studio > 首选项 > 构建、执行、部署 > 编译器

在 Windows 上,转到文件 > 设置 > 构建、执行、部署 > 编译器


San*_*vel 6

就我而言,我忘记将房间数据库实体添加到数据库中

@Database(version = 1,
    entities = [DummyEntity::class]
 )
Run Code Online (Sandbox Code Playgroud)


gul*_*tel 6

如果您使用 Hilt 和字段注入,则从字段注入对象中删除私有,这对我有用

@Inject
private lateinit var helper: Helper
Run Code Online (Sandbox Code Playgroud)

@Inject
lateinit var helper: Helper
Run Code Online (Sandbox Code Playgroud)


小智 6

只需将保留的关键字替换为注释处理器,一切正常。


小智 5

问题可以与 Room 和 Kotlin 1.4.10 连接。

尝试改变android.arch.persistence,以androidx.room对房间的依赖关系:

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

代替

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


小智 5

我在设置 dagger2 时遇到了类似的问题。当我改变这一行时,终于解决了:

kapt "com.google.dagger:dagger-compiler:${daggerVer}"
Run Code Online (Sandbox Code Playgroud)

对此

annotationProcessor "com.google.dagger:dagger-compiler:${daggerVer}"
Run Code Online (Sandbox Code Playgroud)