1. ホーム
  2. java

[解決済み] ルーム - スキーマエクスポートディレクトリがアノテーションプロセッサに提供されていないため、スキーマをエクスポートできない

2022-03-22 16:44:49

質問内容

Android Database Component Roomを使用しています。

すべて設定したのですが、コンパイルするとAndroid Studioでこのような警告が出ます。

スキーマエクスポートディレクトリがアノテーションプロセッサーに提供されていないため スキーマをエクスポートできません。スキーマをエクスポートするには room.schemaLocation アノテーションプロセッサの引数を指定するか exportSchema を false に設定します。

DBファイルが置かれる場所だと理解しています。

私のアプリにどのような影響があるのでしょうか?ここでベストプラクティスは何ですか?デフォルトの場所を使うべきでしょうか? false の値) を使用できますか?

どのように解決するのですか?

の通りです。 ドキュメント :

<ブロッククオート

注釈プロセッサーの引数 (room.schemaLocation) を設定すると、スキーマをフォルダにエクスポートするように Room に指示することができます。必須ではありませんが、コードベースにバージョン履歴を持つことは良い習慣であり、そのファイルをバージョン管理システムにコミットする必要があります(ただし、アプリと一緒に出荷しないように!)。

ですから、スキーマをチェックする必要がなく、警告を消したいのであれば、単に exportSchema = falseRoomDatabase は、以下のようになります。

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

あなたが@mikejonesguyをフォローしている場合 回答 の下にある、ドキュメントで言及されているグッドプラクティスに従うことになります :) 。 基本的に、あなたは .json ファイルを ../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\")"
    ]
  }
}

私の理解が正しければ、データベースのバージョンを更新するたびにこのようなファイルを入手し、データベースの履歴を簡単に追うことができるようになります。