【问题标题】: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

标签: android kotlin dagger-2


【解决方案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 错误,请检查您的

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

这是由于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】:

                      我删除了这些文件夹。

                      1. .gradle
                      2. .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您的回答添加解释并说明适用的限制和假设。
                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 2020-11-09
                                • 2023-04-03
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2018-02-17
                                相关资源
                                最近更新 更多