Room
Ultimo aggiornamento | Release stabile | Candidato per la release | Versione beta | Versione alpha |
---|---|---|---|---|
11 dicembre 2024 | 2.6.1 | - | - | 2.7.0-alpha12 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza da Room, devi aggiungere il repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il repository Maven di Google.
Le dipendenze per Room includono test delle migrazioni di Room e Room RxJava
Aggiungi le dipendenze per gli elementi necessari nel file build.gradle
per la tua app o il tuo modulo:
Kotlin
dependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See Add the KSP plugin to your project ksp("androidx.room:room-compiler:$room_version") // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor("androidx.room:room-compiler:$room_version") // optional - Kotlin Extensions and Coroutines support for Room implementation("androidx.room:room-ktx:$room_version") // optional - RxJava2 support for Room implementation("androidx.room:room-rxjava2:$room_version") // optional - RxJava3 support for Room implementation("androidx.room:room-rxjava3:$room_version") // optional - Guava support for Room, including Optional and ListenableFuture implementation("androidx.room:room-guava:$room_version") // optional - Test helpers testImplementation("androidx.room:room-testing:$room_version") // optional - Paging 3 Integration implementation("androidx.room:room-paging:$room_version") }
Groovy
dependencies { def room_version = "2.6.1" implementation "androidx.room:room-runtime:$room_version" // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See KSP Quickstart to add KSP to your build ksp "androidx.room:room-compiler:$room_version" // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor "androidx.room:room-compiler:$room_version" // optional - RxJava2 support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - RxJava3 support for Room implementation "androidx.room:room-rxjava3:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" // optional - Paging 3 Integration implementation "androidx.room:room-paging:$room_version" }
Per informazioni sull'utilizzo del plug-in KAPT, consulta la documentazione di KAPT.
Per informazioni sull'utilizzo del plug-in KSP, consulta la documentazione di KSP per la configurazione rapida.
Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di ktx.
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.
Facoltativamente, per le librerie non Android (ad es. moduli Gradle solo Java o Kotlin),
puoi fare affidamento su androidx.room:room-common
per utilizzare le annotazioni Room.
Configurazione delle opzioni del compilatore
Room ha le seguenti opzioni di elaboratore di annotazioni.
room.schemaLocation |
directory
Consente di esportare gli schemi di database in file JSON nella directory specificata. Per ulteriori informazioni, consulta la sezione Migrazioni delle stanze. |
room.incremental |
boolean
Attiva l'elaborazione delle annotazioni incrementali di Gradle. Il valore predefinito è true .
|
room.generateKotlin |
boolean
Genera file di origine Kotlin anziché Java. Richiede KSP. Il valore predefinito è false .
Per ulteriori dettagli, consulta le note sulla versione 2.6.0.
|
Utilizzare il plug-in Gradle Room
Con Room versione 2.6.0 e successive, puoi utilizzare il plug-in Gradle di Room per configurare le opzioni per il compilatore Room. Il plug-in configura il progetto in modo che gli schemi generati (che sono un output delle attività di compilazione e vengono utilizzati per le migrazioni automatiche) siano configurati correttamente per avere build riproducibili e memorizzabili nella cache.
Per aggiungere il plug-in, definisci il plug-in e la relativa versione nel file di compilazione Gradle di primo livello.
Groovy
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
Nel file di compilazione Gradle a livello di modulo, applica il plug-in e utilizza l'estensione room
.
Groovy
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
L'impostazione di un schemaDirectory
è obbligatoria quando utilizzi il plug-in Gradle Room. In questo modo, il compilatore Room e le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) verranno configurati in modo da generare i file dello schema in cartelle con nome specifico, ad esempioschemas/flavorOneDebug/com.package.MyDatabase/1.json
. Questi file devono essere controllati nel repository per essere utilizzati per la convalida e le migrazioni automatiche.
Alcune opzioni non possono essere configurate in tutte le versioni del plug-in Gradle di Room, anche se sono supportate dal compilatore Room. La tabella seguente elenca ogni
opzione e mostra la versione del plug-in Gradle Room che ha aggiunto il supporto per
configurare l'opzione utilizzando l'estensione room
. Se la tua versione è precedente o se l'opzione non è ancora supportata, puoi utilizzare le opzioni di elaboratore di annotazioni.
Opzione | A partire dalla versione |
---|---|
room.schemaLocation (campo obbligatorio) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
Utilizzare le opzioni del processore di annotazioni
Se non utilizzi il plug-in Gradle Room o se l'opzione che ti interessa non è supportata dalla tua versione del plug-in, puoi configurare Room utilizzando le opzioni dell'elaboratore di annotazioni, come descritto in Aggiungere dipendenze di compilazione. Il modo in cui specifichi le opzioni di annotazione dipende dal fatto che tu utilizzi KSP o KAPT per Room.
Groovy
// For KSP ksp { arg("option_name", "option_value") // other otions... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "option_name":"option_value", // other options... ] } } } }
Kotlin
// For KSP ksp { arg("option_name", "option_value") // other options... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "option_name" to "option_value", // other options... ) } } } }
Poiché room.schemaLocation
è una directory e non un tipo primitivo, è necessario utilizzare un CommandLineArgumentsProvider
quando aggiungi questa opzione in modo che Gradle la conosca quando esegue i controlli aggiornati.
Esegui la migrazione del database Room
mostra un'implementazione completa di CommandLineArgumentsProvider
che fornisce
la posizione dello schema.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione del Monitoraggio problemi.
Versione 2.7
Versione 2.7.0-alpha12
11 dicembre 2024
androidx.room:room-*:2.7.0-alpha12
viene rilasciato. La versione 2.7.0-alpha12 contiene questi commit.
Modifiche all'API
- Aggiungi l'API sperimentale
RoomDatabase.Builder.setInMemoryTrackingMode()
per configurare se Room deve utilizzare o meno una tabella in memoria per il monitoraggio dell'invalidazione. (I2a9b2, b/185414040)
Correzioni di bug
- Le migrazioni distruttive ora eliminano le visualizzazioni per assicurarsi che vengano ricreate, allineando il comportamento quando allowDestructiveMigrationForAllTables
è ON (valore predefinito di KMP) con il comportamento esistente quando è OFF. (0a3e83, b/381518941)
Versione 2.7.0-alpha11
30 ottobre 2024
androidx.room:room-*:2.7.0-alpha11
viene rilasciato. La versione 2.7.0-alpha11 contiene questi commit.
Modifiche all'API
- Rivedi la firma del metodo
convertRows()
appena aggiunto in modo che sia una funzione di sospensione che riceve unRawRoomQuery
per la paginazione delle stanze. (Ie57b5, b/369136627)
Correzioni di bug
- È stato risolto il problema di paginazione della stanza per cui veniva generato un codice non valido quando si utilizzava
@Relation
in combinazione conPagingSource
.
Versione 2.7.0-alpha10
16 ottobre 2024
androidx.room:room-*:2.7.0-alpha10
viene rilasciato. La versione 2.7.0-alpha10 contiene questi commit.
Modifiche all'API
- Crea la classe interna
ByteArrayWrapper
per supportare le relazioni conByteBuffer
in piattaforme non Android e non JVM. (I75543, b/367205685) - Aggiungi
SQLiteStatement.getColumnType()
insieme alle varie costanti di risultatoSQLITE_DATA_*
per consentire il recupero del tipo di dati di una colonna. (I1985c, b/369636251)
Versione 2.7.0-alpha09
2 ottobre 2024
androidx.room:room-*:2.7.0-alpha09
viene rilasciato. La versione 2.7.0-alpha09 contiene questi commit.
Correzioni di bug
- Risolto un problema con l'implementazione KMP di
room-paging
che causava unError code: 8, message: attempt to write a readonly database
a causa dell'avvio di una transazione di scrittura su una connessione di lettura. (b/368380988)
Versione 2.7.0-alpha08
18 settembre 2024
androidx.room:room-*:2.7.0-alpha08
viene rilasciato. La versione 2.7.0-alpha08 contiene questi commit.
Nuove funzionalità
- È stata eseguita la migrazione degli elementi
room-paging
in modo che siano compatibili con KMP. (Ib8756, b/339934824) - L'API
invalidationTrackerFlow()
è stata resa disponibile come API proprietaria comeInvalidationTracker.createFlow()
ed è ora disponibile per i set di origine non Android nei progetti KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)
Modifiche all'API
- Tutti gli avvisi e i messaggi di errore in Room che utilizzano la parola
Cursor
sono stati rimossi o sostituiti, poichéCursor
non è più un termine generale preciso da utilizzare nella versione KMP di Room. (Id8cd9, b/334087492)
Correzioni di bug
- Risolto un problema per cui Room KMP tentava di emettere codice utilizzando
UUID
per piattaforme non JVM. (b/362994709) - È stato risolto un problema con il plug-in Gradle Room che causava un errore come "Impossibile modificare gli attributi della configurazione … dopo che è stato bloccato per la mutazione" quando veniva utilizzato in un progetto KMP con Compose Multiplatform. (b/343408758)
Versione 2.7.0-alpha07
21 agosto 2024
androidx.room:room-*:2.7.0-alpha07
viene rilasciato. La versione 2.7.0-alpha07 contiene questi commit.
Nuove funzionalità
- Ora il plug-in Gradle Room aggiunge automaticamente gli schemi esportati alle origini delle risorse di test di strumentazione Android in modo che possano essere utilizzati da
MigrationTestHelper
.
Correzioni di bug
- È stato risolto un problema relativo al fatto che il valore "effettivo" generato per
RoomDatabaseConstructor
non include il modificatore "effettivo" nella funzioneinitialize
se questa funzione viene sostituita anche nella dichiarazione "expect". (359631627) - È stato risolto un problema relativo al fatto che il valore "effettivo" generato del
RoomDatabaseConstructor
non corrisponde alla visibilità della dichiarazione "expect". (358138953)
Versione 2.7.0-alpha06
7 agosto 2024
androidx.room:room-*:2.7.0-alpha06
viene rilasciato. La versione 2.7.0-alpha06 contiene questi commit.
Modifiche all'API
- Modifica la configurazione dell'istanza per un
RoomDatabase
in un progetto KMP.
A causa del modello di compilazione di Kotlin 2.0, la strategia di fare riferimento a una funzione da generare, denominata instantiateImpl()
, non è più valida. Vengono introdotte due nuove API, @ConstructedBy
e RoomDatabaseConstructor
, che sostituiscono la strategia instantiateImpl()
. La nuova strategia è la seguente:
Definisci un oggetto expect che implementi
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
Collega l'oggetto alla dichiarazione
@Database
utilizzando@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
Crea una nuova istanza di database, ma senza passare un argomento di fabbrica
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Correzioni b/316978491, b/338446862 e b/342905180
- Supporto di
@RawQuery
in Room KMP mediante l'aggiunta di una nuova API denominataRoomRawQuery
, simile aSupportSQLiteQuery
in termini di gestione della stringa SQL non elaborata, e di una funzione per legare gli argomenti a un'istruzione. Le funzioni annotate@RawQuery
ora possono accettare unRoomRawQuery
come unico parametro. (Iea844, b/330586815) - Aggiungi un sovraccarico di
setQueryCallback()
che accetti unCoroutineContext
. (Id66ff, b/309996304) - È stato aggiunto il supporto per i target
linuxArm64
Kotlin Multiplatform (I139d3, b/338268719)
Correzioni di bug
- Risolto un problema per cui Room generava erroneamente una chiamata a
recursiveFetchArrayMap
nei target non Android. (710c36, b/352482325) - È stato risolto un problema per cui a volte Room generava un'eccezione relativa a "Timeout durante il tentativo di connessione" in un progetto KMP. (fa72d0, b/347737870)
- È stato corretto un problema nelle migrazioni automatiche che verificava la presenza di chiavi esterne troppo presto prima che altre tabelle modificassero i propri schemi per conformarsi alle nuove chiavi esterne. (7672c0, b/352085724)
Versione 2.7.0-alpha05
10 luglio 2024
androidx.room:room-*:2.7.0-alpha05
viene rilasciato. La versione 2.7.0-alpha05 contiene questi commit.
Modifiche all'API
SQLiteKt
è stato rinominato inSQLite
eBundledSQLiteKt
inBundledSQLite
. (I8b501)
Correzioni di bug
- È stato corretto un bug per cui un
RoomDatabase
generava un deadlock o un errore con un timeout della connessione durante l'utilizzo diAndroidSQLiteDriver
.
Versione 2.7.0-alpha04
12 giugno 2024
androidx.room:room-*:2.7.0-alpha04
viene rilasciato. La versione 2.7.0-alpha04 contiene questi commit.
Correzioni di bug
- È stato risolto un problema nell'elaborazione delle annotazioni di Room che generava codice KMP incompatibile quando in un DAO era definito un tipo di ritorno con più mappe. (b/340983093)
- Risolto un problema per cui Room non riusciva a trovare l'implementazione del database generata se la classe annotata
@Database
non aveva un pacchetto. (b/342097292) - È stato risolto un problema per cui l'attivazione della chiusura automatica e dell'invalidazione multi-istanza a volte causava un errore
ConcurrentModificationException
quando il database veniva chiuso automaticamente per inattività.
Versione 2.7.0-alpha03
29 maggio 2024
androidx.room:room-*:2.7.0-alpha03
viene rilasciato. La versione 2.7.0-alpha03 contiene questi commit.
Correzioni di bug
- Risolvere vari problemi relativi a Kotlin 2.0 e KSP 2.0. Tieni presente che Kotlin 2.0 con il supporto di KSP 2 non è completo e il team sta lavorando alle varie API e alle modifiche del comportamento nel nuovo compilatore. (b/314151707)
Versione 2.7.0-alpha02
14 maggio 2024
androidx.room:room-*:2.7.0-alpha02
viene rilasciato. La versione 2.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Sono stati risolti vari problemi relativi a KSP.
Versione 2.7.0-alpha01
1° maggio 2024
androidx.room:room-*:2.7.0-alpha01
viene rilasciato. La versione 2.7.0-alpha01 contiene questi commit.
Nuove funzionalità
- Supporto di Kotlin Multiplatform (KMP): in questa release, Room è stato sottoposto a refactoring per diventare una libreria Kotlin Multiplatform (KMP). Anche se c'è ancora del lavoro da fare, questa release introduce una nuova versione di Room in cui la maggior parte delle funzionalità è stata "standardizzata" (realizzata per essere multipiattaforma). Le piattaforme attualmente supportate sono Android, iOS, JVM (computer), Mac nativo e Linux nativo. Le funzionalità mancanti nelle piattaforme di nuova introduzione saranno rese "complete" nelle release di Room future.
Per ulteriori informazioni su come iniziare a utilizzare Room KMP, consulta la documentazione ufficiale di Room KMP.
- La generazione di codice Kotlin su KSP è stata attivata per impostazione predefinita se l'elaborazione viene eseguita tramite KSP. Per i progetti solo KAPT o Java, Room continuerà a generare sorgenti Java.
Modifiche all'API
- È stato aggiunto un sovraccarico di
Room.databaseBuilder()
che accetta un parametro lambda da utilizzare con una funzione generata da Room per evitare di utilizzare la riflessione durante l'inizializzazione dell'implementazione diRoomDatabase
generata. Un esempio di utilizzo è:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Al generatore è stata aggiunta un'API per la configurazione di una stanza con un
CoroutineContext
:RoomDatabase.Builder.setQueryCoroutineContext
. Tieni presente che unRoomDatabase
può essere configurato solo con gli esecutori che utilizzanosetQueryExecutor
o con un contesto Coroutine, ma non con entrambi. - È stata aggiunta un'API per la configurazione di Room con un driver
SQLite
:RoomDatabase.Builder.setDriver()
. Per ulteriori informazioni sull'APISQLite
Driver, consulta la documentazione di SQLite KMP. - Sono state aggiunte le API per accedere al
SQLiteConnection
sottostante dalle API di aggiornamento:RoomDatabase.useReaderConnection
eRoomDatabase.useWriterConnection
. - Diversi callback relativi alla stanza ora hanno una versione sovraccaricata che riceve
SQLiteConnection
anzichéSupportSQLiteDatabase
. Questi valori devono essere sostituiti durante la migrazione a un progetto KMP. Per ulteriori informazioni sulla migrazione degli utilizzi di Room in un'app per Android a un modulo KMP comune, consulta la guida alla migrazione. I richiami sono:Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- L'elemento KTX
androidx.room:room-ktx
è stato unito aandroidx.room:room-runtime
insieme a tutte le relative API. L'elemento è ora vuoto. Rimuovilo dall'elenco delle dipendenze.
Versione 2.6
Versione 2.6.1
29 novembre 2023
androidx.room:room-*:2.6.1
viene rilasciato. La versione 2.6.1 contiene questi commit.
Correzioni di bug
- È stato risolto un problema nel codice generato per cui il valore predefinito per le colonne doppie in
EntityCursorConverter
veniva impostato su 0 anziché su 0,0. È stata inclusa anche una potenziale correzione per un caso limite simile per le colonne di tipo Float. (Id75f5, b/304584179) - Le eccezioni lanciate dai caricamenti
PagingSource
verranno ora propagate comeLoadStateUpdate
diLoadResult.Error
contenente Throwable. Questo stato di errore è osservabile tramitePagingDataAdapter.loadStateFlow(Views)
oLazyPagingItems.loadState(Compose)
. Tieni presente che si tratta di un cambiamento di comportamento: in passato, gli errori di caricamento venivano visualizzati come un'eccezione lanciata dal metodo dao che ha attivato il caricamento. (I93887, b/302708983)
Versione 2.6.0
18 ottobre 2023
androidx.room:room-*:2.6.0
viene rilasciato. La versione 2.6.0 contiene questi commit.
Modifiche importanti dalla versione 2.5.0
- L'opzione per attivare la generazione di codice Kotlin (o "Kotlin CodeGen") è ora disponibile in Room KSP. (4297ec0). Per attivare Kotlin CodeGen in Room, aggiungi il nome dell'opzione
room.generateKotlin
alle opzioni del processore per KSP. Per maggiori dettagli su come passare le opzioni di elaborazione per KSP, consulta la documentazione di KSP.
Nota: quando utilizzi Kotlin CodeGen, è importante notare che sono state aggiunte ulteriori limitazioni. Le proprietà astratte come getter DAO o query DAO in Kotlin CodeGen non sono consentite e dovrebbero essere riscritte come funzioni per evitare la falsa idea che il valore della proprietà sia immutabile e abbia un risultato archiviato fisso. Un'altra limitazione aggiunta è che i tipi di ritorno delle raccolte Nullable non sono più consentiti in Room per la generazione di codice Kotlin.
Avviso: potresti scoprire che i tuoi progetti sono più rigidi in termini di presenza di valori null quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, la nullabilità degli argomenti di tipo è importante, mentre in Java viene ignorata per la maggior parte. Ad esempio, supponiamo che tu abbia un tipo di ritorno "Flow<foo\>" e che la tabella sia vuota. In CodeGen Java, questo non causerà alcun problema, ma in CodeGen Kotlin verrà visualizzato un errore. Per evitare questo problema, devi utilizzare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>
- Il nuovo elemento per il plug-in Gradle di Room è stato aggiunto a Room con l'ID
androidx.room
, che risolve vari problemi esistenti in Room relativi all'utilizzo di input e output degli schemi tramite le opzioni dell'annotatore Gradle. Per maggiori dettagli, consulta le note di rilascio della versione 2.6.0-alpha02 di Room. - Le classi di valore nelle entità Room sono ora supportate per KSP. (4194095)
- I tipi di ritorno Map nidificati nelle funzioni DAO sono ora supportati in Room. (I13f48, 203008711)
Versione 2.6.0-rc01
20 settembre 2023
androidx.room:room-*:2.6.0-rc01
viene rilasciato. La versione 2.6.0-rc01 contiene questi commit.
Versione 2.6.0-beta01
23 agosto 2023
androidx.room:room-*:2.6.0-beta01
viene rilasciato. La versione 2.6.0-beta01 contiene questi commit.
Correzioni di bug
- Gestione dell'eccezione speciale
SQLite
durante l'upsert rilevata quando viene lanciata l'eccezione2067 SQLITE_CONSTRAINT_UNIQUE
durante un upsert, l'upsert deve eseguire un aggiornamento. (If2849, b/243039555)
Versione 2.6.0-alpha03
9 agosto 2023
androidx.room:room-*:2.6.0-alpha03
viene rilasciato. La versione 2.6.0-alpha03 contiene questi commit.
Nuove funzionalità
- I tipi di ritorno Map nidificati nelle funzioni DAO sono ora supportati in Room. (I13f48, 203008711)
Modifiche all'API
- È stata creata una nuova annotazione del tipo
@MapColumn
per sostituire@MapInfo
, che è stato ritirato. Per ogni nome di colonna (keyColumnName
,valueColumnName
o entrambi) fornito in un'annotazione@MapInfo
, devi dichiarare un'annotazione@MapColumn
con solocolumnName
e utilizzarla nell'argomento di tipo specifico a cui viene fatto riferimento (la chiave o il valore della mappa) nel tipo di ritorno della funzione DAO. Questo perché l'annotazione@MapColumn
viene utilizzata direttamente nell'argomento tipo all'interno del tipo restituito di una funzione DAO, anziché nella funzione stessa come@MapInfo
. Per saperne di più, consulta la documentazione di@MapColumn
. (Ib0305, b/203008711) - File API aggiornati per annotare la soppressione della compatibilità (I8e87a, b/287516207)
- Le API del plug-in Gradle di Room sono state aggiornate in modo da non richiedere sempre configurazioni per variante. Ciò significa che il plug-in può accettare una posizione globale per tutte le varianti senza creare più directory, consentendo migrazioni più agevoli, ma è anche abbastanza flessibile da configurare manualmente i gusti o gli schemi di tipo di build mantenendo i vantaggi del plug-in (build riproducibili e memorizzabili nella cache). (I09d6f, b/278266663)
Correzioni di bug
- È stata corretta una potenziale vulnerabilità di perdita di memoria in
QueryInterceptorStatement
. (I193d1) - È stato corretto un comportamento errato nella funzione
QueryInterceptorDatabase execSQL()
. (Iefdc8)
Versione 2.6.0-alpha02
21 giu 2023
androidx.room:room-*:2.6.0-alpha02
viene rilasciato. La versione 2.6.0-alpha02 contiene questi commit.
Plug-in Gradle Room
Questa nuova release contiene un nuovo elemento per il plug-in Gradle Room con ID androidx.room
, che risolve vari problemi esistenti in Room relativi all'utilizzo di input e output degli schemi tramite le opzioni dell'annotatore Gradle. Il plug-in Gradle Room configura il progetto in modo che gli schemi generati utilizzati per le migrazioni automatiche e l'output delle attività di compilazione siano configurati correttamente per avere build riproducibili e memorizzabili nella cache. Il plug-in offre un DSL per configurare la posizione dello schema di base:
room {
schemaDirectory("$projectDir/schemas/")
}
Il plug-in configurerà quindi il compilatore Room e le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) per generare i file dello schema in cartelle con nome specifico, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Come di consueto, questi file vengono sottoposti a check-in nel repository per essere utilizzati per la convalida e le migrazioni automatiche. Dopo la migrazione all'utilizzo del plug-in anziché delle opzioni di elaboratore di annotazioni, i file dello schema esistenti devono essere copiati nelle directory dei tipi generati creati dal plug-in. Si tratta di un'operazione di migrazione una tantum che deve essere eseguita manualmente. La documentazione dello schema in developers.android.com verrà aggiornata in futuro, una volta che il feedback sarà stato risolto e il plug-in sarà stabile, quindi provaci.
Modifiche all'API
RoomDatabase.QueryCallback
è stato definito come un'interfaccia funzionale per consentire gli utilizzi delle conversioni SAM. (Iab8ea, b/281008549)
Correzioni di bug
- Risolto il problema che si verifica durante l'inizializzazione del database in Robolectric dopo la migrazione delle origini Room da Java a Kotlin. (Ic053c, b/274924903)
Versione 2.6.0-alpha01
22 marzo 2023
androidx.room:room-*:2.6.0-alpha01
viene rilasciato. La versione 2.6.0-alpha01 contiene questi commit.
Nuove funzionalità
- Supporto delle classi di valore in Room per KSP. Ora Room è in grado di supportare le classi di valore in Entities. (4194095)
- La generazione di codice Kotlin(o "Kotlin CodeGen") ora può essere attivata in Room (4297ec0). Per attivare Kotlin CodeGen in Room, aggiungi il nome dell'opzione
room.generateKotlin
alle opzioni del processore per KSP. Per maggiori dettagli su come passare le opzioni di elaborazione per KSP, consulta la documentazione di KSP.
Nota: quando utilizzi Kotlin CodeGen, è importante notare che sono state aggiunte ulteriori limitazioni. Le proprietà astratte come getter DAO o query DAO in Kotlin CodeGen non sono consentite e dovrebbero essere riscritte come funzioni per evitare la falsa idea che il valore della proprietà sia immutabile e abbia un risultato archiviato fisso. Un'altra limitazione aggiunta è che i tipi di ritorno delle raccolte Nullable non sono più consentiti in Room per la generazione di codice Kotlin.
Avviso: potresti scoprire che i tuoi progetti sono più rigidi in termini di presenza di valori null quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, la nullabilità degli argomenti di tipo è importante, mentre in Java viene ignorata per la maggior parte. Ad esempio, supponiamo che tu abbia un tipo di ritorno "Flow<foo\>" e che la tabella sia vuota. In CodeGen Java, questo non causerà alcun problema, ma in CodeGen Kotlin verrà visualizzato un errore. Per evitare questo problema, devi utilizzare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>
Modifiche all'API
- Evitare l'utilizzo non significativo di raccolte nullable nei tipi di ritorno dei metodi DAO. (I777dc, b/253271782, b/259426907)
- Aggiungi un'API per creare un flusso che emetta modifiche al tracker di invalidazione. L'API è utile per creare stream che devono reagire alle modifiche del database. (I8c790, b/252899305)
Correzioni di bug
- Non consentire proprietà astratte come getter DAO o query DAO nella compilazione di Kotlin, ma devono essere riscritte come funzioni per evitare la falsa idea che il valore della proprietà sia immutabile e abbia un risultato archiviato fisso. (If6a13, b/127483380, b/257967987)
Versione 2.5.2
Versione 2.5.2
21 giu 2023
androidx.room:room-*:2.5.2
viene rilasciato. La versione 2.5.2 contiene questi commit.
Correzioni di bug
- Risolvere un problema di incompatibilità con kotlinx-metadata-jvm. (386d5c)
- Risolto un problema che causava l'emissione di un errore da parte di Room quando veniva utilizzato in un test Robolectric. (f79bea, b/274924903)
Versione 2.5.1
Versione 2.5.1
22 marzo 2023
androidx.room:room-*:2.5.1
viene rilasciato. La versione 2.5.1 contiene questi commit.
Correzioni di bug
- Evita di controllare la directory principale del database in
FrameworkSQLiteHelper
se il database è già aperto. (5de86b8) - Utilizza un controllo
isOpenInternal
per verificare se il database è già aperto. (e91fb35) - Ora è disponibile una gestione migliore del caso reentrante in
acquireTransactionThread()
di Room. (219f98b). Durante una transazione in sospensione, Room utilizza un thread dall'executor della transazione, avvia un loop di eventi al suo interno e invia le operazioni di sospensione del database in modo che siano tutte incapsulate nella coroutine della transazione. In genere, il thread della transazione è diverso da quello che avvia la transazione, ma in alcuni casi sono uguali. Per gestire questi casi di ricorsione,withTransaction()
è stato sottoposto a refactoring in modo da non fare più affidamento su un job di controllo ed eseguire invece il blocco della transazione in sospensione all'interno dirunBlocking
nel thread della transazione.
Versione 2.5.0
Versione 2.5.0
22 febbraio 2023
androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
e androidx.room:room-paging-rxjava3:2.5.0
vengono rilasciati. La versione 2.5.0 contiene questi commit.
Versione 2.5.0
11 gennaio 2023
androidx.room:room-*:2.5.0
viene rilasciato. La versione 2.5.0 contiene questi commit.
Modifiche importanti dalla versione 2.4.0
- Tutte le origini di
room-runtime
sono state convertite da Java a Kotlin. Tieni presente che potresti riscontrare problemi di incompatibilità con il codice sorgente se il codice è in Kotlin a causa della conversione della libreria in Kotlin. Ad esempio, una modifica incompatibile nota dell'origine è che ora inInvalidationTracker
dovrai dichiarareonInvalidate()
inObserver
per avere un parametro di tipoSet
e nonMutableSet
. Inoltre, alcuni metodi getter sono stati convertiti in proprietà che richiedono la sintassi di accesso alle proprietà nei file Kotlin. Segnala un bug se si verificano incompatibilità significative. - È stata aggiunta una nuova annotazione di scorciatoia,
@Upsert
, che tenta di inserire un'entità quando non esiste un conflitto di unicità o di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353) - Sono stati aggiunti nuovi elementi
room-paging-rxjava2
,room-paging-rxjava3
eroom-paging-guava
per la gestione della paginazione delle stanze. - Sono state aggiunte API per fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in
@MapInfo
(Icc4b5)
Versione 2.5.0-rc01
7 dicembre 2022
androidx.room:room-*:2.5.0-rc01
viene rilasciato. La versione 2.5.0-rc01 contiene questi commit.
- Questa release è identica a
2.5.0-beta02
.
Versione 2.5.0-beta02
9 novembre 2022
androidx.room:room-*:2.5.0-beta02
viene rilasciato. La versione 2.5.0-beta02 contiene questi commit.
Modifiche all'API
- Correggi varie API che passano gli argomenti di query da invariabili (
Array<Any?>
) a controvarianti (Array<out Any?>
) per adattarli al comportamento degli array di Java. (b/253531073)
Versione 2.5.0-beta01
5 ottobre 2022
androidx.room:room-*:2.5.0-beta01
viene rilasciato. La versione 2.5.0-beta01 contiene questi commit.
Modifiche all'API
- Limita la versione minima che supporta
@Upsert
all'API 16. Ciò è dovuto all'impossibilità di identificare un conflitto di vincoli della chiave primaria nelle API precedenti. (I5f67f, b/243039555)
Correzioni di bug
- Risolto un problema per cui le tabelle shadow venivano esportate in modo errato nei file
.json
dello schema, danneggiandoli. (I4f83b, b/246751839)
Versione 2.5.0-alpha03
24 agosto 2022
androidx.room:room-*:2.5.0-alpha03
viene rilasciato. La versione 2.5.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova annotazione di scorciatoia,
@Upsert
, che tenta di inserire un'entità quando non esiste un conflitto di unicità o di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)
Correzioni di bug
- Ora la stanza restituirà un
SQLiteConstraintException
anziché unIllegalStateException
durante un controllo del vincolo della chiave esterna della migrazione automatica. (I328dd) - Correzione di una modifica incompatibile del codice sorgente Kotlin per i getter / le proprietà di
getOpenHelper
,getQueryExecutor
egetTransactionExecutor
. (Iad0ac)
Versione 2.5.0-alpha02
1° giugno 2022
androidx.room:room-*:2.5.0-alpha02
viene rilasciato. La versione 2.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- Sono stati aggiunti nuovi elementi
room-paging
room-paging-rxjava2
,room-paging-rxjava3
eroom-paging-guava
per il supporto nella paginazione delle stanze.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)
Modifiche all'API
- Tutto
room-runtime
è stato convertito da Java a Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)Nota:potresti riscontrare problemi di incompatibilità con il codice sorgente a causa della conversione della libreria in Kotlin. Se il codice era in Kotlin e chiamava la versione precedente di Room, la nuova versione dovrà gestire questi casi. Ad esempio, una modifica incompatibile nota dell'origine è che ora in
InvalidationTracker
dovrai dichiarareonInvalidate()
inObserver
per avere un parametro di tipoSet
e nonMutableSet
. - Sono state aggiunte API per fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in
@MapInfo
(Icc4b5) - Risolto un problema di compatibilità del codice sorgente per consentire nuovamente
@Ignore
nei getter delle proprietà. (Ifc2fb)
Correzioni di bug
- Algoritmo di risoluzione delle colonne duplicate. Ora Room tenterà di risolvere le colonne ambigue in una query con più mappe. In questo modo, le UNION con tabelle contenenti tabelle con lo stesso nome possono essere mappate correttamente a un oggetto dati del risultato. (I4b444, b/201306012, b/212279118)
Versione 2.5.0-alpha01
23 febbraio 2022
androidx.room:room-*:2.5.0-alpha01
viene rilasciato. La versione 2.5.0-alpha01 contiene questi commit.
Modifiche all'API
- Risolto un problema per cui l'utilizzo di
@IntDef
di Room non veniva applicato nelle sorgenti Kotlin. (I75f41, b/217951311) - È stato risolto un problema di compatibilità del codice sorgente per consentire nuovamente
@Query
nei getter delle proprietà. (I0a09b) - La classe room-common è stata convertita da Java a Kotlin. (I69c48, b/206858235)
Nota:potresti riscontrare problemi di incompatibilità con il codice sorgente perché alcune proprietà sono state spostate in oggetti companion durante la conversione della libreria in Kotlin. Se il codice era in Kotlin e chiamava la versione precedente di Room, la nuova versione avrà bisogno del suffisso ".Companion" per accedere a queste proprietà.
- È stata convertita la migrazione delle stanze da Java a Kotlin. (I2724b, b/206858622)
- Sono stati convertiti i file correlati a
paging
inroom-runtime
da Java a Kotlin. (I82fc8, b/206859668) - È stata aggiunta un'API per il blocco e l'utilizzo multi-processo a livello di FrameworkSQLite*, per proteggere la creazione e le migrazioni del database multi-processo la prima volta. (Ied267, b/193182592)
Correzioni di bug
- È stato aggiunto il supporto per le proprietà interne nei file sorgente Kotlin.
Si tratta di un lieve cambiamento di comportamento in Room, che utilizzerà il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza veniva utilizzato il nome JVM della funzione, che è diverso per le funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per associare i getter/setter alle proprietà private, verifica il codice generato dopo l'aggiornamento (If6531, b/205289020)
Versione 2.4.3
Versione 2.4.3
27 luglio 2022
androidx.room:room-*:2.4.3
viene rilasciato. La versione 2.4.3 contiene questi commit.
Correzioni di bug
- È stato risolto un problema che causava la mancata rilevazione da parte di Room delle funzioni di sospensione in Kotlin 1.7 (b/236612358)
Versione 2.4.2
Versione 2.4.2
23 febbraio 2022
androidx.room:room-*:2.4.2
viene rilasciato. La versione 2.4.2 contiene questi commit.
Correzioni di bug
- È stato corretto un problema di generazione di codice per una funzione di sospensione
@Transaction
Dao con un corpo che genera un metodo di interfaccia predefinito a causa della compilazione con-Xjvm-default=all
o equivalente. (Ia4ce5) - Risoluzione di un bug in cui Room genera codice per un metodo di query sul tipo di ritorno
Array<ByteArray>
. (If086e, b/213789489)
Versione 2.4.1
Versione 2.4.1
12 gennaio 2022
androidx.room:room-*:2.4.1
viene rilasciato. La versione 2.4.1 contiene questi commit.
Correzioni di bug
- È stato aggiunto il supporto per le proprietà interne nei file sorgente Kotlin.
Si tratta di un lieve cambiamento di comportamento in Room, che utilizzerà il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza veniva utilizzato il nome JVM della funzione, che è diverso per le funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per associare i getter/setter alle proprietà private, verifica il codice generato dopo l'aggiornamento (If6531, b/205289020)
Versione 2.4.0
Versione 2.4.0
15 dicembre 2021
androidx.room:room-*:2.4.0
viene rilasciato. La versione 2.4.0 contiene questi commit.
Modifiche importanti dalla versione 2.3.0
- Migrazioni automatiche: ora Room offre un'API per la generazione automatica delle migrazioni, a condizione che gli schemi vengano esportati. Per comunicare a Room che deve generare una migrazione automatica, è possibile utilizzare una nuova proprietà
@Database#autoMigrations
per dichiarare le versioni da cui e verso cui eseguire la migrazione automatica. Quando Room ha bisogno di informazioni aggiuntive su rinominazioni o eliminazioni di tabelle e colonne, l'annotazione@AutoMigration
può dichiarare una classe di specifiche contenente questi input. Per ulteriori dettagli, consulta la documentazione di@AutoMigration
. - Iniezione di dipendenze nelle migrazioni automatiche:
@ProvidedAutoMigrationSpec
è una nuova API per dichiarare che unAutoMigrationSpec
verrà fornito in fase di esecuzione tramiteRoomDatabase.Builder#addAutoMigrationSpec()
. Ciò consente a un framework di Dependency Injection di fornire queste specifiche quando sono necessarie dipendenze complesse. - Supporto di Migration Test Helper per le migrazioni automatiche:
MigrationTestHelper
di Room è stato aggiornato per supportare le migrazioni automatiche fornendo una nuova API del costruttore che riceve la classe del database in test. In questo modo, l'helper può aggiungere automaticamente le migrazioni automatiche nello stesso modo duranterunMigrationsAndValidate
. - Supporto della paginazione delle stanze: è stato rilasciato
androidx.room:room-paging
, che fornisce il supporto nativo della paginazione 3.0 per le query Room che restituisconoandroidx.paging.PagingSource
. - Metodi di query relazionali: Room ora supporta i metodi
@Dao
per i tipi di ritorno delle mappe multiple, utili per le istruzioni JOIN. I tipi di multimap supportati sonoMap
,SparseArray
,LongSparseArray
, oltre aImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
di Guava.
Versione 2.4.0-rc01
1° dicembre 2021
androidx.room:room-*:2.4.0-rc01
viene rilasciato. La versione 2.4.0-rc01 contiene questi commit.
Nuove funzionalità
- Aggiorna la dipendenza di Room da KSP a
1.6.0-1.0.1
per supportare Kotlin 1.6
Versione 2.4.0-beta02
17 novembre 2021
androidx.room:room-*:2.4.0-beta02
viene rilasciato. La versione 2.4.0-beta02 contiene questi commit.
Nuove funzionalità
- Abbiamo aggiunto il supporto di SparseArray e LongSparseArray in @MapInfo. (Ic91a2b/138910317)
Correzioni di bug
- Abbiamo aggiunto un nuovo analizzatore TypeConverter che prende in considerazione le informazioni sulla nullabilità nei tipi. Poiché queste informazioni sono disponibili solo in KSP, vengono attivate per impostazione predefinita solo in KSP. Se causa problemi, puoi disattivarlo passando room.useNullAwareTypeAnalysis=false al processore di annotazioni. In questo caso, segnala un bug, poiché questo indicatore verrà rimosso in futuro. Con questo nuovo analizzatore TypeConverter, ti consigliamo di fornire solo TypeConverter di ricezione non null, poiché il nuovo analizzatore ha la possibilità di racchiuderli con un controllo null. Tieni presente che questo non ha alcun impatto sugli utenti che utilizzano KAPT o Java come elaboratori di annotazioni (a differenza di KSP) e non hanno informazioni sulla nullità nei tipi. (Ia88f9, b/193437407)
- È stato corretto un bug per cui la compilazione di Room non andava a buon fine con un errore SQL quando un'entità FTS dichiarava di utilizzare lo tokenizer ICU. (I00db9, b/201753224)
- È stato risolto un problema nelle migrazioni automatiche relativo a una nuova colonna aggiunta a un'entità incorporata tra le versioni. (I5fcb1b/193798291)
- Abbiamo risolto un problema relativo ai tipi di ritorno del metodo di query relazionale nelle query LEFT JOIN. Con queste modifiche, se è presente una mappatura 1-to-many, la raccolta restituita per una chiave non includerà l'oggetto valore non valido se non viene trovato nel cursore. Se non vengono trovati valori validi, una chiave verrà mappata a una raccolta vuota. (Id5552b/201946438)
- È stato risolto il problema di migrazione automatica per cui non è stato possibile applicare l'escape alle parole chiave SQLite nei nomi delle colonne. (Idbed4b/197133152)
Versione 2.4.0-beta01
13 ottobre 2021
androidx.room:room-*:2.4.0-beta01
viene rilasciato. La versione 2.4.0-beta01 contiene questi commit.
Correzioni di bug
- È stato risolto un problema relativo alle migrazioni automatiche che non aggiungevano nuove colonne quando un'altra tabella nella stessa migrazione automatica aveva anche una nuova colonna con lo stesso nome. (Ia5db5, b/200818663)
- L'implementazione di PagingSource generata dalla paginazione delle stanze ora utilizza
queryExecutor
passato tramiteRoomDatabase.Builder
, quindi può essere sostituita, anzichéDispatchers.IO
in precedenza. (Iae259)
Versione 2.4.0-alpha05
29 settembre 2021
androidx.room:room-*:2.4.0-alpha05
viene rilasciato. La versione 2.4.0-alpha05 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un convertitore di tipo integrato per UUID. (I671e8, b/73132006)
Modifiche all'API
È stata aggiunta una nuova proprietà all'annotazione TypeConverters per consentire agli sviluppatori di disattivare i convertitori Enum e UUID integrati. Per impostazione predefinita, questi convertitori sono attivi, ma puoi disattivarli per un determinato ambito o per l'intero database. Per maggiori dettagli, consulta la documentazione di TypeConverters. (36ae9e, b/195413406)
Supporto di chiavi/valori non POJO per i tipi di ritorno di Multimap nelle DAO tramite l'annotazione
@MapInfo
. (I4d704)
@MapInfo
sarà obbligatorio quando la colonna della chiave o del valore della mappa proviene da una singola colonna. Vedi l'esempio:
@MapInfo(valueColumn = "songCount")
@Query("""
SELECT *, COUNT(mSongId) as songCount
FROM Artist JOIN Song ON Artist.artistName = Song.artist
GROUP BY artistName
""")
fun getArtistAndSongCounts(): Map<Artist, Integer>
- Rendi
room-paging
un artefatto obbligatorio quando utilizzi Paging3 con Room. (Ieaffe)
Correzioni di bug
- È stato risolto un problema per cui i risultati delle query con più mappe non erano ordinati correttamente quando la query conteneva una clausola ORDER BY di una colonna della chiave della mappa. (I6b887)
Contributo esterno
- È stata aggiunta una nuova API per specificare l'ordine degli indici in @Index. Grazie a Nikita Zhelonkin. (I033fc)
Versione 2.4.0-alpha04
21 luglio 2021
androidx.room:room-*:2.4.0-alpha04
viene rilasciato. La versione 2.4.0-alpha04 contiene questi commit.
Nuove funzionalità
Room ora supporta i metodi
@Dao
per i tipi di ritorno delle mappe multiple, utili per le istruzioni JOIN. I tipi di multimap supportati sonoMap
, oltre aImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
di Guava.Di seguito sono riportati alcuni esempi di query su mappe multiple:
Mappa delle relazioni uno a uno
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
Mappa delle relazioni uno a molti (multimappa standard)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
Il risultato della mappa multipla può anche essere racchiuso nei tipi di ritorno asincroni supportati, come
LiveData
,Observable
di Rx o le coroutineFlow
.
Ricerca stanza
Viene rilasciato
androidx.room:room-paging
, che fornisce il supporto nativo di Paging 3.0 per le query Room che restituisconoandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
Questo elemento sostituisce l'implementazione di
androidx.paging.PagingSource
generata da Room con una basata sulle API Paging 3.0. La nuova implementazione di PagingSource analizza le chiavi in modo diverso, pertanto qualsiasi chiave fornita manualmente a PagingSource di Room deve tenere conto di questa modifica del comportamento, inclusa la chiave iniziale passata tramite il costruttore di Pager. Le pagine inizieranno a caricarsi daKey
, che sarà il primo elemento caricato.Key
Questo comportamento si discosta da quello esistente, in cuiLoadParams.Refresh.Key
viene considerato la posizione di scorrimento dell'utente e gli elementi vengono caricati sia prima che dopo la chiave.L'elemento è facoltativo e la disattivazione comporterà il ricorso al supporto esistente per la funzionalità Paging 3.0 introdotta in Room 2.3. Tuttavia, questo elemento non sarà facoltativo nelle release future per chi utilizza Room con la funzionalità di paginazione 3.0. Per attivare questa funzionalità, aggiungi il nuovo elemento room-paging al classpath. Se utilizzi Gradle, puoi aggiungere il seguente snippet a build.gradle:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Correzioni di bug
- È stato risolto un problema nelle migrazioni automatiche relativo alla gestione delle violazioni delle chiavi esterne. (b/190113935)
Versione 2.4.0-alpha03
16 giugno 2021
androidx.room:room-*:2.4.0-alpha03
viene rilasciato. La versione 2.4.0-alpha03 contiene questi commit.
Modifiche all'API
- Aggiorna
MigrationTestHelper
di Room per supportare le migrazioni automatiche fornendo una nuova API del costruttore che riceve la classe del database in test. In questo modo, l'helper può aggiungere automaticamente le migrazioni automatiche nello stesso modo duranterunMigrationsAndValidate
.
Correzioni di bug
È stato risolto un problema con la libreria nativa SQLite di Room per supportare i chip M1 di Apple. (b/174695268
È stato risolto un problema per cui Room non generava errori quando il tipo di ritorno di una funzione @Transaction era un flusso (I56ddd, b/190075899)
È stato risolto un problema nelle migrazioni automatiche relativo agli indici. b/177673291
Aggiornamenti delle dipendenze
- Il supporto di KSP per Room ora dipende da KSP
1.5.10-1.0.0-beta01
. (1ecb11, b/160322705)
Versione 2.4.0-alpha02
5 maggio 2021
androidx.room:room-*:2.4.0-alpha02
viene rilasciato. La versione 2.4.0-alpha02 contiene questi commit.
Modifiche all'API
@ProvidedAutoMigrationSpec
è una nuova API per dichiarare che unAutoMigrationSpec
verrà fornito in fase di esecuzione tramiteRoomDatabase.Builder#addAutoMigrationSpec()
. Ciò consente a un framework di Dependency Injection di fornire queste specifiche quando sono necessarie dipendenze complesse.
Correzioni di bug
- Risolto un problema con le migrazioni automatiche per cui i
@DatabaseView
non venivano ricreati correttamente.
Contributo esterno
- È stato risolto un problema in
JournalMode.TRUNCATE
di Room per cui a volte il callbackInvalidationTracker
veniva invocato in modo non valido, troppo tardi o per niente. Grazie aUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
Versione 2.4.0-alpha01
21 aprile 2021
androidx.room:room-*:2.4.0-alpha01
viene rilasciato. La versione 2.4.0-alpha01 contiene questi commit.
Nuove funzionalità
- Migrazioni automatiche: ora Room offre un'API per la generazione automatica delle migrazioni, a condizione che gli schemi vengano esportati. Per comunicare a Room che deve generare una migrazione automatica, è possibile utilizzare una nuova proprietà
@Database#autoMigrations
per dichiarare le versioni da cui e verso cui eseguire la migrazione automatica. Quando Room ha bisogno di informazioni aggiuntive su rinominazioni o eliminazioni di tabelle e colonne, l'annotazione@AutoMigration
può dichiarare una classe di specifiche contenente questi input. Per ulteriori dettagli, consulta la documentazione di@AutoMigration
.
Correzioni di bug
- Risolto un problema per cui
defaultValue
con parentesi aggiuntive veniva convalidato in modo errato dalla convalida dello schema di Room. b/182284899
Versione 2.3.0
Versione 2.3.0
21 aprile 2021
androidx.room:room-*:2.3.0
viene rilasciato. La versione 2.3.0 contiene questi commit.
Modifiche importanti dalla versione 2.2.0
- Supporto integrato per le enumerazioni: ora, per impostazione predefinita, Room utilizzerà un convertitore di tipo da enumerazione a stringa e viceversa se non ne viene fornito nessuno. Se esiste già un convertitore di tipo per un enum, Room darà la priorità al suo utilizzo rispetto a quello predefinito.
- Callback di query: Room ora offre un'API di callback generale RoomDatabase.QueryCallback per quando le query stanno per essere eseguite, che può essere utile per il logging nelle build di debug. Il numero di richiamata può essere impostato tramite
RoomDatabase.Builder#setQueryCallback()
. - Miglioramento predefinito: Room ora dispone di API per la creazione di un database utilizzando un database predefinito letto da uno stream di input. Ciò è utile ad esempio quando il database precompilato è compresso con gzip.
- Convertitori di tipo forniti: Room ora dispone di API per fornire istanze di convertitori di tipo in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore di tipo che verrà fornito a Room, utilizza la nuova annotazione @ProvidedTypeConverter.
- Supporto di RxJava3: ora Room supporta i tipi RxJava3. Come in RxJava2, puoi dichiarare metodi DAO il cui tipo di ritorno è Flowable, Single, Maybe e Completable. Inoltre, è disponibile un nuovo artifact
androidx.room:room-rxjava3
per supportare RxJava3. - Supporto di Paging 3.0: ora Room supporta la generazione di implementazioni per i metodi annotati
@Query
il cui tipo di ritorno èandroidx.paging.PagingSource
.
Versione 2.3.0-rc01
24 marzo 2021
androidx.room:room-*:2.3.0-rc01
viene rilasciato. La versione 2.3.0-rc01 contiene questi commit.
Correzioni di bug
- Risolto un problema che impediva l'utilizzo delle query di flusso di coroutine create da Room in un blocco
withTransaction
in sospensione. (I797bf)
Versione 2.3.0-beta03
10 marzo 2021
androidx.room:room-*:2.3.0-beta03
viene rilasciato. La versione 2.3.0-beta03 contiene questi commit.
Nuove funzionalità
- È stato aggiunto il supporto della compilazione incrementale per KSP. (I031c1, b/176453350)
Correzioni di bug
- È stato corretto un bug per cui la creazione di PagingSource nel thread principale poteva attivare un ANR. (I42b74, b/181221318)
- È stata corretta la visibilità di
@ExperimentalRoomApi
in modo che sia pubblica anziché privata per il pacchetto. (b/181356119)
Contributo esterno
- Consenti a Room di accettare un tipo di ritorno POJO in un metodo DAO annotato con
@Query
quando è annotato anche con@SkipQueryVerification
. Room farà del suo meglio per convertire il risultato della query nel tipo di ritorno POJO nello stesso modo in cui viene fatto per un metodo DAO@RawQuery
annotato. Grazie a "Markus Riegel | hey@marcorei.com". (I45acb)
Versione 2.3.0-beta02
18 febbraio 2021
androidx.room:room-*:2.3.0-beta02
viene rilasciato. La versione 2.3.0-beta02 contiene questi commit.
Nuove funzionalità
Ora Room supporta in via sperimentale l'elaborazione dei simboli Kotlin KSP.
KSP è un sostituto di KAPT per eseguire gli elaboratori di annotazioni in modo nativo sul compilatore Kotlin, riducendo notevolmente i tempi di compilazione.
Per utilizzare Room con KSP, puoi applicare il plug-in Gradle KSP e sostituire la configurazione
kapt
nel file di compilazione conksp
. Ad esempio, utilizzaksp 'androidx.room:room-compiler:2.3.0-beta02'
anzichékapt 'androidx.room:room-compiler:2.3.0-beta02'
. Per ulteriori dettagli, consulta la documentazione del KSP.Tieni presente che, poiché KSP è sperimentale, ti consigliamo di continuare a utilizzare KAPT per il codice di produzione. La riduzione dei tempi di compilazione è applicabile solo se non sono presenti altri processori che utilizzano KAPT. Per i problemi noti, consulta b/160322705.
Versione 2.3.0-beta01
27 gennaio 2021
androidx.room:room-*:2.3.0-beta01
viene rilasciato. La versione 2.3.0-beta01 contiene questi commit.
Nuove funzionalità
- Database chiudibili automaticamente: ora Room è in grado di chiudere i database a cui non viene eseguito l'accesso dopo un determinato periodo di tempo. Questa è una funzionalità sperimentale che può essere attivata chiamando
RoomDatabase.Builder#setAutoCloseTimeout()
. Questa funzionalità è utile per le applicazioni con più database.
Correzioni di bug
- È stato risolto un problema per cui i metodi Dao con più metodi
@Update
o@Delete
con strategie di conflitto diverse generavano codice con una sola delle strategie, ignorando in modo efficace quella definita. (/I0b90d, b/176138543)
Versione 2.3.0-alpha04
16 dicembre 2020
androidx.room:room-*:2.3.0-alpha04
viene rilasciato. La versione 2.3.0-alpha04 contiene questi commit.
Nuove funzionalità
- Room ora offre un'API di callback generale
RoomDatabase.QueryCallback
, per quando le query stanno per essere eseguite, che può essere utile per il logging nelle build di debug. Il numero di richiamata può essere impostato tramiteRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - Ora, per impostazione predefinita, Room utilizzerà un convertitore di tipo da Enum a Stringa e viceversa se non viene fornito alcuno. Se esiste già un convertitore di tipo per un enum, Room darà la priorità al suo utilizzo rispetto a quello predefinito. (b/73132006)
Problema noto
- Se per l'enum esiste già un convertitore di tipo unidirezionale per la lettura, Room potrebbe utilizzare accidentalmente il convertitore da stringa a enum integrato, che potrebbe non essere desiderato. Si tratta di un problema noto che può essere risolto creando un convertitore bidirezionale. Consulta: b/175707691
Correzioni di bug
- È stato risolto un problema per cui Room disattivava erroneamente l'elaborazione delle annotazioni incrementali nelle versioni JDK più recenti. (b/171387388)
- È stato risolto un problema relativo alla ricerca della classe generata da Room quando vengono utilizzati più caricatori di classi. Grazie per la correzione "Serendipity | 892449346@qq.com". (b/170141113)
- Risolto un problema per cui Room generava codice errato quando un
@Dao
Kotlin aveva una classe di base i cui generici sono primitivi nella JVM. (b/160258066)
Contributo esterno
- Ora Room utilizzerà per impostazione predefinita
beginTransactionNonExclusive
se la modalità WAL è attivata e l'API è pari o superiore a 16. Grazie ad "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)
Versione 2.3.0-alpha03
14 ottobre 2020
androidx.room:room-*:2.3.0-alpha03
viene rilasciato. La versione 2.3.0-alpha03 contiene questi commit.
Nuove funzionalità
Room ora dispone di API per fornire istanze di convertitori di tipo in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore di tipo da fornire a Room, utilizza la nuova annotazione
@ProvidedTypeConverter
. Grazie a "mzgreen yairobbe@gmail.com". (Ie4fa5, b/121067210)Room ora dispone di API per la creazione di un database utilizzando un database precompilato letto da uno stream di input. Ciò è utile ad esempio quando il database precompilato è compresso con gzip. Grazie ad "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060)
Modifiche all'API
È stato aggiunto il target mancante all'annotazione
@ForeignKey
per impedirne l'utilizzo al di fuori dell'annotazione@Entity
. (Iced1e)Il campo
mCallbacks
inRoomDatabase.java
è ora nascosto. (d576cb, b/76109329)
Correzioni di bug
Aggiornamento alla documentazione di TypeConverters per chiarire che TypeConverters può essere utilizzato solo per convertire colonne / campi e non righe. (I07c56, b/77307836)
Aggiornamento di DaoProcessor per correggere l'errore del compilatore in Dao con un supertipo generico con "primitivi" Kotlin. (Ice6bb, b/160258066)
Aggiornamento della documentazione dei metodi di aggiunta/rimozione degli osservatori per chiarire il threading (Ifd1d9, b/153948821)
È stato risolto un problema relativo alla convalida errata da parte di Room delle tabelle FTS che hanno dichiarato la colonna rowid. (d62ebc, b/145858914)
Contributi esterni
Risolvere i problemi relativi alle impostazioni internazionali di lettere maiuscole/minuscole relativi al turco (5746e3), b/68159494
Sostituisci
ConcurrentHashMap
all'interno diRoomDatabase
conCollections.synchronizedMap()
per evitare problemi su Android Lollipop (d1cfc7, b/162431855)Aggiungi un callback onOpenPrepackagedDatabase per quando viene copiato un database precompilato. (I1ba74, b/148934423)
Versione 2.3.0-alpha02
22 luglio 2020
androidx.room:room-*:2.3.0-alpha02
viene rilasciato. La versione 2.3.0-alpha02 contiene questi commit.
Nuove funzionalità
- Supporto di RxJava3: ora Room supporta i tipi RxJava3. Come in RxJava2, puoi dichiarare metodi DAO il cui tipo di ritorno è Flowable, Single, Maybe e Completable. Inoltre, è disponibile un nuovo artifact
androidx.room:room-rxjava3
per supportare RxJava3. (b/152427884)
Modifiche all'API
- La dichiarazione di un
@TypeConverter
nella classe Object di Kotlin è ora supportata. (b/151110764) - L'opzione di elaborazione delle annotazioni incrementali della stanza è ora attiva per impostazione predefinita. (b/112110217)
Versione 2.3.0-alpha01
10 giugno 2020
androidx.room:room-*:2.3.0-alpha01
viene rilasciato. La versione 2.3.0-alpha01 contiene questi commit.
Nuove funzionalità
Supporto di Paging 3.0: ora Room supporta la generazione di implementazioni per i metodi annotati
@Query
il cui tipo di ritorno èandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Modifiche all'API
@RewriteQueriesToDropUnusedColumns
è una nuova comoda annotazione che consente a Room di riscrivere la proiezione "*" in una query in modo che le colonne inutilizzate nel risultato vengano rimosse.- L'opzione del processore
room.expandProjection
è ora deprecata. Utilizza@RewriteQueriesToDropUnusedColumns
come sostituto delle query di ottimizzazione delle camere con proiezioni a stelle. Tieni presente che@RewriteQueriesToDropUnusedColumns
non sostituisce la soluzione per i conflitti di colonneroom.expandProjection
offerta in merito ai tipi di dati restituiti che contenevano campi@Embedded
.
Correzioni di bug
- Risolto un bug per cui Room non rilevava correttamente la versione JDK utilizzata per attivare l'elaborazione delle annotazioni incrementali. Grazie a Blaz Solar (me@blaz.solar) (b/155215201)
- Room ora incorpora la dipendenza ANTLR con l'elaboratore di annotazioni per evitare conflitti di versione con altri elaboratori che utilizzano anche ANTLR. (b/150106190)
Versione 2.2.6
Versione 2.2.6
16 dicembre 2020
androidx.room:room-*:2.2.6
viene rilasciato. La versione 2.2.6 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui Room disattivava erroneamente l'elaborazione delle annotazioni incrementali nelle versioni JDK più recenti. (b/171387388)
Versione 2.2.5
Versione 2.2.5
18 marzo 2020
androidx.room:room-*:2.2.5
viene rilasciato. La versione 2.2.5 contiene questi commit.
Correzioni di bug
- Rendi
MultiInstanceInvalidationService
directBootAware. Grazie a "Mygod contact-git@mygod.be" (b/148240967) - È stato risolto un bug che causava un arresto anomalo quando l'invalidazione multi-istanza era attivata e il database conteneva un'entità FTS. (b/148969394)
- È stato risolto un problema relativo al caricamento delle librerie native SQLite nell'elaboratore di annotazioni Room che causava l'arresto anomalo del compilatore a causa di compilazioni parallele. (b/146217083)
Versione 2.2.4
Versione 2.2.4
19 febbraio 2020
Vengono rilasciati androidx.room:room-common:2.2.4
, androidx.room:room-compiler:2.2.4
, androidx.room:room-guava:2.2.4
, androidx.room:room-ktx:2.2.4
, androidx.room:room-migration:2.2.4
, androidx.room:room-runtime:2.2.4
, androidx.room:room-rxjava2:2.2.4
e androidx.room:room-testing:2.2.4
. La versione 2.2.4 contiene questi commit.
Correzioni di bug
- Risolto un problema relativo alla sospensione delle transazioni che causavano un deadlock se la coroutine veniva annullata rapidamente prima dell'inizio effettivo della transazione. (b/148181325)
- È stato risolto un problema relativo all'utilizzo errato di @Generated durante la compilazione con JDK 9. (b/146538330)
- Risolto un problema per cui Room generava codice errato quando un'interfaccia DAO in Kotlin aveva una funzione concreta. (b/146825845)
Versione 2.2.3
Versione 2.2.3
18 dicembre 2019
androidx.room:room-*:2.2.3
viene rilasciato. La versione 2.2.3 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui Room non riusciva a convalidare un database che non aveva subito alcuna migrazione e conteneva un hash precedente con indici nello schema. (b/139306173)
Versione 2.2.2
Versione 2.2.2
20 novembre 2019
androidx.room:room-*:2.2.2
viene rilasciato. La versione 2.2.2 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui la raccolta di una relazione uno a uno con più di 999 righe causava il ritorno di elementi correlati null da parte di Room. (b/143105450)
Versione 2.2.1
Versione 2.2.1
23 ottobre 2019
androidx.room:room-*:2.2.1
viene rilasciato. La versione 2.2.1 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui Room avvisava erroneamente di
CURSOR_MISMATCH
con l'opzione del compilatoreexpandProjection
attivata. (b/140759491) - È stato aggiunto un meccanismo di ripetizione per la gestione della libreria nativa mancante utilizzata per la verifica delle query in fase di compilazione.
Versione 2.2.0
Versione 2.2.0
9 ottobre 2019
androidx.room:room-*:2.2.0
viene rilasciato. La versione 2.2.0 contiene questi commit.
Modifiche importanti dalla versione 2.1.0
- Database precompilato: ora sono disponibili due nuove API in
RoomDatabase.Builder
per creare unRoomDatabase
a partire da un file di database già compilato.createFromAsset()
è per quando il file del database precompilato si trova nella cartella delle risorse dell'APK, mentrecreateFromFile()
è per quando il file si trova in una posizione arbitraria. L'utilizzo di queste API cambia il comportamento delle migrazioni distruttive in modo che, durante una migrazione di riserva, Room provi a copiare di nuovo il database precompilato, se disponibile, altrimenti esegue il fallback all'eliminazione e alla ricostituzione di tutte le tabelle. b/62185732 - Valori predefiniti dello schema:
@ColumnInfo
ora ha una nuova proprietàdefaultValue
che può essere utilizzata per specificare il valore predefinito di una colonna. I valori predefiniti fanno parte dello schema di un database e, se specificati, verranno convalidati durante le migrazioni. b/64088772 - Relazioni many-to-many:
@Relation
ora ha una nuova proprietàassociateBy
, che accetta una nuova annotazione@Junction
, utilizzata per dichiarare una relazione che deve essere soddisfatta tramite una tabella di congiunzione (nota anche come tabella di join). b/69201917 - Relazioni uno a uno: la limitazione nei campi POJO annotati con
@Relation
come di tipoList
oSet
è stata rimossa, consentendo così di rappresentare le relazioni con un solo valore. b/62905145 - Entità target: le annotazioni DAO
@Insert
,@Update
e@Delete
ora hanno una nuova proprietàtargetEntity
che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. In questo modo, i parametri di questi metodi DAO possono essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506 - Flusso di coroutine: ora i metodi DAO
@Query
possono avere tipo di ritornoFlow<T>
. Il flusso restituito emette nuovamente un nuovo insieme di valori se le tabelle di osservazione nella query vengono invalidate. Dichiarare una funzione DAO con un tipo di valore restituitoChannel<T>
è un errore. Room ti incoraggia invece a utilizzareFlow
e poi le funzioni adiacenti per convertireFlow
inChannel
. b/130428884 - Gradle Incremental Annotation Processor: Room ora è un processore di annotazioni isolante di Gradle e l'incrementabilità può essere attivata tramite l'opzione del processore
room.incremental
. Per ulteriori informazioni, consulta Opzioni del compilatore Room. In caso di problemi, segnala un bug qui. Abbiamo in programma di attivare l'incrementabilità per impostazione predefinita in una versione stabile futura. b/112110217 - Proiezioni espandenti: è stata aggiunta una nuova opzione sperimentale del compilatore
room.expandProjection
che consente a Room di riscrivere una query con una proiezione a stella in modo che contenga solo le colonne del tipo POJO restituito. Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. Room riscriverà quindi la query inSELECT id, title FROM Song
in modo da recuperare l'insieme minimo di colonne per soddisfare il tipo di ritorno. In questo modo viene eliminato l'CURSOR_MISMATCH
avviso visualizzato quando la query restituisce colonne aggiuntive che non corrispondono a nessun campo nel tipo POJO restituito.
Versione 2.2.0-rc01
5 settembre 2019
androidx.room:room:2.2.0-rc01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Nessuna modifica pubblica dalla Sala 2.2.0-beta01
.
Versione 2.2.0-beta01
22 agosto 2019
androidx.room:room-*:2.2.0-beta01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato corretto un bug per cui una query di flusso di coroutine smetteva di riemettere nuovi valori dopo un determinato periodo di tempo. (b/139175786)
- È stato corretto un bug per cui Room non accettava un codice hash dello schema legacy durante l'apertura di un database di cui non era stata eseguita la migrazione da Room 1.0, causando un arresto anomalo in fase di esecuzione a causa di uno schema non valido. (b/139306173)
Versione 2.2.0-alpha02
7 agosto 2019
androidx.room:room-*:2.2.0-alpha02
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Flusso di coroutine: ora i metodi DAO
@Query
possono avere tipo di ritornoFlow<T>
. Il flusso restituito emette nuovamente un nuovo insieme di valori se le tabelle di osservazione nella query vengono invalidate. Dichiarare una funzione DAO con un tipo di valore restituitoChannel<T>
è un errore. Room ti incoraggia invece a utilizzareFlow
e poi le funzioni adiacenti per convertireFlow
inChannel
. b/130428884 - Proiezioni espandenti: è stata aggiunta una nuova opzione sperimentale del compilatore
room.expandProjection
che consente a Room di riscrivere una query con una proiezione a stella in modo che contenga solo le colonne del tipo POJO restituito. Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. Room riscriverà quindi la query inSELECT id, title FROM Song
in modo da recuperare l'insieme minimo di colonne per soddisfare il tipo di ritorno. In questo modo viene eliminato l'CURSOR_MISMATCH
avviso visualizzato quando la query restituisce colonne aggiuntive che non corrispondono a nessun campo nel tipo POJO restituito. onDestructiveMigrate
è una nuova API di callback aggiunta aRoomDatabase.Callback
per quando Room esegue la migrazione distruttiva di un database. b/79962330
Correzioni di bug
- È stato corretto un bug per cui Room generava codice errato utilizzando un metodo come settatore di campo quando il campo è protetto. b/136194628
- È stato corretto un bug che causava l'emissione di un NPE da parte di InvalidationTracker in un secondo processo quando l'invalidazione multi-istanza era attivata e il servizio di invalidazione veniva interrotto. b/137454915
- È stato risolto un bug per cui Room non identificava correttamente il tipo di ritorno di una funzione di sospensione ereditata annotata con
@RawQuery
. b/137878827 - È stato aggiornato il codice generato per
@Relation
quando la chiave di collegamento è di tipo BLOB in modo da utilizzare unByteBuffer
paragonabile. b/137881998 - È stato corretto un bug per cui Room segnalava l'assenza di setter nei POJO utilizzati come parametri di entità parziali di
@Insert
,@Update
e@Delete
. b/138664463 - È stato corretto un bug per cui Room segnalava l'assenza di getter e setter per una colonna ignorata tramite
@Entity
quando la classe dell'entità veniva utilizzata in determinati metodi DAO. b/138238182 - È stato corretto un bug per cui Room non convertiva correttamente gli argomenti di binding denominati in argomenti posizionali, causando un'eccezione di runtime durante l'esecuzione di una query con parametri riutilizzati. b/137254857
Versione 2.2.0-alpha01
10 luglio 2019
Nuove funzionalità
- Database precompilato: ora sono disponibili due nuove API in
RoomDatabase.Builder
per creare unRoomDatabase
a partire da un file di database già compilato.createFromAsset()
è per quando il file del database precompilato si trova nella cartella delle risorse dell'APK, mentrecreateFromFile()
è per quando il file si trova in una posizione arbitraria. L'utilizzo di queste API cambia il comportamento delle migrazioni distruttive in modo che, durante una migrazione di riserva, Room provi a copiare di nuovo il database precompilato, se disponibile, altrimenti esegue il fallback all'eliminazione e alla ricostituzione di tutte le tabelle. b/62185732 - Valori predefiniti dello schema:
@ColumnInfo
ora ha una nuova proprietàdefaultValue
che può essere utilizzata per specificare il valore predefinito di una colonna. I valori predefiniti fanno parte dello schema di un database e, se specificati, verranno convalidati durante le migrazioni. b/64088772Nota:se lo schema del database contiene già valori predefiniti, ad esempio quelli aggiunti tramite
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, e decidi di definire valori predefiniti tramite@ColumnInfo
per le stesse colonne, potrebbe essere necessario eseguire una migrazione per convalidare i valori predefiniti non considerati. Per ulteriori informazioni, consulta la sezione Migrazioni delle stanze. - Relazioni many-to-many:
@Relation
ora ha una nuova proprietàassociateBy
, che accetta una nuova annotazione@Junction
, utilizzata per dichiarare una relazione che deve essere soddisfatta tramite una tabella di congiunzione (nota anche come tabella di join). b/69201917 - Relazioni uno a uno: la limitazione nei campi POJO annotati con
@Relation
come di tipoList
oSet
è stata rimossa, consentendo così di rappresentare le relazioni con un solo valore. b/62905145 - Entità target: le annotazioni DAO
@Insert
,@Update
e@Delete
ora hanno una nuova proprietàtargetEntity
che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. In questo modo, i parametri di questi metodi DAO possono essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506 - Gradle Incremental Annotation Processor: Room ora è un processore di annotazioni isolante di Gradle e l'incrementabilità può essere attivata tramite l'opzione del processore
room.incremental
. Per ulteriori informazioni, consulta Opzioni del compilatore Room. In caso di problemi, segnala un bug qui. Abbiamo in programma di attivare l'incrementabilità per impostazione predefinita in una versione stabile futura. b/112110217
Correzioni di bug
- Room non propagherà più
EmptySetResultException
al gestore degli errori globali quando lo stream Rx di una query è stato eliminato prima del completamento della query. b/130257475 - È stato corretto un bug per cui Room mostrava un messaggio di errore errato quando una funzione DAO sospesa annotata con
@RawQuery
non aveva un tipo di ritorno. b/134303897 - Room non genererà più adattatori DAO con tipi non elaborati. b/135747255
Versione 2.1.0
Versione 2.1.0
13 giugno 2019
La versione 2.1.0 di Room viene rilasciata senza modifiche rispetto alla versione 2.1.0-rc01
. I commit inclusi nella versione sono disponibili qui.
Modifiche importanti dalla versione 2.0.0
- FTS: ora Room supporta le entità con una tabella di mappatura FTS3 o FTS4. Le classi annotate con
@Entity
ora possono essere ulteriormente annotate con@Fts3
o@Fts4
per dichiarare un corso con una tabella di ricerca full-text di mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione. - Visualizzazioni: ora Room supporta la dichiarazione di un'entità come query memorizzata, nota anche come visualizzazione, utilizzando l'annotazione
@DatabaseView
. - Coroutine: ora i metodi DAO possono essere funzioni di sospensione. Includi
room-ktx
nelle tue dipendenze per usufruire di questa funzionalità. L'elemento ktx fornisce anche la funzione di estensioneRoomDatabase.withTransaction
per eseguire transazioni di database all'interno di una coroutine. - Auto Value: ora Room supporta la dichiarazione di classi annotate con AutoValue come entità e POJO. Ora le annotazioni Room
@PrimaryKey
,@ColumnInfo
,@Embedded
e@Relation
possono essere dichiarate nei metodi astratti di una classe con annotazioni del valore automatico. Tieni presente che queste annotazioni devono essere accompagnate anche da@CopyAnnotations
affinché Room possa comprenderle correttamente. - Supporto aggiuntivo per l'esecuzione asincrona: i metodi DAO annotati con
@Insert
,@Delete
o@Update
, insieme a@Query
contenenti istruzioniINSERT
,DELETE
oUPDATE
, ora supportano i tipi di ritorno RxCompletable
,Single
,Maybe
e il tipo di ritorno di GuavaListenableFuture
e possono anche essere funzioni di sospensione. enableMultiInstanceInvalidation
è una nuova API inRoomDatabase.Builder
per attivare l'invalidazione in più istanze di RoomDatabase utilizzando lo stesso file di database.fallbackToDestructiveMigrationOnDowngrade
è una nuova API inRoomDatabase.Builder
per ricreare automaticamente il database in caso di downgrade.ignoredColumns
è una nuova API nell'annotazione@Entity
che può essere utilizzata per elencare i campi ignorati per nome.- Ora Room utilizzerà correttamente il costruttore principale di Kotlin nei classi dati, evitando la necessità di dichiarare le proprietà come
vars
.
Versione 2.1.0-rc01
29 maggio 2019
Correzioni di bug
- È stato corretto un errore di inizializzazione della stanza che potrebbe verificarsi a causa di una configurazione già impostata temp_store. b/132602198
- È stato corretto un avviso relativo all'utilizzo delle virgolette doppie per gli utenti con SQLite 3.27.0 e versioni successive. b/131712640
- È stato corretto un bug per cui InvalidationTracker causava un arresto anomalo quando si verificavano più controlli di convalida in parallelo. b/133457594
Versione 2.1.0-beta01
7 maggio 2019
androidx.room 2.1.0-beta01
viene rilasciato senza modifiche rispetto alla versione 2.1.0-alpha07. I commit inclusi in questa versione sono disponibili qui.
Versione 2.1.0-alpha07
25 aprile 2019
Modifiche all'API / al comportamento
- La funzione di estensione
RoomDatabase.withTransaction
è stata modificata in modo da non accettare più un blocco di funzioni con unCoroutineScope
come destinatario. In questo modo, viene evitato di saltare il wrappercoroutineScope { }
aggiuntivo necessario per eseguire le operazioni nel blocco della transazione in modo simultaneo.
Correzioni di bug
- È stato corretto un bug per cui Room non riusciva a trovare una corrispondenza per un TypeConverter per una funzione DAO Kotlin contenente un parametro di tipo Collection. b/122066791
Versione 2.1.0-alpha06
22 marzo 2019
Modifiche all'API / al comportamento
- Le query di transazioni asincrone ora vengono serializzate in modo che Room non utilizzi più di un thread per l'esecuzione delle transazioni di database.
È stato aggiunto
RoomDatabase.Builder.setTransactionExecutor(Executor)
per consentire la configurazione dell'executor da utilizzare per le transazioni. RoomDatabase.runInTransaction(Callable)
non avvolgerà più le eccezioni controllate in RuntimeException. b/128623748
Correzioni di bug
- È stato corretto un bug per cui il tracker di invalidazione smetteva di osservare una tabella di contenuti se venivano aggiunti osservatori sia per la tabella di contenuti sia per una tabella FTS di contenuti esterni. b/128508917
- È stata aggiornata la grammatica SQLite di Room in modo che corrisponda a quella di SQLite 3.24.0. b/110883668
Versione 2.1.0-alpha05
13 marzo 2019
Nuove funzionalità
- La funzione di estensione
RoomDatabase.withTransaction
ti consente di eseguire in sicurezza transazioni di database all'interno di una coroutine. Le funzioni di estensioni di Room e il supporto delle coroutine sono disponibili nell'artifactroom-ktx
. - I metodi DAO non astratti annotati con
@Transaction
ora possono essere funzioni di sospensione. b/120241587
Modifiche all'API / al comportamento
- L'elemento
room-coroutines
è stato rinominatoroom-ktx
seguendo la stessa convenzione di denominazione degli altri elementi androidx. beginTransaction
,setTransactionSuccessful
eendTransaction
inRoomDatabase
sono stati ritirati a favore dirunInTransaction
e della funzione di estensioneroom-ktx
withTransaction
.
Correzioni di bug
- È stato corretto un bug per cui gli argomenti dello tokenizer venivano ignorati se lo tokenizer utilizzato era SIMPLE. b/125427014
- È stato corretto un bug per cui Room non riusciva a identificare correttamente le funzioni di sospensione con parametri di tipo classe interna. b/123767877
- È stato corretto un bug per cui il metodo DAO
@Query
differito con istruzioniINSERT
,UPDATE
oDELETE
preparava anticipatamente la query nel thread principale. b/123695593 - Sono stati corretti vari bug che causavano la generazione di codice errato da parte di Room per determinate funzioni di sospensione. b/123466702 e b/123457323
- È stato corretto un bug per cui l'utilizzo obsoleto dei metodi non veniva eliminato correttamente nel codice generato. b/117602586
- È stata aggiornata la dipendenza di Room da androidx.sqlite alla versione 1.0.2, che contiene correzioni per la gestione corretta dei database danneggiati. b/124476912
Problemi noti
- Room 2.1.0-alpha05 dipende dall'elemento
kotlinx-metadata-jvm
che non è attualmente disponibile in Maven Central (KT-27991). Questa dipendenza può essere risolta aggiungendomaven { url "https://kotlin.bintray.com/kotlinx/" }
ai repository del progetto.
Versione 2.1.0-alpha04
25 gennaio 2019
Nuove funzionalità
- I metodi DAO annotati con
@Query
contenenti istruzioniINSERT
,UPDATE
oDELETE
ora possono restituire tipi asincroniSingle
,Mayble
,Completable
eListenableFuture
. Inoltre, possono essere funzioni di sospensione. b/120227284
Modifiche all'API / al comportamento
- Ora Room genera un errore se un metodo DAO non astratto annotato con
@Transaction
restituisce un tipo asincrono comeSingle
,Mayble
,Completable
,LiveData
oListenableFuture
. Poiché le transazioni sono limitate ai thread, al momento è impossibile per Room iniziare e terminare una transazione attorno a una funzione che potrebbe eseguire query in thread diversi. b/120109336 OnConflictStrategy.FAIL
eOnConflictStrategy.ROLLBACK
sono stati@Deprecated
perché non si comportano come previsto con le attuali associazioni SQLite di Android. b/117266738
Correzioni di bug
- È stato corretto un bug per cui Room non utilizzava correttamente il TypeConverter di un tipo di ritorno se il metodo DAO era una funzione di sospensione. b/122988159
- È stato corretto un bug per cui Room identificava erroneamente le funzioni di sospensione ereditate come non in sospensione. b/122902595
- È stato corretto un bug per cui Room generava codice errato quando un campo
@Embedded
si trovava in una classe principale e veniva utilizzato in più classi secondarie. b/121099048 - È stato risolto un problema per cui il database si bloccava quando venivano richiamate le funzioni di sospensione DAO tra un
beginTransaction()
e unendTransaction()
. b/120854786
Versione 2.1.0-alpha03
4 dicembre 2018
Modifiche all'API
- L'attributo FTS
tokenizer
in@Fts3
/@Fts4
ora accetta una stringa anziché un'enumerazione. In questo modo, Room può utilizzare tokenizzatori personalizzati. I tokenizzatori integrati sono ancora definiti inFtsOptions
come costanti di stringa. b/119234881
Nuove funzionalità
- Coroutine: ora i metodi DAO possono essere funzioni di sospensione. Per supportare le funzioni di sospensione in Room, è stato rilasciato un nuovo artifact,
room-coroutines
. b/69474692 - I metodi DAO annotati con
@Insert
,@Delete
o@Update
ora supportanoListenableFuture
come tipo di ritorno. b/119418331
Correzioni di bug
- È stato corretto un bug per cui Room tentava erroneamente di trovare un costruttore con colonne nella proprietà
ignoredColumns
di@Entity
. b/119830714 - È stato corretto un bug per cui Room non contrassegnava i parametri del metodo DAO come finali nell'implementazione generata. b/118015483
- È stato corretto un bug per cui il processore di Room si arrestava in modo anomalo durante la segnalazione di un errore in una query con simboli speciali. b/119520136
- È stato corretto un bug per cui Room rifiutava altre implementazioni di
Collection
come argomenti di un'espressioneIN
. b/119884035 - È stato corretto un bug per cui il LiveData restituito da Room veniva sottoposto a garbage collection quando veniva osservato per sempre, causando la mancata emissione di nuovi dati. b/74477406
- È stato aggiornato il blocco di chiusura di
RoomDatabase
per ridurre le contese per i blocchi. b/117900450
Versione 2.1.0-alpha02
30 ottobre 2018
Nuove funzionalità
- È stato aggiunto il supporto per fare riferimento a un
@DatabaseView
in un@Relation
. b/117680932
Correzioni di bug
- È stato corretto un bug per cui Room eseguiva I/O su disco nel thread principale durante l'iscrizione e lo smaltimento da un tipo di ritorno Rx. b/117201279
- È stato corretto un bug per cui Room non riusciva a trovare un convertitore di tipo appropriato per un campo in una classe di entità Kotlin. b/111404868
- È stato corretto un bug per cui Room generava codice errato per un'implementazione dell'interfaccia
DAO
contenente un metodo predefinito Kotlin senza argomenti. b/117527454 - È stato aggiornato l'analizzatore della sintassi SQLite di Room per risolvere un problema di prestazioni che causava tempi di compilazione lunghi. b/117401230
Versione 2.1.0-alpha01
8 ottobre 2018
Nuove funzionalità
- FTS: ora Room supporta le entità con una tabella di mappatura FTS3 o FTS4. Le classi annotate con
@Entity
ora possono essere ulteriormente annotate con@Fts3
o@Fts4
per dichiarare una classe con una tabella di ricerca full-text di mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione. b/62356416 - Visualizzazioni: ora Room supporta la dichiarazione di una classe come query memorizzata, nota anche come visualizzazione, utilizzando l'annotazione @DatabaseView. b/67033276
- Auto Value: ora Room supporta la dichiarazione di classi annotate AutoValue come entità e POJO. Ora le annotazioni Room
@PrimaryKey
,@ColumnInfo
,@Embedded
e@Relation
possono essere dichiarate nei metodi astratti di una classe con annotazione del valore automatico. Tieni presente che queste annotazioni devono essere accompagnate anche da@CopyAnnotations
affinché Room le comprenda correttamente. b/62408420 - Supporto aggiuntivo per i tipi di reso Rx: i metodi DAO annotati con
@Insert
,@Delete
o@Update
ora supportano i tipi di reso RxCompletable
,Single<T>
eMaybe<T>
. b/63317956 - Tipi immutabili con
@Relation
: in precedenza Room richiedeva che i campi annotati con@Relation
fossero impostabili, ma ora possono essere parametri del costruttore. enableMultiInstanceInvalidation
: è una nuova API inRoomDatabase.Builder
che consente di attivare l'invalidazione in più istanze di RoomDatabase che utilizzano lo stesso file di database. Questo meccanismo di annullamento convalida multi-istanza funziona anche in più processi. b/62334005fallbackToDestructiveMigrationOnDowngrade
: è una nuova API inRoomDatabase.Builder
per ricreare automaticamente il database in caso di downgrade. b/110416954ignoredColumns
: è una nuova API nell'annotazione@Entity
che può essere utilizzata per elencare i campi ignorati per nome. Utile per ignorare i campi ereditati in un'entità. b/63522075
Modifiche all'API / al comportamento
mCallback
emDatabase
inRoomDatabase
ora sono@Deprecated
e verranno rimossi nella prossima versione principale di Room. b/76109329
Correzioni di bug
- Sono stati risolti due problemi relativi al recupero da un database danneggiato o da una migrazione errata durante l'inizializzazione di Room. b/111504749 e b/111519144
- Ora Room utilizzerà correttamente il costruttore principale di Kotlin nei classi dati, evitando la necessità di dichiarare i campi come
vars
. b/105769985
Versione 2.0.0
Versione 2.0.0
1° ottobre 2018
androidx.room 2.0.0
viene rilasciato senza modifiche rispetto alla versione 2.0.0-rc01.
Versione 2.0.0-rc01
20 settembre 2018
androidx.room 2.0.0-rc01
viene rilasciato senza modifiche rispetto alla versione 2.0.0-beta01.
Versione 2.0.0-beta01
2 luglio 2018
Modifiche all'API / al comportamento
- È stato aggiunto
RoomDatabase.Builder.setQueryExecutor()
per consentire la personalizzazione della posizione in cui vengono eseguite le query - È stato aggiunto il supporto di RxJava2
Observable
- Le implementazioni di DAO e database generate sono ora definitive
Correzioni di bug
- Specifica il nome della classe/del campo nell'errore "Impossibile trovare il getter per il campo" b/73334503
- È stata corretta la compatibilità con le versioni precedenti di Room di RoomOpenHelper b/110197391
Dipendenze precedenti ad AndroidX
Per le versioni precedenti ad AndroidX di Room, includi queste dipendenze:
dependencies {
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
// optional - RxJava support for Room
implementation "android.arch.persistence.room:rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "android.arch.persistence.room:guava:$room_version"
// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
}
Versione 1.1.1
Versione 1.1.1
19 giugno 2018
La camera 1.1.1
è identica alla camera 1.1.1-rc1
.
Versione 1.1.1-rc1
16 maggio 2018
Consigliamo vivamente di utilizzare Room 1.1.1-rc1
anziché 1.1.0
se utilizzi le migrazioni.
È stato corretto un bug per cui Room non gestiva correttamente l'inizializzazione post-migrazione b/79362399
Versione 1.1.0
Versione 1.1.0-beta3
19 aprile 2018
Correzioni di bug
- Correzione dell'errore di compilazione quando un POJO Kotlin fa riferimento a un'entità di relazione definita in Java b/78199923
Versione 1.1.0-beta2
5 aprile 2018
Correzioni di bug
È stato corretto un bug critico nelle implementazioni di Rx
Single
eMaybe
di Room, che riutilizzava la query in anticipo, causando problemi se aggiungevi più di un osservatore alle istanzeSingle
oMaybe
restituite. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] non
VACUUM
il database se viene chiamato all'interno di una transazione. b/77235565
Versione 1.1.0-beta1
21 marzo 2018
Modifiche all'API
- In base al feedback della revisione dell'API,
@RawQuery
non accetta più il passaggio di unString
come parametro di query. Devi utilizzare [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (vedi [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] per creare facilmente un'istanza di [SupportSQLiteQuery][ref-SupportSQLiteQuery] con il supporto degli argomenti). - Il metodo [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] di RoomDatabase.Builder ora accetta
vararg int
anzichévararg Integer
.
Correzioni di bug
- Ora [RoomDatabase.clearAllTables][ref-clearAllTables] tenta di restituire spazio al sistema operativo impostando un checkpoint WAL e
VACUUM
ing il database. - [
@RawQuery
][ref-RawQuery] ora accetta qualsiasi Pojo per la proprietàobservedEntities
, a condizione che il Pojo faccia riferimento a una o più entità tramite i suoi campiEmbedded
oRelation
. b/74041772 - Paginazione: l'implementazione di DataSource di Room ora gestisce correttamente le dipendenze multi-tabella (ad esempio relazioni e join). In precedenza, non riuscivano ad attivare nuovi risultati o non riuscivano a compilare. b/74128314
Versione 1.1.0-alpha1
22 gennaio 2018
Nuove funzionalità
RawQuery
: questa nuova API consente ai metodi@Dao
di ricevere il codice SQL come parametro di query b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: questa nuova API inRoomDatabase.Builder
consente un controllo più granulare sulle versioni iniziali dello schema da cui sono consentite le migrazioni distruttive (rispetto a fallbackToDestructiveMigration) b/64989640- Room ora supporta solo le API di paginazione più recenti (alpha-4 e versioni successive), pertanto non supporta più quelle ritirate
LivePagedListProvider
. Per utilizzare la nuova versione alpha di Room, devi utilizzare la funzionalità di paginazionealpha-4
o successiva e passare daLivePagedListProvider
aLivePagedListBuilder
, se non l'hai ancora fatto.
Correzioni di bug
- Supporto migliorato per i tipi Kapt di Kotlin. b/69164099
- L'ordine dei campi non invalida più lo schema. b/64290754