Согласно документам :
Вы можете установить аргумент процессора аннотаций (room.schemaLocation), чтобы сообщить Room об экспорте схемы в папку. Несмотря на то, что это не является обязательным, рекомендуется иметь историю версий в вашей кодовой базе, и вы должны зафиксировать этот файл в вашей системе контроля версий (но не поставляйте его вместе с приложением!).
Так что, если вам не нужно проверять схему и вы хотите избавиться от предупреждения, просто добавьте exportSchema = false
к своему RoomDatabase
, как показано ниже.
@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\")"
]
}
}
Если мое понимание верно, вы будете получать такой файл при каждом обновлении версии базы данных, чтобы вы могли легко следить за историей вашей базы данных.
В
build.gradle
файле для модуля приложения добавьте его вdefaultConfig
раздел (подandroid
разделом). Это запишет схему вschemas
подпапку папки вашего проекта.Как это:
источник
app/schemas
каталоге этой операцией. И я слышал, что мы должны поместить схему в каталог, который не включен вapk
. Как мы можем сделать это?Котлин? Вот так:
Не забудьте про плагин:
apply plugin: 'kotlin-kapt'
Для получения дополнительной информации о процессоре аннотаций kotlin, пожалуйста, посетите: Kotlin docs
источник
Выше ответы верны. Эту версию легко понять:
Поскольку «Каталог экспорта схемы не предоставляется процессору аннотаций», поэтому нам необходимо предоставить каталог для экспорта схемы:
Или
(потому что значение по умолчанию всегда верно)
$ projectDir : это имя переменной, вы не можете его изменить. он получит ваш собственный каталог проектов
схемы : это строка, вы можете изменить ее на любую, какую захотите. Например:
"$projectDir/MyOwnSchemas".toString()
источник
build.gradle(project:????)
и нетbuild.gradle(app:????)
?Ответ @mikejonesguy идеален, на случай, если вы планируете протестировать миграцию комнаты (рекомендуется), добавьте расположение схемы в исходные наборы.
build.gradle
источник
Я использую
.kts
файлы Gradle (Kotlin Gradle DSL) иkotlin-kapt
плагин, но все равно получаю ошибку компиляции скрипта, когда использую ответ Иванова Максима.Для меня это было единственное, что сработало:
источник
Возможно, вы не добавили свой класс комнаты в
RoomDatabase
детский класс в@Database(entities = {your_classes})
источник