【问题标题】:A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException (no error message)执行 org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException 时发生故障(无错误消息)
【发布时间】:2020-12-18 07:50:47
【问题描述】:

Android studio 报错:

Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

我想在我的项目中添加 Kotlin Coroutines 并将其与 Room 数据库一起使用。但是在添加了所有库后,我得到了这个错误。这是来自编译器的所有信息。

我已经确定了,这是因为注释@Database。如果我删除了此注释,则不会出现错误,但 Room 也无法正常工作。

我的 gradle 文件:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
//apply plugin: 'androidx.navigation.safeargs'

kotlin {
    experimental {
        coroutines 'enable'
    }
}

android {
    compileSdkVersion 29
    defaultConfig {
        applicationId "com.bestcred.coursetthree"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        //vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    // Enables data binding.
    buildFeatures {
        dataBinding true
    }
}

dependencies {


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

    // Support libraries
    implementation "androidx.appcompat:appcompat:1.2.0"
    implementation 'com.google.android.material:material:1.2.0'
    implementation "androidx.fragment:fragment:1.2.5"
    implementation "androidx.constraintlayout:constraintlayout:2.0.0"

    // Android KTX
    implementation 'androidx.core:core-ktx:1.3.1'

    // Room and Lifecycle dependencies
    implementation "androidx.room:room-runtime:$room_version"
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    kapt "android.arch.persistence.room:compiler:$room_version"

    // Kotlin Extensions and Coroutines support for Room
    implementation "androidx.room:room-ktx:$room_version"

    // Coroutines
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutine_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutine_version"

}

kotlin_version = "1.4.0"
room_version = "2.2.5"
coroutine_version = '1.3.9'

我更新了 Room 版本并添加了 Kotlin 协程。什么问题?

【问题讨论】:

    标签: android kotlin android-room kotlin-coroutines


    【解决方案1】:

    你需要改变:

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

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

    【讨论】:

    • 为我工作。其他什么都没做。
    【解决方案2】:

    我必须将 Room 更新到最新的 2.2.5,它已经解决了这个问题。

    【讨论】:

      【解决方案3】:

      当您在 Room 数据库Doa实体类 上犯了错误时会发生此异常 例如我在实体类中犯了错误

      1. 我已将实体类的自动生成字段设为 val 而不是 var
      2. 我已在两个名称不同的函数上添加了删除注释,但它们正在删除相同的数据

      所以如果你导入了正确的依赖项,我建议仔细检查实体、dao 或数据库类。

      @Entity(tableName = "user_table")
      data class User(
          val firstName: String,
          val lastName: String,
          val age: Int
      ) {
          @PrimaryKey(autoGenerate = true)
          var id: Int = 0 //**do not made it val**
      }
      

      【讨论】:

      • 此答案对于此类错误也有效。我的外键名称有错误,并修复它解决了问题。谢谢
      【解决方案4】:

      我也遇到过同样的问题。问题是因为我在 Room DAO 中使用了协程挂起函数,并且没有实现必要的实现。以下对我有用,尝试将现有的 Room 依赖项替换为:

      def room_version = "2.2.5" //Use latest version
      
      "androidx.room:room-runtime:$room_version"
      "androidx.room:room-compiler:$room_version"
      "androidx.room:room-ktx:$room_version"
      

      如果上述方法不起作用,请转到分析->检查代码并检查代码破坏警告或错误(特别是在房间中)

      【讨论】:

        【解决方案5】:

        Android Studio 的 UI 只是隐藏了错误...

        当错误发生时,它会在列表视图中突出显示该项目,并在终端视图中显示一条无用的消息。

        要查找真正的错误,请在列表视图中选择根项,以便 Android Studio 在终端视图中显示整个构建输出,然后滚动查找错误。

        【讨论】:

        • 啊……我之前遇到过这个问题,但不记得解决方案了。为了解决之前的问题,我必须设置命令行构建并搜索输出。这更容易,更直接!!!为您奖励积分并获得特殊徽章。顺便说一句 - 我的问题与升级编译器和框架(可能是空间)后我的 Dao 对象中的 @Transaction 函数有关。
        • 在我的情况下,我看不到左侧的列表,就像您的屏幕截图@Eric 中那样
        • 在我的情况下,选择根项目时未显示错误...从终端执行./gradlew clean build 显示错误
        • 并非总是如此。我选择构建失败,但它也不包含任何内容
        【解决方案6】:

        确保在数据库注释中包含所有实体

        【讨论】:

          【解决方案7】:

          在我的例子中,我将 insertAll() 和 delete() 函数的参数类型作为数据库的实体,错误已解决

          @Dao
          interface NotesDao {
          
              @Insert
              fun insertAll(INotesEntity: NotesEntity) // argument type should be entity of your database
          
              @Delete
              fun delete(DNotesEntity: NotesEntity)    // argument type should be entity of your database
          
          }
          

          【讨论】:

            【解决方案8】:

            这个问题发生在包重命名 我已将所有文件从一个包拖放到另一个包。

            Objectbox它创建了光标文件和实体文件(自动生成的文件)

            不得不删除它们并重新构建。

            它连续吃了 1 小时 -_-

            【讨论】:

            • 你在哪里删除了什么文件?
            【解决方案9】:

            我在 Apple Silicon Macbook M1 上开发。

            使用 room_version 2.2.4, 在 2.2.5 中失败

            def room_version = "2.2.4"
            
            implementation "androidx.room:room-runtime:$room_version"
            kapt "androidx.room:room-compiler:$room_version"
            implementation "androidx.room:room-ktx:$room_version"
            testImplementation "androidx.room:room-testing:$room_version"
            

            【讨论】:

            • 我也在使用 M1,这解决了我的问题
            • 2.3.0 在 M1 上也失败了。 2.2.4 工作正常。它修复在2.4.0-alpha03
            【解决方案10】:

            我可能会迟到,但只有以下解决方案对我有用。

            在 Android Studio 中打开 gradle.properties 文件。

            添加以下行:

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

            清理并重新构建应用程序。

            完成

            【讨论】:

              【解决方案11】:

              我将 Room 版本从 2.2.5 更新到 2.3.0 或 build.gradle 脚本文件中的当前版本。构建成功。

              【讨论】:

                【解决方案12】:

                今天我遇到了这个错误。就我而言,我的笔记本电脑中同时安装了 java 11 和 java 16,而 java 16 是默认设置。但是我项目中的 gradle 使用 java 11 来构建它。所以当我调用

                $ gradle build
                

                在我的终端上,它将使用 java 16,因此构建失败。我知道,正确的解决方案是让我的代码与 java 16 兼容,但现在,我明确告诉 gradle 使用以下命令使用 java 11:

                $ gradle build -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 # warning: use te path to your java 11 
                

                因为它是一个大命令,所以我将它保存在一个脚本文件中,因此只需运行脚本就可以解决我的问题。

                【讨论】:

                • 在 Android Studio 中转到 Settings (Alt+Ctrl+S) ➡ Build, Execution, Deployment ➡ Build Tools 并选择正确的 Gradle JDK 版本。
                • android studio 使用的是 java 11,没关系。但是你看,我们正在开发一个 android 库。该库应使用 github 包发布。上次我检查时,所有教程都使用终端。所以在我的用例中,我必须使用终端构建和发布。这就是我遇到麻烦的原因。
                【解决方案13】:

                我目前在使用 Room 版本 2.3.0 的 m1 Mac 上遇到此错误。

                我通过将其更改为 2.4.0-alpha04 来修复它。

                这已报告给 Google (issue tracker)。

                【讨论】:

                • 你拯救了我的一天。谢谢!
                【解决方案14】:

                尝试将其添加到您的app/build.gradle 文件中并再次运行该程序。它帮助我找到了问题的真正原因。

                kapt {
                    correctErrorTypes true 
                } 
                

                【讨论】:

                • 救命稻草。谢谢!
                • 太棒了,谢谢!
                【解决方案15】:

                唯一对我有用的东西-

                gradle.properties 中替换以下行 -

                org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
                

                通过

                org.gradle.jvmargs=--illegal-access=permit
                

                【讨论】:

                  【解决方案16】:

                  确保将 Gradle JDK 设置为正确的版本(尽管我已经使用 JDK 11 很长时间了,但它已设置为 JDK 8)。

                  打开首选项 -> 构建工具 -> Gradle -> 设置 Gradle JDK。

                  Image of Gradle JDK in Android Studio

                  【讨论】:

                    猜你喜欢
                    • 2020-09-19
                    • 1970-01-01
                    • 2021-05-17
                    • 2020-11-21
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-11-17
                    • 2022-09-20
                    相关资源
                    最近更新 更多