debugjavaCritical
Room - Schema export directory is not provided to the annotation processor so we cannot export the schema
Viewed 0 times
directoryprovidedroomannotationtheexportprocessornotschemacannot
Problem
I am using Android Database Component Room
I've configured everything, but when I compile, Android Studio gives me this warning:
Schema export directory is not provided to the annotation processor so
we cannot export the schema. You can either provide
exportSchema to false.
As I understand it is the location where DB file will be located
How can it affect my app? What is the best practice here? Should I use the default location (
I've configured everything, but when I compile, Android Studio gives me this warning:
Schema export directory is not provided to the annotation processor so
we cannot export the schema. You can either provide
room.schemaLocation annotation processor argument OR setexportSchema to false.
As I understand it is the location where DB file will be located
How can it affect my app? What is the best practice here? Should I use the default location (
false value)?Solution
As per the docs:
You can set annotation processor argument (room.schemaLocation) to tell Room to export the schema into a folder. Even though it is not mandatory, it is a good practice to have version history in your codebase and you should commit that file into your version control system (but don't ship it with your app!).
So if you don't need to check the schema and you want to get rid of the warning, just add
If you follow @mikejonesguy answer below, you will follow the good practice mentioned in the docs.
Basically you will get a
If my understanding is correct, you will get such a file with every database version update, so that you can easily follow the history of your db.
You can set annotation processor argument (room.schemaLocation) to tell Room to export the schema into a folder. Even though it is not mandatory, it is a good practice to have version history in your codebase and you should commit that file into your version control system (but don't ship it with your app!).
So if you don't need to check the schema and you want to get rid of the warning, just add
exportSchema = false to your RoomDatabase, as follows.@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//...
}If you follow @mikejonesguy answer below, you will follow the good practice mentioned in the docs.
Basically you will get a
.json file in your ../app/schemas/ folder, which looks something like this:{
"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\")"
]
}
}
If my understanding is correct, you will get such a file with every database version update, so that you can easily follow the history of your db.
Code Snippets
@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//...
}Context
Stack Overflow Q#44322178, score: 562
Revisions (0)
No revisions yet.