Room - 架构导出目录未提供给注释处理器,因此我们无法导出架构 [英] Room - Schema export directory is not provided to the annotation processor so we cannot export the schema

查看:19
本文介绍了Room - 架构导出目录未提供给注释处理器,因此我们无法导出架构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using Android Database Component Room

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

I've configured everything, but when I compile, Android Studio gives me this warning:

模式导出目录没有提供给注解处理器,所以我们无法导出架构.您可以提供room.schemaLocation 注释处理器参数或设置exportSchema 为 false.

Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide room.schemaLocation annotation processor argument OR set exportSchema to false.

据我所知,这是数据库文件所在的位置

As I understand it is the location where DB file will be located

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

How can it affect my app? What is the best practice here? Should I use the default location (false value)?

推荐答案

根据 文档:

您可以设置注释处理器参数 (room.schemaLocation) 来告诉 Room 将架构导出到文件夹中.尽管这不是强制性的,但在您的代码库中包含版本历史记录是一个很好的做法,您应该将该文件提交到您的版本控制系统中(但不要随您的应用一起提供!).

You can set annotation processor argument (room.schemaLocation) to tell Room to export the schema into a folder. Even though it is not mandatory, it is a good practice to have version history in your codebase and you should commit that file into your version control system (but don't ship it with your app!).

因此,如果您不需要检查架构并且想要摆脱警告,只需将 exportSchema = false 添加到您的 RoomDatabase 中,如下所示.

So if you don't need to check the schema and you want to get rid of the warning, just add exportSchema = false to your RoomDatabase, as follows.

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

如果您遵循下面的@mikejonesguy answer,您将遵循文档中提到的良好做法:).基本上,您将在 ../app/schemas/ 文件夹中获得一个 .json 文件.它看起来像这样:

If you follow @mikejonesguy answer below, you will follow the good practice mentioned in the docs :). Basically you will get a .json file in your ../app/schemas/ folder. And it looks something like this:

{
  "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")"
    ]
  }
}

如果我的理解是正确的,每次数据库版本更新你都会得到这样一个文件,这样你就可以很容易地跟踪你的数据库的历史.

If my understanding is correct, you will get such a file with every database version update, so that you can easily follow the history of your db.

这篇关于Room - 架构导出目录未提供给注释处理器,因此我们无法导出架构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆