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

时间:2017-10-20 13:23:58

标签: 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()
}

16 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:3)

就我而言,我忘记了将会议室数据库实体添加到数据库中

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

答案 2 :(得分:3)

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

如果您使用的是 Dagger,请检查 @Inject 私有字段或了解确切原因添加 --stacktrace --info --scan 作为命令行选项。

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

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

答案 3 :(得分:2)

为我工作:

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

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

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

答案 4 :(得分:2)

Issue 可以连接 Room 和 Kotlin 1.4.10。

尝试将 Room 依赖项的 android.arch.persistence 更改为 androidx.room

使用

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

代替

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

答案 5 :(得分:1)

如果您正在使用Room数据库并出现KAPT错误,只需检查您的

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

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

You can see here in this picture before expanding the error log, I can see the annotation missing error.

答案 6 :(得分:1)

就我而言build.gradle 替换
id 'kotlin-android-extensions'id 'kotlin-parcelize' 正如它在 build

上所说的

添加

buildFeatures {
        viewBinding true
    }

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

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

答案 7 :(得分:1)

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

    @Inject
    private lateinit var helper: Helper

    @Inject
    lateinit var helper: Helper

答案 8 :(得分:0)

第一次更改

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' }

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

我遇到了相同的错误,只需按照以下步骤操作即可解决

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

2-从左侧打开模块

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

4-在“目标兼容性”中,按下拉菜单并选择Java 8或1.8

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

答案 11 :(得分:0)

我的错误是在函数返回suspend时使用LiveData。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>>

问题解决了。

答案 12 :(得分:0)

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

<块引用>

./gradlew clean build

就我而言,我必须为日期类型添加一个转换器。

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

答案 13 :(得分:0)

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

from Crypto.Cipher import AES from Crypto.Util import Counter from Crypto import Random import base64, os, binascii def encrypt(key, plaintext): iv = Random.new().read(AES.block_size) iv_int = int(binascii.hexlify(iv), 16) ctr = Counter.new(AES.block_size * 8, initial_value=iv_int) aes = AES.new(key, AES.MODE_CTR, counter=ctr) ciphertext = aes.encrypt(plaintext) return ciphertext key = base64.urlsafe_b64encode(os.urandom(22)) #Creates a 32 bytes AES-256 key cipher = encrypt(key, b"Hello world") print("Encrypted text:",cipher.decode('latin-1')) 命令行选项非常有助于找到确切原因。

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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