Conforme os documentos :
Você pode definir o argumento do processador de anotação (room.schemaLocation) para solicitar ao Room para exportar o esquema para uma pasta. Mesmo que não seja obrigatório, é uma boa prática ter o histórico de versões na sua base de código e você deve confirmar esse arquivo no seu sistema de controle de versões (mas não o envie com o seu aplicativo!).
Portanto, se você não precisar verificar o esquema e quiser se livrar do aviso, basta adicioná-lo exportSchema = false
ao RoomDatabase
seguinte.
@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//...
}
Se você seguir a resposta @mikejonesguy abaixo, seguirá as boas práticas mencionadas na documentação :). Basicamente, você receberá um .json
arquivo em sua ../app/schemas/
pasta. E parece algo como isto:
{
"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\")"
]
}
}
Se meu entendimento estiver correto, você receberá esse arquivo a cada atualização de versão do banco de dados, para poder acompanhar facilmente o histórico do seu banco de dados.
No
build.gradle
arquivo do seu módulo de aplicativo, adicione-o àdefaultConfig
seção (sob aandroid
seção). Isso gravará o esquema em umaschemas
subpasta da pasta do projeto.Como isso:
fonte
app/schemas
diretório por esta operação. E ouvi dizer que devemos colocar o esquema em um diretório que não esteja incluído no arquivoapk
. Como podemos fazer isso?Kotlin? Aqui vamos nós:
Não se esqueça do plugin:
apply plugin: 'kotlin-kapt'
Para mais informações sobre o processador de anotações kotlin, visite: Kotlin docs
fonte
As respostas acima estão corretas. Esta versão é fácil de seguir:
Como "O diretório de exportação do esquema não é fornecido para o processador de anotação", precisamos fornecer o diretório para a exportação do esquema:
Ou
(porque o valor padrão é sempre verdadeiro)
$ projectDir : é um nome de variável, você não pode alterá-lo. ele receberá seu próprio diretório de projeto
schemas : é uma string, você pode alterá-la para qualquer que quiser. Por exemplo:
"$projectDir/MyOwnSchemas".toString()
fonte
build.gradle(project:????)
e nãobuild.gradle(app:????)
?A resposta @mikejonesguy é perfeita, caso você planeje testar as migrações da sala (recomendado), adicione o local do esquema aos conjuntos de fontes.
build.gradle
fonte
Uso
.kts
arquivos Gradle (Kotlin Gradle DSL) e okotlin-kapt
plug - in, mas ainda recebo um erro de compilação de script quando uso a resposta de Ivanov Maksim.Para mim, foi a única coisa que funcionou:
fonte
Provavelmente você não adicionou sua classe de quarto à classe infantil
RoomDatabase
infantil em@Database(entities = {your_classes})
fonte