Sesuai dokumen :
Anda dapat mengatur argumen prosesor anotasi (room.schemaLocation) untuk memberi tahu Room untuk mengekspor skema ke folder. Meskipun tidak wajib, ini adalah praktik yang baik untuk memiliki riwayat versi di basis kode Anda dan Anda harus memasukkan file itu ke dalam sistem kontrol versi Anda (tetapi jangan kirimkan bersama aplikasi Anda!).
Jadi, jika Anda tidak perlu memeriksa skema dan Anda ingin menyingkirkan peringatan itu, tambahkan saja exportSchema = false
pada Anda RoomDatabase
, sebagai berikut.
@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//...
}
Jika Anda mengikuti jawaban @mikejonesguy di bawah ini, Anda akan mengikuti praktik baik yang disebutkan dalam dokumen :). Pada dasarnya Anda akan mendapatkan .json
file di ../app/schemas/
folder Anda . Dan terlihat seperti ini:
{
"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\")"
]
}
}
Jika pemahaman saya benar, Anda akan mendapatkan file seperti itu dengan setiap pembaruan versi basis data, sehingga Anda dapat dengan mudah mengikuti sejarah db Anda.
Dalam
build.gradle
file untuk modul aplikasi Anda, tambahkan ini kedefaultConfig
bagian (di bawahandroid
bagian). Ini akan menulis skema keschemas
subfolder dari folder proyek Anda.Seperti ini:
sumber
app/schemas
direktori oleh operasi ini. Dan saya dengar kita harus meletakkan skema ke direktori yang tidak termasuk dalamapk
. Bagaimana kita bisa melakukan itu?Kotlin? Kita mulai:
Jangan lupa tentang plugin:
apply plugin: 'kotlin-kapt'
Untuk informasi lebih lanjut tentang prosesor anotasi kotlin, silakan kunjungi: Kotlin docs
sumber
Jawaban di atas benar. Versi ini mudah diikuti:
Karena "Direktori ekspor skema tidak disediakan untuk prosesor anotasi", Jadi kami perlu menyediakan direktori untuk skema ekspor:
Atau
(karena nilai default selalu benar)
$ projectDir : adalah nama variabel, Anda tidak dapat mengubahnya. itu akan mendapatkan direktori proyek Anda sendiri
skema : adalah string, Anda dapat mengubahnya ke apa pun yang Anda suka. Sebagai contoh:
"$projectDir/MyOwnSchemas".toString()
sumber
build.gradle(project:????)
dan tidakbuild.gradle(app:????)
?@mikejonesguy jawaban sempurna, kalau-kalau Anda berencana untuk menguji migrasi kamar (disarankan), tambahkan lokasi skema ke set sumber.
build.gradle
sumber
Saya menggunakan
.kts
file Gradle (Kotlin Gradle DSL) dankotlin-kapt
plugin tetapi saya masih mendapatkan kesalahan kompilasi skrip ketika saya menggunakan jawaban Ivanov Maksim.Bagi saya ini adalah satu-satunya hal yang berhasil:
sumber
Mungkin Anda tidak menambahkan kelas kamar Anda ke kelas anak
RoomDatabase
kecil@Database(entities = {your_classes})
sumber