Gemäß den Dokumenten :
Sie können das Annotation Processor-Argument (room.schemaLocation) festlegen, um Room anzuweisen, das Schema in einen Ordner zu exportieren. Auch wenn dies nicht obligatorisch ist, empfiehlt es sich, den Versionsverlauf in Ihrer Codebasis zu haben, und Sie sollten diese Datei in Ihr Versionskontrollsystem übertragen (aber nicht mit Ihrer App ausliefern!).
Wenn Sie also das Schema nicht überprüfen müssen und die Warnung entfernen möchten, fügen exportSchema = false
Sie sie einfach RoomDatabase
wie folgt hinzu.
@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//...
}
Wenn Sie der Antwort von @mikejonesguy unten folgen, befolgen Sie die in den Dokumenten genannten bewährten Methoden :). Grundsätzlich erhalten Sie eine .json
Datei in Ihrem ../app/schemas/
Ordner. Und es sieht ungefähr so aus:
{
"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\")"
]
}
}
Wenn mein Verständnis korrekt ist, erhalten Sie bei jedem Update der Datenbankversion eine solche Datei, sodass Sie den Verlauf Ihrer Datenbank problemlos verfolgen können.
build.gradle
Fügen Sie dies in der Datei für Ihr App-Modul demdefaultConfig
Abschnitt (unter demandroid
Abschnitt) hinzu. Dadurch wird das Schema in einenschemas
Unterordner Ihres Projektordners geschrieben.So was:
quelle
app/schemas
durch diesen Vorgang im Verzeichnis erzeugte JSON-Datei gitignore . Und ich habe gehört, wir sollten das Schema in ein Verzeichnis stellen, das nicht im enthalten istapk
. Wie können wir das machen?Kotlin? Auf geht's:
Plugin nicht vergessen:
apply plugin: 'kotlin-kapt'
Weitere Informationen zum Kotlin Annotation Processor finden Sie unter: Kotlin docs
quelle
Die obigen Antworten sind richtig. Diese Version ist leicht zu folgen:
Da "Schemaexportverzeichnis nicht für den Anmerkungsprozessor bereitgestellt wird", müssen wir das Verzeichnis für den Schemaexport bereitstellen:
Oder
(weil der Standardwert immer wahr ist)
$ projectDir : ist ein Variablenname, den Sie nicht ändern können. Es wird Ihr eigenes Projektverzeichnis erhalten
schemas : ist eine Zeichenfolge, die Sie nach Belieben ändern können. Zum Beispiel:
"$projectDir/MyOwnSchemas".toString()
quelle
build.gradle(project:????)
und nichtbuild.gradle(app:????)
?Die Antwort von @mikejonesguy ist perfekt. Falls Sie Raummigrationen testen möchten (empfohlen), fügen Sie den Schemaspeicherort zu den Quellensätzen hinzu.
build.gradle
quelle
Ich verwende
.kts
Gradle-Dateien (Kotlin Gradle DSL) und daskotlin-kapt
Plugin, erhalte jedoch immer noch einen Fehler beim Kompilieren von Skripten, wenn ich die Antwort von Ivanov Maksim verwende.Für mich war dies das einzige, was funktionierte:
quelle
Wahrscheinlich haben Sie nicht Ihr Zimmer Klasse Kind hinzufügen
RoomDatabase
Kindklasse in@Database(entities = {your_classes})
quelle