Según los documentos :
Puede configurar el argumento del procesador de anotaciones (room.schemaLocation) para indicarle a Room que exporte el esquema a una carpeta. Aunque no es obligatorio, es una buena práctica tener el historial de versiones en su base de código y debe enviar ese archivo a su sistema de control de versiones (¡pero no lo envíe con su aplicación!).
Entonces, si no necesita verificar el esquema y desea deshacerse de la advertencia, simplemente agregue exportSchema = false
a su RoomDatabase
, de la siguiente manera.
@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//...
}
Si sigue la respuesta de @mikejonesguy a continuación, seguirá las buenas prácticas mencionadas en los documentos :). Básicamente obtendrá un .json
archivo en su ../app/schemas/
carpeta. Y se parece a esto:
{
"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\")"
]
}
}
Si mi comprensión es correcta, obtendrá un archivo con cada actualización de la versión de la base de datos, para que pueda seguir fácilmente el historial de su base de datos.
En el
build.gradle
archivo para su módulo de aplicación, agregue esto a ladefaultConfig
sección (debajo de laandroid
sección). Esto escribirá el esquema en unaschemas
subcarpeta de la carpeta de su proyecto.Me gusta esto:
fuente
app/schemas
directorio por esta operación? Y escuché que deberíamos poner el esquema en un directorio que no está incluido en elapk
. ¿Cómo podemos hacer eso?Kotlin? Aquí vamos:
No te olvides del complemento:
apply plugin: 'kotlin-kapt'
Para obtener más información sobre el procesador de anotación kotlin, visite: Kotlin docs
fuente
Las respuestas anteriores son correctas. Esta versión es fácil de seguir:
Debido a que "el directorio de exportación de esquema no se proporciona al procesador de anotaciones", debemos proporcionar el directorio para la exportación de esquema:
O
(porque el valor predeterminado siempre es verdadero)
$ projectDir : es un nombre de variable, no puede cambiarlo. obtendrá su propio directorio de proyectos
esquemas : es una cadena, puede cambiarla a la que desee. Por ejemplo:
"$projectDir/MyOwnSchemas".toString()
fuente
build.gradle(project:????)
y nobuild.gradle(app:????)
?La respuesta de @mikejonesguy es perfecta, en caso de que planee probar las migraciones de salas (recomendado), agregue la ubicación del esquema a los conjuntos de origen.
build.gradle
fuente
Uso los
.kts
archivos de Gradle (Kotlin Gradle DSL) y elkotlin-kapt
complemento, pero sigo recibiendo un error de compilación de script cuando uso la respuesta de Ivanov Maksim.Para mí esto fue lo único que funcionó:
fuente
Probablemente no agregaste la clase de tu habitación a
RoomDatabase
la clase infantil@Database(entities = {your_classes})
fuente