错误:任务':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'的执行失败