错误:执行任务“: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个回答

3

3
I have solved this problem. In my case, there were irrelevant dagger 
dependencies 
that the IDE did not notify me about:

   implementation 'com.google.dagger:dagger:2.35.1'
   kapt 'com.google.dagger:dagger-compiler:2.28'

After updating them, the problem disappeared and it became possible to use the 
latest version of Kotlin!

   implementation 'com.google.dagger:dagger:2.37'
   kapt 'com.google.dagger:dagger-compiler:2.37'

3

适用于我:

我也遇到了同样的问题,并通过将以下内容添加到gradle.properties解决了它。

org.gradle.java.home=<go to project structure, copy JDK location and past here>

这将确保gradlew使用与Android Studio相同的JDK。

那个解决了我的问题。非常感谢! - Osman Yalın
它解决了我的问题。赞!! :) - user2323471

2
在我的情况下,我忘记使用Room库将新创建的实体添加到@Database声明的“entities”部分中。
使用--stacktrace --info --scan命令行选项可以很好地帮助找到确切的原因。

2

我刚刚遇到了类似的bug。如果你正在使用旧版本的Room依赖项,请更新并重新构建你的项目。


我本来想评论一下,直到我看到了你的评论。确实,我将房间升级版本从2.3.0更新到2.4.1,它起作用了:implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" - awaqar

2

我删除了以下文件夹:

  1. .gradle
  2. .idea

关闭 Android Studio,删除这些文件夹并重新打开项目。

enter image description here


1
谢谢,这真的帮了我很多。 - King Of The Jungle

2
//implementation "androidx.room:room-runtime:2.4.2"
kapt "androidx.room:room-compiler:2.2.1"
//kapt "android.arch.persistence.room:compiler:2.4.2"
implementation "androidx.room:room-ktx:2.2.1"
//annotationProcessor "androidx.room:room-compiler:2.4.2"

我没有使用之前的那些,当我使用这两个时问题得到了解决。我们会出现kaptDebug错误是因为与Room没有匹配。我的问题与实现有关。


2

我的错误在于当函数返回LiveData时使用suspend。Room的协程集成提供了返回挂起值的能力,但当该值本身是异步时,没有理由使用它。

@Delete
suspend fun Delete(premiumPackageDBEntity: PremiumPackageDBEntity)

@Query("SELECT * FROM available_premium_package ")
suspend fun GetAll(): LiveData<List<PremiumPackageDBEntity>>

致:

@Delete
suspend fun Delete(premiumPackageDBEntity: PremiumPackageDBEntity)

@Query("SELECT * FROM available_premium_package ")
fun GetAll(): LiveData<List<PremiumPackageDBEntity>>

且问题已得到解决。

1
如果所有的任务都没有起作用,只需运行您的应用程序。您将清楚地看到错误日志。

1
我通过将一个依赖项中的 kapt 替换为 annotationProcessor 来解决了这个问题。
// dagger2
implementation 'com.google.dagger:dagger-android-support:2.41'
annotationProcessor 'com.google.dagger:dagger-compiler:2.41' //this one
kapt "com.google.dagger:dagger-android-processor:2.41"

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