我正在使用Android数据库组件室

我已经配置了一切,但当我编译时,Android Studio给我这个警告:

架构导出目录没有提供给注释处理器,因此 我们不能导出模式。你可以提供 房间。schemaLocation注释处理器参数OR集 exportSchema为false。

根据我的理解,这是DB文件将被定位的位置

它如何影响我的应用程序?这里的最佳实践是什么?我是否应该使用默认位置(false值)?


当前回答

芬兰湾的科特林?开始吧:

android {

    // ... (compileSdkVersion, buildToolsVersion, etc)

    defaultConfig {

        // ... (applicationId, miSdkVersion, etc)

        kapt {
            arguments {
                arg("room.schemaLocation", "$projectDir/schemas")
            }
        }
    }

    buildTypes {
        // ... (buildTypes, compileOptions, etc)
    }
}

//...

不要忘记插件:

应用插件:“科特林-卡皮特”

有关kotlin注释处理器的更多信息,请访问: 芬兰湾的科特林医生

其他回答

致Kotlin KSP:

ksp {
    arg('room.schemaLocation', "$projectDir/schemas")
}

以上答案正确。这个版本很容易遵循:

因为“模式导出目录没有提供给注释处理器”,所以我们需要提供模式导出的目录:

步骤[1]在扩展RoomDatabase的文件中,更改行为:

`@Database(entities = ???.class,version = 1, exportSchema = true)`

Or

`@Database(entities = ???.class,version = 1)` 

(因为默认值总是true)

在build.gradle(project:????)文件中,在defaultConfig{}(在android{}大区域内)中,添加javaCompileOptions{}部分,它将像这样:

         android{
                defaultConfig{
                      //javaComplieOptions SECTION
                      javaCompileOptions {
                            annotationProcessorOptions {
                                     arguments = ["room.schemaLocation":"$projectDir/schemas".toString()]
                            }
                       }
                      //Other SECTION
                      ...
                }
         }

$projectDir:是一个变量名,你不能改变它。它会得到你自己的项目目录

schema:是一个字符串,你可以把它改成任何你喜欢的。例如: " $ / MyOwnSchemas”管理扫描.toString ()

我使用。kts Gradle文件(Kotlin Gradle DSL)和Kotlin -kapt插件,但当我使用Ivanov Maksim的答案时,我仍然得到一个脚本编译错误。

Unresolved reference: kapt

对我来说,这是唯一有效的方法:

android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = mapOf("room.schemaLocation" to "$projectDir/schemas")
            }
        }
    }
}

芬兰湾的科特林?开始吧:

android {

    // ... (compileSdkVersion, buildToolsVersion, etc)

    defaultConfig {

        // ... (applicationId, miSdkVersion, etc)

        kapt {
            arguments {
                arg("room.schemaLocation", "$projectDir/schemas")
            }
        }
    }

    buildTypes {
        // ... (buildTypes, compileOptions, etc)
    }
}

//...

不要忘记插件:

应用插件:“科特林-卡皮特”

有关kotlin注释处理器的更多信息,请访问: 芬兰湾的科特林医生

如果你像我一样最近移动某些类到不同的包等。你使用android导航。确保将argType更改为与您的新包地址匹配。 来自:

app:argType="com.example.app.old.Item" 

to:

app:argType="com.example.app.new.Item"