📜  模式导出目录未提供给注释处理器,因此我们无法导出模式.您可以提供 `room.schemaLocation` 注释处理器参数或将 exportSchema 设置为 false. (1)

📅  最后修改于: 2023-12-03 15:10:57.163000             🧑  作者: Mango

导出模式的问题及解决方案

在使用 Room 数据库时,可能会遇到导出模式的问题,具体表现为:

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

这是由于在 Room 数据库中默认开启了导出模式(Schema),即会自动生成数据库的结构信息,并导出到指定目录下。如果该目录未正确配置或未提供,就会导致上述错误的出现。

关于解决方案,我们有两个选项:

选项一:配置注释处理器参数

我们可以通过配置 room.schemaLocation 注释处理器参数,来指定模式导出目录,并解决上述问题。

具体操作步骤如下:

  1. 在项目的 build.gradle 文件中,添加如下配置(如果已有该配置,就不需要添加):
android {
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas"]
            }
        }
    }
}
  1. 创建 schemas 目录(如果不存在),并重新构建项目。

这样,就可以将生成的模式文件导出到 schemas 目录下,以供后续文档、测试等使用。

选项二:禁用导出模式

另一个解决方案是将 exportSchema 设置为 false,从而禁用导出模式。这样做的好处是可以减少编译时的开销,并提高构建速度。

具体操作步骤如下:

  1. 在 Room 数据库的定义中,添加 exportSchema 节点,并将其设置为 false
@Database(entities = [User::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
    ...
}
  1. 重新构建项目即可。

注意,如果我们禁用了导出模式,之后就无法生成相应的数据库结构文档,因此建议只在开发、调试阶段使用该选项,生产环境中应该开启导出模式并提供正确的目录。