房间 – 模式导出目录不提供给注释处理器,所以我们不能导出模式

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

我配置了一切,但是当我编译时,Android Studio会给我提示

模式导出目录不提供给注释处理器,所以我们不能导出模式。 您可以提供room.schemaLocation注释处理器参数或将exportSchema设置为false。

据我所知,这是DB文件的位置

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

文档说

您可以设置批注处理器参数(room.schemaLocation)来告诉Room将模式导出到文件夹中。 尽管它不是强制性的,但在您的代码库中有版本历史记录是一个很好的习惯,您应该将该文件提交到您的版本控制系统(但不要将其发布到您的应用程序!)。

所以,如果您不需要检查模式,并且想要摆脱警告,只需将exportedSchema = false添加到您的RoomDatabase ,如下所示。

 @Database(entities = { YourEntity.class }, version = 1, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { ... } 

如果您按照@mikejonesguy的答案,您将遵循文档中提到的良好做法:)。 基本上你会在../app/schemas/文件夹中得到一个../app/schemas/文件。 它看起来像这样:

 { "formatVersion": 1, "database": { "version": 1, "identityHash": "53db508c5248423325bd5393a1c88c03", "entities": [ { "tableName": "sms_table", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message` TEXT, `date` INTEGER, `client_id` INTEGER)", "fields": [ { "fieldPath": "id", "columnName": "id", "affinity": "INTEGER" }, { "fieldPath": "message", "columnName": "message", "affinity": "TEXT" }, { "fieldPath": "date", "columnName": "date", "affinity": "INTEGER" }, { "fieldPath": "clientId", "columnName": "client_id", "affinity": "INTEGER" } ], "primaryKey": { "columnNames": [ "id" ], "autoGenerate": true }, "indices": [], "foreignKeys": [] } ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"53db508c5248423325bd5393a1c88c03\")" ] } } 

如果我的理解是正确的,那么每个数据库版本更新都会得到这样一个文件,以便您可以轻松地跟踪数据库的历史记录。

在您的应用程序模块的build.gradle文件中,将其添加到defaultConfig部分(在android部分下)。 这会将架构写出到项目文件夹的schemas子文件夹中。

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

喜欢这个:

 // ... android { // ... (compileSdkVersion, buildToolsVersion, etc) defaultConfig { // ... (applicationId, miSdkVersion, etc) javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] } } } // ... (buildTypes, compileOptions, etc) } // ... 

科特林? 开始了:

 android { // ... (compileSdkVersion, buildToolsVersion, etc) defaultConfig { // ... (applicationId, miSdkVersion, etc) kapt { arguments { arg("room.schemaLocation", "$projectDir/schemas".toString()) } } } buildTypes { // ... (buildTypes, compileOptions, etc) } } //... 

不要忘记插件:

apply plugin: 'kotlin-kapt'

有关kotlin注释处理器的更多信息,请访问: Kotlin文档