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

Posted

技术标签:

【中文标题】错误:任务\':app:kaptDebugKotlin\'的执行失败【英文标题】:Error:Execution failed for task ':app:kaptDebugKotlin'错误:任务':app:kaptDebugKotlin'的执行失败 【发布时间】:2018-04-01 16:21:54 【问题描述】:

我是使用 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()

【问题讨论】:

切换到gradle控制台,查看日志输出。 IDE 只向您显示编译时出错,但您必须查看输出才能看到错误。 将所有相关类转换为kotlin 【参考方案1】:

使用./gradlew clean build 命令运行您的应用程序,看看您的代码到底出了什么问题。只需将其粘贴到 Android Studio 的终端中即可。

【讨论】:

我试过了。它开始下载已安装并激活的相同 gradle 版本的 zip。 对于 windows 用户,使用反斜杠。类似 .\gradlew clean build 如果您是第一次在 linux 中调用 gradlew,请使用 chmod +x ./gradlew 太棒了。这确实有助于了解需要修复哪些错误。谢谢! 似乎对于每个新项目,我都会遇到这些巨大的构建错误,而且每次都是出于不同(有时是愚蠢的)原因。这种技术,使用命令行参数,让我可以看到我在 Dao / Database 的注释中使用 Float 的错误(使用 Room)。 ./gradlew clean build --debug --stacktrace【参考方案2】:

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

    数据库声明 数据访问对象声明 数据类字段

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

【讨论】:

如果道的SQL语句出现错误,也会报错【参考方案3】:

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

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

【讨论】:

【参考方案4】:

我曾经遇到过这个问题。我的错误是使用带有 @Inject 字段的私有访问说明符。

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

--stacktrace --info --scan

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

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

【讨论】:

对我来说问题不是匕首,而是命令行选项的赞成票【参考方案5】:

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

@Database(version = 1,
    entities = [DummyEntity::class]
 )

【讨论】:

【参考方案6】:

问题可以与 Room 和 Kotlin 1.4.10 关联。

尝试将 android.arch.persistence 更改为 androidx.room 以获取 Room 依赖项:

使用

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

而不是

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

【讨论】:

我之前在persistence room工作过,当我添加hilt依赖时导致未知错误,我花了2天时间才找到你的评论,谢谢, 成功了!经过大量搜索,您的解决方案解决了我的问题,谢谢!!!!【参考方案7】:

如果您使用 Hilt 和 Field Injection 然后从 Field Injected Object 中删除 Private 这对我有用

    @Inject
    private lateinit var helper: Helper

    @Inject
    lateinit var helper: Helper

【讨论】:

【参考方案8】:

为我工作:

我也遇到了同样的问题,并通过将其添加到 gradle.properties 解决了它

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

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

【讨论】:

那个解决了我的问题。非常感谢! 它解决了我的问题。赞! :)【参考方案9】:

在我的情况下,我替换了这个

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"

解决了问题

【讨论】:

【参考方案10】:

我的错误是在 then 函数返回 LiveData 时使用 suspend。Room 的协程集成带来了返回挂起值的能力,但是当值本身是 asnyc 时,没有理由使用它。 我改变了:

@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>>

问题解决了。

【讨论】:

【参考方案11】:

就我而言,我忘记使用 Room 库将新创建的实体添加到 @Database 声明的“实体”部分。

--stacktrace --info --scan 命令行选项非常有助于找到确切的原因。

【讨论】:

【参考方案12】:

我刚刚遇到了类似的错误。如果您使用的是旧的 Room 依赖项,请更新并重建您的项目。

【讨论】:

在找到您的评论之前,我将对此发表评论。事实上,我将房间升级版本从 2.3.0 更新到 2.4.1 并且它起作用了: implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version"【参考方案13】:

我在设置 dagger2 时遇到了类似的问题。当我更改此行时终于解决了:

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

到这里

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

【讨论】:

【参考方案14】:

问题可能与 Room 的使用有关。我使用了 Łukasz Kobyliński 在他的评论中建议的命令

./gradlew clean build

在我的情况下,我必须为 Date 类型添加一个转换器。

你可以在官方文档中找到转换器:https://developer.android.com/training/data-storage/room/referencing-data#type-converters

【讨论】:

【参考方案15】:
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'

【讨论】:

【参考方案16】:

如果所有这些任务都不起作用,请运行您的应用程序。您将清楚地看到错误日志。

【讨论】:

【参考方案17】:

我删除了这些文件夹。

    .gradle .idea

关闭android studio,删除文件夹并重新打开项目

【讨论】:

谢谢,这对我很有帮助。【参考方案18】:

第一次改变

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

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

现在你必须调整你的项目 Gradle 文件并更新正在使用的 Kotlin 版本,应该如下所示:

ext kotlin_version = '1.3.10' gradleVersion = '3.1.0'

【讨论】:

【参考方案19】:

我遇到了同样的错误,只需按照以下步骤解决它

1-打开文件菜单->然后选择项目结构或按Ctrl+Alt+Shift+s

2- 从左侧打开模块

3- 在 Source Compatibility 按下拉菜单并选择 Java 8 或 1.8

4- 在 Target Compatibility 中,按下拉菜单并选择 Java 8 或 1.8

5- 按确定然后同步并重建您的项目或运行它

【讨论】:

【参考方案20】:

就我而言build.gradle 替换id 'kotlin-android-extensions'id 'kotlin-parcelize' 正如build上所说的那样

添加

buildFeatures 
        viewBinding true
    

还有一些语法错误,比如在 Dao 忘记了:

@Query("SELECT * FROM table_satis WHERE satisId ==:satisID")

【讨论】:

【参考方案21】:

就我而言,我使用的是 ViewBinding 而不是 DataBinding。当我遇到同样的问题时,我通过将插件 apply plugin: 'kotlin-parcelize' 添加到 gradle 来解决它。

【讨论】:

【参考方案22】:

尝试添加到 gradle.properties:

kapt.use.worker.api=false
kapt.incremental.apt=false

【讨论】:

请将此表述为一个解释性的条件答案,以避免提出调试实验而不是回答的印象(应该使用评论而不是答案,比较meta.stackexchange.com/questions/214173/…)。例如像“如果你的问题是......那么解决方案是......因为......。”【参考方案23】:

我不小心写了@EntryPoint 而不是@AndroidEntryPoint。更改该错误已修复。

【讨论】:

【参考方案24】:

我遇到了类似的问题。当我更改此行时它已解决:

ext.kotlin_version = "1.5.10"

ext.kotlin_version = "1.4.10"

【讨论】:

虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。

以上是关于错误:任务':app:kaptDebugKotlin'的执行失败的主要内容,如果未能解决你的问题,请参考以下文章

错误:任务 ':app:packageAllDebugClassesForMultiDex' 执行失败

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

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

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

Gradle构建错误,错误:任务':app:transformResourcesWithMergeJavaResForDebug'的执行失败

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