android - 为什么其中一些来自同一个库的导入会作为未解析的引用返回?

标签 android kotlin gradle-kotlin-dsl

因此,作为我论文的一部分,我目前正在尝试将房间数据库添加到一个开源项目中,我从 android 本身抓取了我能找到的最新示例,并针对 Kotlin DSL 对其进行了修改,我使用了相同的 DAO 和数据库结构,但两者都有导入错误。通常这不是要修复的问题,除非我在某些地方从同一个库中收到错误,这就是为什么我不得不首先问这个问题。主要的导入问题与 androidx.room 有关。下面是有问题的 kotlin 文件,之后是 build.gradle.kts。

补充一下,android studio 建议我使用 persistence.room.runtime,但根据我的尝试和我能找到的内容,这也不能解决我的问题。


import androidx.room.Database //works
import androidx.room.Room // unresolved reference
import androidx.room.RoomDatabase // unresolved reference

@Database(entities = [GameDatabase::class], version = 1, exportSchema = false)
abstract class Database : RoomDatabase() {

    abstract val DatabaseDAO: DatabaseDAO

    companion object {

        @Volatile
        private var INSTANCE: Database? = null

        fun getInstance(): Database {
            synchronized(this) {
                var instance = INSTANCE

                if (instance == null) {
                    instance = Room.databaseBuilder(
                            Database::class.java,
                            "game_database"
                    )
                            .fallbackToDestructiveMigration()
                            .build()
                    INSTANCE = instance
                }
                return instance
            }
        }
    }
}

这是模块 gradle 构建:

plugins {
    //id("kotlin")
    kotlin("kapt")
    //kotlin("android")

    //kotlin("android-extensions")
    //id("kotlin-android")
    //id("kotlin-android-extensions")
    //id("androidx.navigation.safeargs")
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_6
}

tasks {
    compileJava {
        options.encoding = "UTF-8"
    }
    compileTestJava {
        options.encoding = "UTF-8"
    }
}

sourceSets {
    main {
        java.srcDir("src/")
    }
}

// added
dependencies {

    val room_version = "2.2.6"
    val life_version = "2.2.0"
    // Room and Lifecycle dependencies
    implementation("androidx.room:room-runtime:$room_version")

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

    //implementation("androidx.room:room-ktx:$room_version")
    implementation("androidx.legacy:legacy-support-v4:1.0.0")
    implementation("androidx.lifecycle:lifecycle-extensions:$life_version")
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$life_version")
    implementation("androidx.lifecycle:lifecycle-livedata-ktx:$life_version")
    implementation("androidx.lifecycle:lifecycle-common-java8:$life_version")
    // adding Firebase dependencies
    //implementation("android.arch.persistence.room:runtime:1.1.1")
    //annotationProcessor("android.arch.persistence.room:compiler:2.2.6")
}

我对 Kotlin DSL 很陌生,所以这可能是一个明显的错误,但我在该地区也找不到类似的东西。

最佳答案

这是我通常放置实现的方式:

//Room
implementation "androidx.room:room-runtime:2.2.6"
kapt "androidx.room:room-compiler:2.2.6"
// optional - Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:2.2.6"

还有,你有没有安装kapt插件?如果不是:

plugins {
id 'kotlin-android'
id 'kotlin-kapt'//this one

然后,尝试清理并重建项目。

关于android - 为什么其中一些来自同一个库的导入会作为未解析的引用返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66572733/

相关文章:

kotlin - 在 Intellij IDE 中编译 Kotlin 时无法删除缓存目录

android - Kotlin 检查变量是否在两个数字之间

android - 你如何结合多种 gradle 口味或排除一种?

android - Gradle 属性中的引用属性

kotlin - 如何在 Kotlin 中定义自定义赋值运算符重载?

java - (Android) 加密数据不允许知晓源代码中使用的方法

Android Action_Call Intent

android - 当我按 ctrl+space 时 Eclipse 崩溃了

Android - 应用更新后闹钟丢失

Kotlin Excessed 通过引用创建实体