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'
答案 0 :(得分:23)
Android Studio的用户界面只是隐藏错误...
发生错误时,它会在列表视图中突出显示该项目,并在终端视图中显示无用的消息。
要找到真正的错误,请在列表视图中选择根项,以便Android Studio在终端视图中显示整个构建输出,然后滚动以查找错误。
答案 1 :(得分:3)
您需要更改:
kapt "android.arch.persistence.room:compiler:$room_version"
到
kapt "androidx.room:room-compiler:$room_version"
答案 2 :(得分:3)
如果您在房间数据库或 Doa 或实体类上犯了一些错误,就会发生此异常 例如我在实体类中犯了错误
因此,如果您导入了正确的依赖项,我建议您仔细检查实体,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**
}
答案 3 :(得分:3)
我在 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"
答案 4 :(得分:1)
确保在数据库注释中包含所有实体。
答案 5 :(得分:1)
此问题发生在包重命名 我已将所有文件从一个包拖放到另一个包中。
Objectbox 它创建了光标文件和实体文件(自动生成的文件)
不得不删除它们并重新构建。
连续吃了1个小时-_-
答案 6 :(得分:1)
我在 build.gradle 脚本文件中将 Room 版本从 2.2.5 更新到 2.3.0 或当前版本。构建成功。
答案 7 :(得分:1)
今天我遇到了这个错误。就我而言,我的笔记本电脑中同时安装了 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
由于它是一个大命令,我将它保存在一个脚本文件中,因此只需运行脚本即可解决问题。
答案 8 :(得分:0)
我不得不将Room更新为最新的2.2.5
,它已经解决了该问题。
答案 9 :(得分:0)
我也遇到过同样的问题。问题是因为我在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"
如果上述方法不起作用,请转到“分析”->“检查代码”,并检查是否存在代码中断警告或错误(特定于房间)
答案 10 :(得分:0)
在我的例子中,我给了 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
}
答案 11 :(得分:0)
我可能会迟到,但只有以下解决方案对我有用。
在 Android Studio 中打开 gradle.properties 文件。
添加以下几行:
kapt.use.worker.api=false
kapt.incremental.apt=false
清理并重新构建应用程序。
完成