Room
Ultimo aggiornamento | Release stabile | Candidato per la release | Versione beta | Alpha Release |
---|---|---|---|---|
16 luglio 2025 | 2.7.2 | - | - | 2.8.0-alpha01 |
Dichiarazione di dipendenze
Per aggiungere una dipendenza da Room, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.
Le dipendenze per Room includono test delle migrazioni di Room e Room RxJava
Aggiungi le dipendenze per gli artefatti che ti servono nel file build.gradle
per
la tua app o il tuo modulo:
Kotlin
dependencies { val room_version = "2.7.2" 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.7.2" 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 avvio rapido di KSP.
Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di KTX.
Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze di build.
Facoltativamente, per le librerie non Android (ovvero i 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 elaborazione delle 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 il processore di annotazioni incrementale di Gradle. Il valore predefinito è true .
|
room.generateKotlin |
boolean
Genera file sorgente Kotlin anziché Java. Richiede KSP. Il valore predefinito è true a partire dalla versione 2.7.0.
Per ulteriori dettagli, consulta le note relative alla versione 2.6.0, quando è stata introdotta.
|
Utilizzare il plug-in Gradle di 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 build 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 build 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 per generare file di schema in cartelle con varianti, ad esempio
schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Questi file devono essere
inseriti 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 di Room che ha aggiunto il supporto per
la configurazione di questa opzione utilizzando l'estensione room
. Se la tua versione è precedente
o se l'opzione non è ancora supportata, puoi utilizzare
le opzioni del processore 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 di Room o se l'opzione che ti interessa non è supportata dalla tua versione del plug-in, puoi configurare Room utilizzando le opzioni del processore di annotazioni, come descritto in Aggiungere dipendenze di build. Il modo in cui specificare le opzioni di annotazione dipende dall'utilizzo di 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 conosca questa directory quando esegue controlli aggiornati.
Migrate your Room database
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 libreria. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa libreria. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Versione 2.8
Versione 2.8.0-alpha01
16 luglio 2025
androidx.room:room-*:2.8.0-alpha01
viene ritirata. La versione 2.8.0-alpha01 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un nuovo artefatto
androidx.room:room-sqlite-wrapper
che contiene API per ottenere un wrapperSupportSQLiteDatabase
diRoomDatabase
con unSQLiteDriver
configurato. Per ottenere il wrapper, utilizza la nuova funzione di estensioneRoomDatabase.getSupportWrapper()
. Si tratta di un artefatto di compatibilità per mantenere gli utilizzi diSupportSQLiteDatabase
, in genere ottenuti daRoomDatabase.openHelper.writableDatabase
, anche se il database Room è configurato con unSQLiteDriver
. Questo wrapper è utile per la migrazione incrementale di codebase che vogliono adottareSQLiteDriver
, ma hanno un utilizzo esteso delle APISupportSQLite
e vogliono sfruttareBundledSQLiteDriver
. (Icf6ac) - Aggiungi target KMP per Watch OS e TV OS (I228f6, b/394238801)
Correzioni di bug
- Correzione di un deadlock che poteva verificarsi occasionalmente quando si utilizzavano le transazioni sospese e
AndroidSQLiteDriver
. (b/415006268)
Versione 2.7
Versione 2.7.2
18 giugno 2025
androidx.room:room-*:2.7.2
viene ritirata. La versione 2.7.2 contiene questi commit.
Correzioni di bug
- Risolvi un problema per cui i valori delle annotazioni venivano letti in modo errato durante l'elaborazione delle origini native con KSP, a volte mancavano le esportazioni dello schema. (b/416549580)
- Correzione di un bug per cui i commenti iniziali in un SQL causavano l'esecuzione delle istruzioni come se fossero query di sola lettura. (b/413061402)
- Risolvi un problema relativo alla mancata configurazione del plug-in Gradle di Room a causa della directory dello schema vuota. (b/417823384)
- Non viene più generato un
SQLiteException
quando l'ottenimento di una connessione richiede troppo tempo. Al suo posto, la libreria invia un messaggio di log. La registrazione anziché la generazione di errori funziona intorno ai loop di sospensione di iOS, causando l'errata interpretazione del timeout che si verifica nella coroutine Kotlin che acquisisce la connessione e impedisce quindi la generazione dell'eccezione quando un'app per iOS viene eseguita in background e ripresa in un secondo momento nel bel mezzo di un'operazione di database. (b/422448815)
Versione 2.7.1
23 aprile 2025
androidx.room:room-*:2.7.1
viene ritirata. La versione 2.7.1 contiene questi commit.
Correzioni di bug
- Correzione del bug
IndexOutOfBoundsException
durante la convalida del convertitore di tipi fornito. (b/409804755). - Supporto di
RoomDatabase.runInTransaction()
quando unSQLiteDriver
è configurato con Room. (b/408364828).
Versione 2.7.0
9 aprile 2025
androidx.room:room-*:2.7.0
viene ritirata. La versione 2.7.0 contiene questi commit.
Modifiche importanti dalla versione 2.6.0
- Supporto di Kotlin Multiplatform (KMP):in questa release, Room è stato sottoposto a refactoring per diventare una libreria Kotlin Multiplatform (KMP). Le piattaforme attualmente supportate sono Android, iOS, JVM (desktop), Mac nativo e Linux nativo. Per ulteriori informazioni su come iniziare a utilizzare Room KMP, consulta la documentazione ufficiale di Room KMP. Nell'ambito del supporto di KMP, Room può essere configurato anche con un
SQLiteDriver
. Per informazioni su come eseguire la migrazione di un'app esistente alle API Driver e a Room KMP, consulta la documentazione sulla migrazione. - Kotlin Code Generation on KSP è attivato per impostazione predefinita se l'elaborazione viene eseguita tramite KSP. Per i progetti solo KAPT o Java, Room genererà comunque origini Java.
- Kotlin 2.0 e KSP2:Room ora ha come target il linguaggio Kotlin 2.0 e richiederà che anche i progetti vengano compilati con Kotlin 2.0 e una versione del linguaggio equivalente o superiore. È stato aggiunto anche il supporto per KSP2, consigliato quando si utilizza Room con Kotlin 2.0 o versioni successive.
Versione 2.7.0-rc03
26 marzo 2025
androidx.room:room-*:2.7.0-rc03
viene ritirata. La versione 2.7.0-rc03 contiene questi commit.
Correzioni di bug
- Non viene più generata un'eccezione
InterruptedException
quando un thread viene interrotto durante l'esecuzione delle API di blocco delle stanze, incluse le funzioni DAO di blocco (b/400584611). - Reimplementa il pool di connessioni di Room nel tentativo di alleviare
SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection.
e problemi simili (b/380088809).
Versione 2.7.0-rc02
12 marzo 2025
androidx.room:room-*:2.7.0-rc02
viene ritirata. La versione 2.7.0-rc02 contiene questi commit.
Correzioni di bug
- Correzione delle migrazioni automatiche che gestiscono in modo errato una nuova colonna in una tabella FTS. (b/348227770, Ic53f3)
- Correzione di un arresto anomalo del compilatore di stanze dovuto a un
NullPointerException
durante l'elaborazione di origini non JVM tramite KSP. (b/396607230, I693c9) - Risolvi un problema per cui Room non invalidava le tabelle al termine dell'utilizzo della connessione writer. (b/340606803, I73ef6)
Versione 2.7.0-rc01
26 febbraio 2025
androidx.room:room-*:2.7.0-rc01
viene ritirata. La versione 2.7.0-rc01 contiene questi commit.
Correzioni di bug
- Risolvi un problema per cui Room non imposta
busy_timeout
nella connessione iniziale al database, il che comporta problemi diSQLException: Error code: 5, message: database is locked
(I93208, b/380088809). - È stato risolto un problema nel compilatore di Room che causava l'arresto anomalo del processore KSP durante l'elaborazione di set di origini nativi (come iOS) su Kotlin 2.1.x e KSP1 (I883b8, b/396607230).
Versione 2.7.0-beta01
12 febbraio 2025
androidx.room:room-*:2.7.0-beta01
viene ritirata. La versione 2.7.0-beta01 contiene questi commit.
Correzioni di bug
- Risolvi un problema con
RoomDatabase.inTransaction()
che apre un database chiuso quando non dovrebbe e dovrebbe restituire rapidamente false se il database è chiuso (b/325432967). - È stato corretto un arresto anomalo (
IllegalArgumentException: not a valid name
) nel compilatore di Room durante l'elaborazione delle funzioni DAO con classi inline / valore Kotlin (b/388299754). - Includi le regole Proguard nell'artefatto JVM di
room-runtime
in modo che il costruttore predefinito dell'implementazione del database generata non venga rimosso, poiché viene utilizzato dall'inizializzazione predefinita di Room che utilizza la reflection (b/392657750).
Versione 2.7.0-alpha13
29 gennaio 2025
androidx.room:room-*:2.7.0-alpha13
viene ritirata. La versione 2.7.0-alpha13 contiene questi commit.
Modifiche alle API
- Room ora ha come target il linguaggio Kotlin 2.0 e richiederà che i progetti vengano compilati anche con Kotlin 2.0 e una versione del linguaggio equivalente o superiore. (I8efb0, b/315461431, b/384600605)
Correzioni di bug
- Risolvi un problema nel builder di database Room KMP quando in Android veniva utilizzato un nome semplice anziché un percorso e il percorso risolto del file di database non si trovava nella directory dei dati dell'app. (I83315, b/377830104)
- Correzione di un problema relativo al plug-in Gradle per Room in cui la configurazione degli input e dell'output dello schema causava un problema nei progetti Android:
property 'inputDirectory' is final and cannot be changed any further.
(1dbb4c, b/376071291) - Aggiungi il supporto per KSP2 nel plug-in Gradle di Room, risolvendo un problema per cui la directory dello schema non veniva configurata correttamente dal plug-in. (Iec3c4, b/379159770)
Contributo esterno
- È stato risolto un problema relativo all'integrazione della paginazione di
Room
che causava salti dell'interfaccia utente quando la chiave iniziale da aggiornare era troppo vicina alla fine dell'elenco. Grazie a Eva. (I2abbe, b/389729367)
Versione 2.7.0-alpha12
11 dicembre 2024
androidx.room:room-*:2.7.0-alpha12
viene ritirata. La versione 2.7.0-alpha12 contiene questi commit.
Modifiche alle API
- Aggiungi l'API sperimentale
RoomDatabase.Builder.setInMemoryTrackingMode()
per configurare se Room utilizzerà 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 garantire che vengano ricreate, allineando il comportamento quando
allowDestructiveMigrationForAllTables
è ATTIVO (impostazione predefinita di KMP) con il comportamento esistente quando è DISATTIVATO. (0a3e83, b/381518941)
Versione 2.7.0-alpha11
30 ottobre 2024
androidx.room:room-*:2.7.0-alpha11
viene ritirata. La versione 2.7.0-alpha11 contiene questi commit.
Modifiche alle API
- Rivedi la firma del metodo
convertRows()
appena aggiunto per renderlo una funzione di sospensione che riceve unRawRoomQuery
per la ricerca di stanze. (Ie57b5, b/369136627)
Correzioni di bug
- È stato risolto il problema di cambio pagina della stanza per cui veniva generato un codice non valido quando si utilizzava
@Relation
insieme aPagingSource
.
Versione 2.7.0-alpha10
16 ottobre 2024
androidx.room:room-*:2.7.0-alpha10
viene ritirata. La versione 2.7.0-alpha10 contiene questi commit.
Modifiche alle API
- Crea una classe
ByteArrayWrapper
interna per supportare le relazioni conByteBuffer
in piattaforme non Android e non JVM. (I75543, b/367205685) - Aggiungi
SQLiteStatement.getColumnType()
insieme alle varie costanti dei risultatiSQLITE_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 ritirata. La versione 2.7.0-alpha09 contiene questi commit.
Correzioni di bug
- Risolvi 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 ritirata. La versione 2.7.0-alpha08 contiene questi commit.
Nuove funzionalità
- Gli artefatti
room-paging
sono stati migrati per essere compatibili con KMP. (Ib8756, b/339934824) - L'API
invalidationTrackerFlow()
è stata resa comune come API proprietaria comeInvalidationTracker.createFlow()
ed è ora disponibile per i set di origini non Android nei progetti KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)
Modifiche alle API
- Tutti gli avvisi e i messaggi di errore in Room che utilizzano la parola
Cursor
sono stati rimossi o sostituiti, in quantoCursor
non è più un termine generale accurato 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 di Room che causava un errore come "Cannot change attributes of configuration … after it has been locked for mutation" (Impossibile modificare gli attributi della configurazione… dopo che è stata bloccata 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 ritirata. La versione 2.7.0-alpha07 contiene questi commit.
Nuove funzionalità
- Il plug-in Gradle di Room ora aggiungerà 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 valore "actual" generato di
RoomDatabaseConstructor
a cui manca il modificatore "actual" nella funzioneinitialize
se questa funzione viene anche sostituita nella dichiarazione "expect". (359631627) - È stato risolto un problema per cui il valore "effettivo" generato di
RoomDatabaseConstructor
non corrispondeva alla visibilità della dichiarazione "previsto". (358138953)
Versione 2.7.0-alpha06
7 agosto 2024
androidx.room:room-*:2.7.0-alpha06
viene ritirata. La versione 2.7.0-alpha06 contiene questi commit.
Modifiche alle 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 riferimento a una funzione da generare, denominata instantiateImpl()
, non è più valida. Sono state 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 di b/316978491, b/338446862 e b/342905180
- Supporto di
@RawQuery
in Room KMP aggiungendo una nuova API chiamataRoomRawQuery
simile aSupportSQLiteQuery
in termini di conservazione della stringa SQL non elaborata e una funzione per associare gli argomenti a un'istruzione.@RawQuery
ora possono accettare unRoomRawQuery
come unico parametro. (Iea844, b/330586815) - Aggiungi un sovraccarico di
setQueryCallback()
che accetta unCoroutineContext
. (Id66ff, b/309996304) - È stato aggiunto il supporto per i target multipiattaforma Kotlin
linuxArm64
(I139d3, b/338268719)
Correzioni di bug
- Risolvi un problema per cui Room generava in modo errato una chiamata a
recursiveFetchArrayMap
in target non Android. (710c36, b/352482325) - Risolvi un problema per cui a volte Room genera un'eccezione relativa a "Timeout durante il tentativo di connessione" in un progetto KMP. (fa72d0, b/347737870)
- È stato risolto un problema nelle migrazioni automatiche che controllava le 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 ritirata. La versione 2.7.0-alpha05 contiene questi commit.
Modifiche alle API
SQLiteKt
è stato rinominato inSQLite
eBundledSQLiteKt
inBundledSQLite
. (I8b501)
Correzioni di bug
- È stato corretto un bug per cui un
RoomDatabase
si bloccava o restituiva un errore con timeout della connessione quando si utilizzavaAndroidSQLiteDriver
.
Versione 2.7.0-alpha04
12 giugno 2024
androidx.room:room-*:2.7.0-alpha04
viene ritirata. La versione 2.7.0-alpha04 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui il processore di annotazioni di Room generava codice KMP incompatibile quando in un DAO veniva definito un tipo restituito multi-mappa. (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 a causa del quale l'attivazione della chiusura automatica e dell'invalidazione di più istanze a volte causava un errore
ConcurrentModificationException
quando il database veniva chiuso automaticamente a causa dell'inattività.
Versione 2.7.0-alpha03
29 maggio 2024
androidx.room:room-*:2.7.0-alpha03
viene ritirata. La versione 2.7.0-alpha03 contiene questi commit.
Correzioni di bug
- Risoluzione di vari problemi relativi a Kotlin 2.0 e KSP 2.0. Tieni presente che il supporto di Kotlin 2.0 con 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 ritirata. La versione 2.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Risolti vari problemi di KSP.
Versione 2.7.0-alpha01
1° maggio 2024
androidx.room:room-*:2.7.0-alpha01
viene ritirata. 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). Sebbene ci sia ancora del lavoro da fare, questa release introduce una nuova versione di Room in cui la maggior parte delle funzionalità è stata "comunizzata" (resa multipiattaforma). Le piattaforme attualmente supportate sono Android, iOS, JVM (desktop), Mac nativo e Linux nativo. Le funzionalità mancanti nelle piattaforme appena supportate verranno completate nelle prossime release di Room.
Per ulteriori informazioni su come iniziare a utilizzare Room KMP, consulta la documentazione ufficiale di Room KMP.
- Kotlin Code Generation on KSP è attivato per impostazione predefinita se l'elaborazione viene eseguita tramite KSP. Per i progetti solo KAPT o Java, Room genererà comunque origini Java.
Modifiche alle API
- È stato aggiunto un overload di
Room.databaseBuilder()
che accetta un parametro lambda da utilizzare con una funzione generata da Room per evitare di utilizzare la reflection durante l'istanziamento dell'implementazioneRoomDatabase
generata. Esempio di utilizzo:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- È stata aggiunta al builder un'API per configurare una stanza con un
CoroutineContext
:RoomDatabase.Builder.setQueryCoroutineContext
. Tieni presente che unRoomDatabase
può essere configurato solo con executor che utilizzanosetQueryExecutor
o con un contesto di coroutine, ma non entrambi. - È stata aggiunta un'API per la configurazione di Room con un driver
SQLite
:RoomDatabase.Builder.setDriver()
. Per saperne di più sull'APISQLite
Driver, consulta la documentazione di SQLite KMP. - Sono state aggiunte API per l'accesso a
SQLiteConnection
sottostante dalle API del driver:RoomDatabase.useReaderConnection
eRoomDatabase.useWriterConnection
. - Ora diversi callback correlati a Varios Room hanno una versione di overload che riceve
SQLiteConnection
anzichéSupportSQLiteDatabase
. Questi sono pensati per 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 callback sono:Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- L'artefatto KTX
androidx.room:room-ktx
è stato unito aandroidx.room:room-runtime
insieme a tutte le sue API e ora è vuoto. Rimuovilo dall'elenco delle dipendenze.
Versione 2.6
Versione 2.6.1
29 novembre 2023
androidx.room:room-*:2.6.1
viene ritirata. 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 Double 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 generate dai caricamenti di
PagingSource
verranno ora propagate comeLoadStateUpdate
diLoadResult.Error
contenente Throwable. Questo stato di errore è osservabile tramitePagingDataAdapter.loadStateFlow(Views)
oLazyPagingItems.loadState(Compose)
. Tieni presente che questo segna un cambiamento comportamentale in cui in passato gli errori di caricamento venivano visualizzati come eccezione generata 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 ritirata. 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 ulteriori dettagli su come trasmettere le opzioni del processore 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 devono 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 restituiti di raccolta Nullable non sono più consentiti in Room per Kotlin CodeGen.
Avviso:potresti notare che i tuoi progetti sono più rigorosi in termini di nullabilità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, l'annullabilità degli argomenti di tipo è importante, mentre in Java viene per lo più ignorata. Ad esempio, supponiamo di avere un tipo restituito `Flow<foo\>` e che la tabella sia vuota. In Java CodeGen, questo non causerà problemi, ma in Kotlin CodeGen riceverai un errore. Per evitare questo problema, devi utilizzare `Flow<foo?\>`, supponendo che venga emesso un valore nullo. </foo?\></foo\>
- Il nuovo artefatto 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'input e all'output degli schemi tramite le opzioni del processore di annotazioni Gradle. Per maggiori dettagli, consulta le note di rilascio della versione 2.6.0-alpha02 di Room. - Le classi di valori nelle entità della stanza sono ora supportate per KSP. (4194095)
- I tipi restituiti di mappe nidificate 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 ritirata. 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 ritirata. La versione 2.6.0-beta01 contiene questi commit.
Correzioni di bug
- Gestione dell'eccezione
SQLite
del caso speciale durante l'inserimento/aggiornamento riscontrata quando viene generata l'eccezione2067 SQLITE_CONSTRAINT_UNIQUE
durante un inserimento/aggiornamento, l'inserimento/aggiornamento deve eseguire un aggiornamento. (If2849, b/243039555)
Versione 2.6.0-alpha03
9 agosto 2023
androidx.room:room-*:2.6.0-alpha03
viene ritirata. La versione 2.6.0-alpha03 contiene questi commit.
Nuove funzionalità
- I tipi restituiti di mappe nidificate nelle funzioni DAO sono ora supportati in Room. (I13f48, 203008711)
Modifiche alle API
- È stata creata una nuova annotazione di tipo chiamata
@MapColumn
per sostituire@MapInfo
, che ora è ritirata. Per ogni nome di colonna (keyColumnName
,valueColumnName
o entrambi) fornito in un'annotazione@MapInfo
, devi dichiarare un'annotazione@MapColumn
con solocolumnName
e utilizzare l'annotazione sull'argomento di tipo specifico a cui viene fatto riferimento (la chiave o il valore della mappa) nel tipo restituito della funzione DAO. Questo perché l'annotazione@MapColumn
viene utilizzata direttamente nell'argomento del 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 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ù fluide, ma è anche abbastanza flessibile da configurare manualmente gli schemi di tipi di build o di sapori, mantenendo comunque i vantaggi del plug-in (build riproducibili e memorizzabili nella cache). (I09d6f, b/278266663)
Correzioni di bug
- Correzione della potenziale vulnerabilità di perdita di memoria in
QueryInterceptorStatement
. (I193d1) - È stato corretto il comportamento errato nella funzione
QueryInterceptorDatabase execSQL()
. (Iefdc8)
Versione 2.6.0-alpha02
21 giu 2023
androidx.room:room-*:2.6.0-alpha02
viene ritirata. La versione 2.6.0-alpha02 contiene questi commit.
Plug-in Gradle Room
Questa nuova release contiene un nuovo artefatto per il plug-in Gradle di Room con ID androidx.room
, che risolve vari problemi esistenti in Room relativi all'inserimento e all'output di schemi tramite le opzioni del processore di annotazioni Gradle. Il plug-in Gradle di Room configura il progetto in modo che gli schemi generati utilizzati per le migrazioni automatiche e che sono 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 file di schema in cartelle con varianti, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Come di consueto, questi file vengono archiviati nel repository per essere utilizzati per la convalida e le migrazioni automatiche. Dopo la migrazione all'utilizzo del plug-in anziché delle opzioni del processore di annotazioni, i file di schema esistenti devono essere copiati nelle directory delle varianti generate create dal plug-in. Si tratta di un'operazione di migrazione una tantum che deve essere eseguita manualmente. La documentazione dello schema su developers.android.com verrà aggiornata in futuro una volta che il feedback sarà stato preso in considerazione e il plug-in avrà raggiunto la versione stabile, quindi provalo.
Modifiche alle API
RoomDatabase.QueryCallback
è stato definito come un'interfaccia funzionale per consentire l'utilizzo della conversione SAM. (Iab8ea, b/281008549)
Correzioni di bug
- Risoluzione del problema che si verifica durante l'istanza 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 ritirata. La versione 2.6.0-alpha01 contiene questi commit.
Nuove funzionalità
- Supporto delle classi di valori in Room per KSP. Ora Room è in grado di supportare le classi di valori nelle entità. (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 ulteriori dettagli su come trasmettere le opzioni del processore 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 devono 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 restituiti di raccolta Nullable non sono più consentiti in Room per Kotlin CodeGen.
Avviso:potresti notare che i tuoi progetti sono più rigorosi in termini di nullabilità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, l'annullabilità degli argomenti di tipo è importante, mentre in Java viene per lo più ignorata. Ad esempio, supponiamo di avere un tipo restituito `Flow<foo\>` e che la tabella sia vuota. In Java CodeGen, questo non causerà problemi, ma in Kotlin CodeGen riceverai un errore. Per evitare questo problema, devi utilizzare `Flow<foo?\>`, supponendo che venga emesso un valore nullo. </foo?\></foo\>
Modifiche alle API
- Protezione dall'utilizzo senza significato di raccolte annullabili nei tipi restituiti dei metodi DAO. (I777dc, b/253271782, b/259426907)
- Aggiungi un'API per creare un flusso che emette 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 in Kotlin codegen, ma riscriverle come funzioni per evitare la falsa nozione 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 ritirata. La versione 2.5.2 contiene questi commit.
Correzioni di bug
- Risolvi un problema di incompatibilità con kotlinx-metadata-jvm. (386d5c)
- Risolvi un problema che causa l'errore di Room quando viene 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 ritirata. La versione 2.5.1 contiene questi commit.
Correzioni di bug
- Evita di selezionare la directory principale del database in
FrameworkSQLiteHelper
se il database è già aperto. (5de86b8) - Utilizza un controllo
isOpenInternal
quando verifichi se il database è già aperto. (e91fb35) - Ora è disponibile una migliore gestione del caso di rientro in
acquireTransactionThread()
diRoom
. (219f98b). Durante una transazione di sospensione, Room utilizza un thread dall'executor della transazione, avvia un ciclo di eventi e invia le operazioni di database di sospensione in modo che siano tutte incapsulate all'interno della coroutine della transazione. In genere, il thread della transazione è diverso da quello che la avvia, ma in alcuni casi sono uguali. Per gestire questi casi di rientro,withTransaction()
è stato refactorizzato in modo da non fare più affidamento su un job di controllo e, invece, esegue il blocco di transazione di sospensione dall'interno dirunBlocking
nel thread di 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
sono rilasciati. La versione 2.5.0 contiene questi commit.
Versione 2.5.0
11 gennaio 2023
androidx.room:room-*:2.5.0
viene ritirata. 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à dell'origine se il tuo codice è in Kotlin a causa della conversione della libreria in Kotlin. Ad esempio, una modifica incompatibile nota dell'origine è che inInvalidationTracker
ora devi 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 in caso di incompatibilità significative. - È stata aggiunta una nuova annotazione di scorciatoia,
@Upsert
, che tenta di inserire un'entità se non esiste un conflitto di unicità o di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353) - Sono stati aggiunti nuovi artefatti di paging delle stanze
room-paging-rxjava2
,room-paging-rxjava3
eroom-paging-guava
per il supporto in Room Paging. - 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 ritirata. 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 ritirata. La versione 2.5.0-beta02 contiene questi commit.
Modifiche alle API
- Correggi varie API che accettano argomenti di query da invarianti (
Array<Any?>
) a controvarianti (Array<out Any?>
) in modo che corrispondano al comportamento degli array di Java. (b/253531073)
Versione 2.5.0-beta01
5 ottobre 2022
androidx.room:room-*:2.5.0-beta01
viene ritirata. La versione 2.5.0-beta01 contiene questi commit.
Modifiche alle API
- Limita la versione minima che supporta
@Upsert
all'API 16. Ciò è dovuto all'impossibilità di identificare un conflitto di vincoli di 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 dello schema
.json
, danneggiandoli. (I4f83b, b/246751839)
Versione 2.5.0-alpha03
24 agosto 2022
androidx.room:room-*:2.5.0-alpha03
viene ritirata. 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à se non esiste un conflitto di unicità o di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)
Correzioni di bug
- Ora la stanza genererà un
SQLiteConstraintException
anziché unIllegalStateException
durante un controllo del vincolo di chiave esterna di migrazione automatica. (I328dd) - Correzione di una modifica incompatibile dell'origine 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 ritirata. La versione 2.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- Sono stati aggiunti nuovi artefatti
room-paging
room-paging-rxjava2
,room-paging-rxjava3
eroom-paging-guava
per il supporto nella ricerca di pagine della stanza.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)
Modifiche alle API
- Tutto il codice
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à dell'origine a causa della conversione della libreria in Kotlin. Se il codice era in Kotlin e chiamava la vecchia versione di Room, la nuova versione dovrà gestire questi casi. Ad esempio, una modifica incompatibile nota dell'origine è che in
InvalidationTracker
ora devi dichiarareonInvalidate()
inObserver
per avere un parametro di tipoSet
e nonMutableSet
. - Aggiunte API per fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in
@MapInfo
(Icc4b5) - Risolvi un problema di compatibilità dell'origine per consentire nuovamente
@Ignore
nei getter delle proprietà. (Ifc2fb)
Correzioni di bug
- Algoritmo euristico di risoluzione delle colonne duplicate. Room ora tenterà di risolvere le colonne ambigue in una query multimappa. In questo modo, i JOIN con tabelle contenenti tabelle con lo stesso nome possono essere mappati correttamente a un oggetto dati dei risultati. (I4b444, b/201306012, b/212279118)
Versione 2.5.0-alpha01
23 febbraio 2022
androidx.room:room-*:2.5.0-alpha01
viene ritirata. La versione 2.5.0-alpha01 contiene questi commit.
Modifiche alle API
- Risolto un problema per cui l'utilizzo di Room
@IntDef
non veniva applicato nelle origini Kotlin. (I75f41, b/217951311) - È stato risolto un problema di compatibilità dell'origine per consentire nuovamente
@Query
nei getter delle proprietà. (I0a09b) - È stata convertita la libreria room-common da Java a Kotlin. (I69c48, b/206858235)
Nota:potresti riscontrare problemi di incompatibilità dell'origine, in quanto alcune proprietà sono state spostate in oggetti complementari durante la conversione della libreria in Kotlin. Se il codice era in Kotlin e chiamava la vecchia versione di Room, la nuova versione avrà bisogno del suffisso ".Companion" per accedere a queste proprietà.
- È stata eseguita la conversione della 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 multiprocesso a livello di FrameworkSQLite*, per proteggere la creazione e le migrazioni del database multiprocesso alla prima esecuzione. (Ied267, b/193182592)
Correzioni di bug
- È stato aggiunto il supporto per le proprietà interne nelle origini Kotlin.
Si tratta di una leggera modifica del comportamento in Room, che utilizzerà il nome
di origine delle funzioni durante l'abbinamento alle proprietà come getter/setter
(in precedenza, utilizzava il nome JVM della funzione, diverso
per funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per abbinare i metodi getter/setter alle proprietà private, controlla attentamente 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 ritirata. La versione 2.4.3 contiene questi commit.
Correzioni di bug
- È stato risolto un problema che impediva a Room di riconoscere le 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 ritirata. La versione 2.4.2 contiene questi commit.
Correzioni di bug
- Risolvi un problema di generazione del codice per una funzione di sospensione Dao
@Transaction
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 di tipo restituito
Array<ByteArray>
. (If086e, b/213789489)
Versione 2.4.1
Versione 2.4.1
12 gennaio 2022
androidx.room:room-*:2.4.1
viene ritirata. La versione 2.4.1 contiene questi commit.
Correzioni di bug
- È stato aggiunto il supporto per le proprietà interne nelle origini Kotlin.
Si tratta di una leggera modifica del comportamento in Room, che utilizzerà il nome
di origine delle funzioni durante l'abbinamento alle proprietà come getter/setter
(in precedenza, utilizzava il nome JVM della funzione, diverso
per funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per abbinare i metodi getter/setter alle proprietà private, controlla attentamente 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 ritirata. La versione 2.4.0 contiene questi commit.
Modifiche importanti dalla versione 2.3.0
- Migrazioni automatiche: Room ora offre un'API per generare automaticamente le 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 a cui eseguire la migrazione automatica. Quando Room ha bisogno di ulteriori informazioni su tabelle e ridenominazione o eliminazione di colonne, l'annotazione@AutoMigration
può dichiarare una classe di specifica contenente questi input. Per ulteriori dettagli, consulta la documentazione di@AutoMigration
. - Inserimento delle dipendenze nelle migrazioni automatiche:
@ProvidedAutoMigrationSpec
è una nuova API per dichiarare che unAutoMigrationSpec
verrà fornito in fase di runtime tramiteRoomDatabase.Builder#addAutoMigrationSpec()
. Ciò consente a un framework di inserimento delle dipendenze 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 costruttore che riceve la classe di database in fase di test. In questo modo, l'assistente può aggiungere automaticamente le migrazioni automatiche nello stesso modo duranterunMigrationsAndValidate
. - Supporto della paginazione di Room:
androidx.room:room-paging
è stato rilasciato, fornendo il supporto nativo di Paging 3.0 per le query Room che restituisconoandroidx.paging.PagingSource
. - Metodi di query relazionali: Room ora supporta i metodi
@Dao
per i tipi restituiti multimappa, 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 ritirata. 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 ritirata. La versione 2.4.0-beta02 contiene questi commit.
Nuove funzionalità
- Abbiamo aggiunto il supporto per SparseArray e LongSparseArray in @MapInfo. (Ic91a2b/138910317)
Correzioni di bug
- Abbiamo aggiunto un nuovo analizzatore TypeConverter che tiene conto delle informazioni sulla nullabilità nei tipi. Poiché queste informazioni sono disponibili solo in KSP, sono attivate per impostazione predefinita solo in KSP. Se causa problemi, puoi disattivarla passando room.useNullAwareTypeAnalysis=false al processore di annotazioni. Se ciò accade, segnala un bug, poiché questo flag verrà rimosso in futuro. Con questo nuovo analizzatore TypeConverter, è consigliabile fornire solo TypeConverter di ricezione non nulli, in quanto il nuovo analizzatore è in grado di eseguirne il wrapping con un controllo di nullità. Tieni presente che questo non ha alcun impatto per gli utenti che utilizzano KAPT o Java come processori di annotazioni (a differenza di KSP), non dispongono di informazioni sulla nullabilità nei tipi. (Ia88f9, b/193437407)
- Correzione di un bug per cui la compilazione di Room non riusciva a causa di un errore SQL quando un'entità FTS dichiarava di utilizzare il 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 restituiti dal metodo di query relazionale nelle query LEFT JOIN. Con queste modifiche, nel caso in cui sia presente una mappatura 1-molti, 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 eseguire l'escape delle 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 ritirata. 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 da room-paging ora
utilizza
queryExecutor
passato tramiteRoomDatabase.Builder
, quindi può essere sostituito, anzichéDispatchers.IO
in precedenza. (Iae259)
Versione 2.4.0-alpha05
29 settembre 2021
androidx.room:room-*:2.4.0-alpha05
viene ritirata. La versione 2.4.0-alpha05 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un convertitore di tipi integrato per UUID. (I671e8, b/73132006)
Modifiche alle API
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 ulteriori dettagli, consulta la documentazione di TypeConverters. (36ae9e, b/195413406)
Supporto di chiavi/valori non POJO per i tipi restituiti Multimap nei DAO tramite l'annotazione
@MapInfo
. (I4d704)
@MapInfo
sarà obbligatorio quando la colonna chiave o 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
- Risolvi un problema per cui i risultati delle query multimappa non venivano 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 ritirata. La versione 2.4.0-alpha04 contiene questi commit.
Nuove funzionalità
Room ora supporta i tipi restituiti multimappa
@Dao
, utili per le istruzioni JOIN. I tipi di multimap supportati sonoMap
,ImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
di Guava.Di seguito sono riportati alcuni esempi di query multimappa:
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 multimappa può anche essere incluso nei tipi di restituzione asincrona supportati, come
LiveData
,Observable
di Rx oFlow
di coroutine.
Room-Paging
androidx.room:room-paging
è stato rilasciato e 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 artefatto sostituisce l'implementazione
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, quindi 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
, conKey
come primo elemento caricato. Questo comportamento si discosta da quello esistente, in cuiLoadParams.Refresh.Key
viene trattato come la posizione di scorrimento dell'utente e gli elementi vengono caricati sia prima che dopo la chiave.L'artefatto è facoltativo e la disattivazione ripristinerà il supporto esistente per Paging 3.0 introdotto in Room 2.3. Tuttavia, questo artefatto diventerà non facoltativo nella release futura per chi utilizza Room con Paging 3.0. Per attivare la funzionalità, aggiungi il nuovo artefatto di paging delle stanze al classpath. Se utilizzi Gradle, puoi aggiungere il seguente snippet al file build.gradle:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Correzioni di bug
- Risolvi un problema nelle migrazioni automatiche relativo alla gestione delle violazioni dei vincoli di integrità referenziale. (b/190113935)
Versione 2.4.0-alpha03
16 giugno 2021
androidx.room:room-*:2.4.0-alpha03
viene ritirata. La versione 2.4.0-alpha03 contiene questi commit.
Modifiche alle API
- Aggiorna
MigrationTestHelper
di Room per supportare le migrazioni automatiche fornendo una nuova API costruttore che riceve la classe di database in fase di test. In questo modo, l'assistente può aggiungere automaticamente le migrazioni automatiche nello stesso modo duranterunMigrationsAndValidate
.
Correzioni di bug
È stato risolto un problema relativo alla libreria nativa SQLite di Room per supportare i chip M1 di Apple. (b/174695268
È stato risolto un problema per cui Room non restituiva errori quando il tipo restituito di una funzione @Transaction era un flusso (I56ddd, b/190075899)
Risolvi un problema nelle migrazioni automatiche relativo agli indici. b/177673291
Aggiornamenti delle dipendenze
- Il supporto dei vantaggi principali della stanza ora dipende dal vantaggio principale
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 ritirata. La versione 2.4.0-alpha02 contiene questi commit.
Modifiche alle API
@ProvidedAutoMigrationSpec
è una nuova API per dichiarare che unAutoMigrationSpec
verrà fornito in fase di runtime tramiteRoomDatabase.Builder#addAutoMigrationSpec()
. Ciò consente a un framework di inserimento delle dipendenze 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 il callbackInvalidationTracker
a volte veniva richiamato in modo non valido, troppo tardi o non veniva richiamato affatto. 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 ritirata. La versione 2.4.0-alpha01 contiene questi commit.
Nuove funzionalità
- Migrazioni automatiche: Room ora offre un'API per generare automaticamente le 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 a cui eseguire la migrazione automatica. Quando Room ha bisogno di ulteriori informazioni su tabelle e ridenominazione o eliminazione di colonne, l'annotazione@AutoMigration
può dichiarare una classe di specifica contenente questi input. Per ulteriori dettagli, consulta la documentazione relativa a@AutoMigration
.
Correzioni di bug
- Risolto un problema per cui
defaultValue
con parentesi aggiuntive venivano convalidate 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 ritirata. La versione 2.3.0 contiene questi commit.
Modifiche importanti dalla versione 2.2.0
- Supporto enum integrato: se non viene fornito alcun convertitore, la stanza utilizzerà per impostazione predefinita un convertitore di tipo enum in stringa e viceversa. Se esiste già un convertitore di tipi per un enum, Room darà la priorità al suo utilizzo rispetto a quello predefinito.
- Callback query: Room ora offre un'API di callback generale RoomDatabase.QueryCallback, per quando le query stanno per essere eseguite, che può essere utile per la registrazione nelle build di debug. Il richiamo può essere impostato tramite
RoomDatabase.Builder#setQueryCallback()
. - Miglioramento preconfigurato: Room ora dispone di API per la creazione di un database utilizzando un database preconfigurato letto da un flusso di input. Ciò consente di gestire casi come quello in cui il database pre-package è compresso con gzip.
- Convertitori di tipi forniti: Room ora dispone di API per fornire istanze di convertitori di tipi in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore di tipi che verrà fornito a Room, utilizza la nuova annotazione @ProvidedTypeConverter.
- Supporto di RxJava3: Room ora supporta i tipi RxJava3. Analogamente a RxJava2, puoi dichiarare metodi DAO il cui tipo restituito è Flowable, Single, Maybe e Completable. Inoltre, è disponibile un nuovo artefatto
androidx.room:room-rxjava3
per supportare RxJava3. - Supporto di Paging 3.0: Room ora supporta la generazione di implementazioni per i metodi annotati
@Query
il cui tipo restituito èandroidx.paging.PagingSource
.
Versione 2.3.0-rc01
24 marzo 2021
androidx.room:room-*:2.3.0-rc01
viene ritirata. La versione 2.3.0-rc01 contiene questi commit.
Correzioni di bug
- Risolvi un problema che impediva l'utilizzo delle query di Coroutine Flow create da Room in un blocco
withTransaction
sospeso. (I797bf)
Versione 2.3.0-beta03
10 marzo 2021
androidx.room:room-*:2.3.0-beta03
viene ritirata. 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 sul thread principale poteva attivare un errore ANR. (I42b74, b/181221318)
- È stata corretta la visibilità di
@ExperimentalRoomApi
in modo che sia pubblica anziché privata del pacchetto. (b/181356119)
Contributo esterno
- Consente a Room di accettare un tipo restituito 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 restituito POJO nello stesso modo in cui viene fatto per un metodo DAO annotato con@RawQuery
. Grazie a "Markus Riegel | hey@marcorei.com". (I45acb)
Versione 2.3.0-beta02
18 febbraio 2021
androidx.room:room-*:2.3.0-beta02
viene ritirata. La versione 2.3.0-beta02 contiene questi commit.
Nuove funzionalità
Room ora supporta in modo sperimentale Kotlin Symbol Processing KSP.
KSP è un sostituto di KAPT per eseguire i processori di annotazioni in modo nativo sul compilatore Kotlin, riducendo significativamente i tempi di compilazione.
Per utilizzare Room con KSP, puoi applicare il plug-in Gradle KSP e sostituire la configurazione
kapt
nel file di build conksp
. Ad esempio, invece dikapt 'androidx.room:room-compiler:2.3.0-beta02'
utilizzaksp 'androidx.room:room-compiler:2.3.0-beta02'
. Per ulteriori dettagli, consulta la documentazione di KSP.Tieni presente che, poiché KSP è sperimentale, è consigliabile utilizzare KAPT per il codice di produzione. La riduzione dei tempi di compilazione è applicabile solo se non sono presenti altri processori che utilizzano KAPT. Consulta la pagina b/160322705 per i problemi noti.
Versione 2.3.0-beta01
27 gennaio 2021
androidx.room:room-*:2.3.0-beta01
viene ritirata. La versione 2.3.0-beta01 contiene questi commit.
Nuove funzionalità
- Database chiudibili automaticamente: ora Room ha la possibilità di chiudere i database a cui non si accede dopo un determinato periodo di tempo. Questa è una funzionalità sperimentale che può essere attivata chiamando il numero
RoomDatabase.Builder#setAutoCloseTimeout()
. Questa funzionalità è utile per le applicazioni con più database.
Correzioni di bug
- Risolvi 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 di fatto quella definita. (/I0b90d, b/176138543)
Versione 2.3.0-alpha04
16 dicembre 2020
androidx.room:room-*:2.3.0-alpha04
viene ritirata. 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 la registrazione nelle build di debug. Il richiamo può essere impostato tramiteRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - Se non viene fornito alcun convertitore, la stanza utilizzerà per impostazione predefinita un convertitore di tipi da Enum a Stringa e viceversa. Se esiste già un convertitore di tipi per un enum, Room darà la priorità al suo utilizzo rispetto a quello predefinito. (b/73132006)
Problema noto
- Se esiste già un convertitore di tipi unidirezionale per la lettura per l'enumerazione, Room potrebbe utilizzare accidentalmente il convertitore da stringa a enumerazione integrato, il che potrebbe non essere desiderato. Si tratta di un problema noto che può essere risolto trasformando il convertitore in un convertitore bidirezionale. Vedi: b/175707691
Correzioni di bug
- Risolto un problema per cui Room disattivava erroneamente l'elaborazione incrementale delle annotazioni nelle versioni più recenti di JDK. (b/171387388)
- È stato risolto un problema relativo a Room che non trovava la classe generata quando venivano utilizzati più caricatori di classi. Grazie per la correzione "Serendipity | 892449346@qq.com"! (b/170141113)
- Risolto un problema per cui Room generava un codice errato quando un
@Dao
Kotlin aveva una classe base i cui generici erano primitivi nella JVM. (b/160258066)
Contributo esterno
- Ora la stanza utilizzerà
beginTransactionNonExclusive
per impostazione predefinita se la modalità WAL è abilitata e l'API è 16 o superiore. 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 ritirata. La versione 2.3.0-alpha03 contiene questi commit.
Nuove funzionalità
Room ora dispone di API per fornire istanze di convertitori di tipi in modo che l'app possa controllare la loro inizializzazione. Per contrassegnare un convertitore di tipi che verrà fornito 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 un flusso di input. Ciò consente di gestire casi come quello in cui il database pre-package è compresso con gzip. Grazie ad Ahmed El-Helw ahmedre@gmail.com (3e6792, b/146911060)
Modifiche alle API
È stata aggiunta la destinazione mancante all'annotazione
@ForeignKey
, impedendone l'utilizzo al di fuori dell'annotazione@Entity
. (Iced1e)Il campo
mCallbacks
inRoomDatabase.java
ora è nascosto. (d576cb, b/76109329)
Correzioni di bug
Aggiornamento della 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 su Dao con un supertipo generico con le "primitive" Kotlin. (Ice6bb, b/160258066)
Aggiorna la documentazione dei metodi di aggiunta/rimozione di osservatori per chiarire il threading (Ifd1d9, b/153948821)
Risolvi un problema con Room che convalida in modo errato le tabelle FTS che hanno dichiarato la colonna rowid. (d62ebc, b/145858914)
Contributi esterni
Correzione dei problemi relativi alle maiuscole/minuscole delle impostazioni internazionali correlate 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 copiata una DB preconfigurata. (I1ba74, b/148934423)
Versione 2.3.0-alpha02
22 luglio 2020
androidx.room:room-*:2.3.0-alpha02
viene ritirata. La versione 2.3.0-alpha02 contiene questi commit.
Nuove funzionalità
- Supporto di RxJava3: Room ora supporta i tipi RxJava3. Analogamente a RxJava2, puoi dichiarare metodi DAO il cui tipo restituito è Flowable, Single, Maybe e Completable. Inoltre, è disponibile un nuovo artefatto
androidx.room:room-rxjava3
per supportare RxJava3. (b/152427884)
Modifiche alle API
- La dichiarazione di un
@TypeConverter
nella classe Kotlin Object è ora supportata. (b/151110764) - L'opzione di elaborazione incrementale delle annotazioni
Room
è ora ATTIVA per impostazione predefinita. (b/112110217)
Versione 2.3.0-alpha01
10 giugno 2020
androidx.room:room-*:2.3.0-alpha01
viene ritirata. La versione 2.3.0-alpha01 contiene questi commit.
Nuove funzionalità
Supporto di Paging 3.0: Room ora supporta la generazione di implementazioni per i metodi annotati con
@Query
il cui tipo restituito èandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Modifiche alle API
@RewriteQueriesToDropUnusedColumns
è una nuova annotazione pratica 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
in sostituzione delle query di ottimizzazione della sala con le proiezioni delle stelle. Tieni presente che@RewriteQueriesToDropUnusedColumns
non sostituisce la soluzione per i conflitti tra colonneroom.expandProjection
offerta in relazione ai tipi di reso che contenevano campi@Embedded
.
Correzioni di bug
- Risolto un bug per cui Room non rilevava correttamente la versione JDK utilizzata per attivare l'elaboratore di annotazioni incrementale. Grazie a Blaz Solar (me@blaz.solar) (b/155215201)
- Room ora incorpora la dipendenza ANTLR con l'annotation processor per evitare conflitti di versione con altri processori che utilizzano anche ANTLR. (b/150106190)
Versione 2.2.6
Versione 2.2.6
16 dicembre 2020
androidx.room:room-*:2.2.6
viene ritirata. La versione 2.2.6 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui Room disattivava erroneamente l'elaborazione incrementale delle annotazioni nelle versioni più recenti di JDK. (b/171387388)
Versione 2.2.5
Versione 2.2.5
18 marzo 2020
androidx.room:room-*:2.2.5
viene ritirata. La versione 2.2.5 contiene questi commit.
Correzioni di bug
- Rendi
MultiInstanceInvalidationService
compatibile con Direct Boot. Grazie a "Mygod contact-git@mygod.be" (b/148240967) - Risolto un bug che causava un arresto anomalo quando l'invalidazione multi-istanza era abilitata e il database conteneva un'entità FTS. (b/148969394)
- È stato risolto un problema durante il caricamento delle librerie native SQLite nel processore 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
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
vengono rilasciati. La versione 2.2.4 contiene questi commit.
Correzioni di bug
- Risolto un problema relativo alla sospensione delle transazioni che si bloccavano 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 un 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 ritirata. 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 legacy con indici nel suo schema. (b/139306173)
Versione 2.2.2
Versione 2.2.2
20 novembre 2019
androidx.room:room-*:2.2.2
viene ritirata. 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 la restituzione di elementi correlati nulli da parte di Room. (b/143105450)
Versione 2.2.1
Versione 2.2.1
23 ottobre 2019
androidx.room:room-*:2.2.1
viene ritirata. 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 riprova per gestire la libreria nativa mancante utilizzata per verificare le query durante la compilazione.
Versione 2.2.0
Versione 2.2.0
9 ottobre 2019
androidx.room:room-*:2.2.0
viene ritirata. La versione 2.2.0 contiene questi commit.
Modifiche importanti dalla versione 2.1.0
- Database preconfigurato: ora sono disponibili due nuove API in
RoomDatabase.Builder
per la creazione di unRoomDatabase
dato un file di database già compilato.createFromAsset()
viene utilizzato quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentrecreateFromFile()
viene utilizzato quando il file si trova in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento delle migrazioni distruttive in modo che, durante una migrazione di fallback, Room tenti di copiare nuovamente il database precompilato, se disponibile, altrimenti esegue il fallback eliminando e ricreando 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 di uno schema di database e verranno convalidati durante le migrazioni, se specificati. 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 unione (nota anche come tabella di join). b/69201917 - Relazioni uno-a-uno: la limitazione nei campi POJO annotati con
@Relation
di tipoList
oSet
è stata rimossa, consentendo di fatto di rappresentare le relazioni a valore singolo. 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. Ciò consente di utilizzare POJO arbitrari come parametri di questi metodi DAO, che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506 - Flusso di coroutine: i metodi DAO ora possono essere di tipo restituito
Flow<T>
.@Query
Il flusso restituito emetterà nuovamente un nuovo insieme di valori se le tabelle osservate nella query vengono invalidate. Dichiarare una funzione DAO con un tipo di ritornoChannel<T>
è un errore. Room ti consiglia invece di utilizzareFlow
e poi le funzioni vicine per convertireFlow
inChannel
. b/130428884 - Processore di annotazioni incrementale Gradle: Room ora è un processore di annotazioni di isolamento Gradle e l'incrementabilità può essere attivata tramite l'opzione del processore
room.incremental
. Per saperne di più, 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 futura versione stabile. b/112110217 - Espansione delle proiezioni: è stata aggiunta una nuova opzione del compilatore sperimentale
room.expandProjection
che fa sì che Room riscriva una query con una proiezione a stella in modo che contenga solo le colonne nel POJO del tipo restituito. Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. Quindi Room riscriverà la query inSELECT id, title FROM Song
in modo che venga recuperato il set minimo di colonne per soddisfare il tipo restituito. In questo modo, viene eliminato l'avvisoCURSOR_MISMATCH
visualizzato quando la query restituisce colonne aggiuntive che non corrispondono ad alcun campo nel tipo POJO restituito.
Versione 2.2.0-rc01
5 settembre 2019
androidx.room:room:2.2.0-rc01
viene ritirata. I commit inclusi in questa versione sono disponibili qui.
Nessuna modifica pubblica dalla stanza 2.2.0-beta01
.
Versione 2.2.0-beta01
22 agosto 2019
androidx.room:room-*:2.2.0-beta01
viene ritirata. 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 certo 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 che non era stato sottoposto a migrazione da Room 1.0, causando un arresto anomalo in fase di runtime 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 ritirata. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Flusso di coroutine: i metodi DAO ora possono essere di tipo restituito
Flow<T>
.@Query
Il flusso restituito emetterà nuovamente un nuovo insieme di valori se le tabelle osservate nella query vengono invalidate. Dichiarare una funzione DAO con un tipo di ritornoChannel<T>
è un errore. Room ti consiglia invece di utilizzareFlow
e poi le funzioni vicine per convertireFlow
inChannel
. b/130428884 - Espansione delle proiezioni: è stata aggiunta una nuova opzione del compilatore sperimentale
room.expandProjection
che fa sì che Room riscriva una query con una proiezione a stella in modo che contenga solo le colonne nel POJO del tipo restituito. Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. Quindi Room riscriverà la query inSELECT id, title FROM Song
in modo che venga recuperato il set minimo di colonne per soddisfare il tipo restituito. In questo modo, viene eliminato l'avvisoCURSOR_MISMATCH
visualizzato quando la query restituisce colonne aggiuntive che non corrispondono ad alcun 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 un codice errato utilizzando un metodo come setter di campo quando il campo è protetto. b/136194628
- È stato corretto un bug che causava l'attivazione di un NPE in un secondo processo da parte di InvalidationTracker quando l'invalidazione multi-istanza era abilitata e il servizio di invalidazione era stato interrotto. b/137454915
- È stato corretto un bug per cui Room non identificava correttamente il tipo restituito di una funzione sospesa ereditata annotata con
@RawQuery
. b/137878827 - È stato aggiornato il codice generato per
@Relation
quando la chiave correlata è di tipo BLOB per utilizzare unByteBuffer
comparabile. b/137881998 - È stato corretto un bug per cui Room segnalava setter mancanti nei POJO utilizzati come
parametri di entità parziali di
@Insert
,@Update
e@Delete
. b/138664463 - È stato corretto un bug per cui Room segnalava la mancanza 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 preconfigurato: ora sono disponibili due nuove API in
RoomDatabase.Builder
per la creazione di unRoomDatabase
dato un file di database già compilato.createFromAsset()
viene utilizzato quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentrecreateFromFile()
viene utilizzato quando il file si trova in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento delle migrazioni distruttive in modo che, durante una migrazione di fallback, Room tenti di copiare nuovamente il database precompilato, se disponibile, altrimenti esegue il fallback eliminando e ricreando 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 di uno schema di database e verranno convalidati durante le migrazioni, se specificati. b/64088772Nota:se lo schema del database ha 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, potresti dover fornire una migrazione per convalidare i valori predefiniti non contabilizzati. Per ulteriori informazioni, vedi 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 unione (nota anche come tabella di join). b/69201917 - Relazioni uno-a-uno: la limitazione nei campi POJO annotati con
@Relation
di tipoList
oSet
è stata rimossa, consentendo di fatto di rappresentare le relazioni a valore singolo. 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. Ciò consente di utilizzare POJO arbitrari come parametri di questi metodi DAO, che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506 - Processore di annotazioni incrementale Gradle: Room ora è un processore di annotazioni di isolamento Gradle e l'incrementabilità può essere attivata tramite l'opzione del processore
room.incremental
. Per saperne di più, 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 futura versione stabile. b/112110217
Correzioni di bug
- Room non propagherà più
EmptySetResultException
al gestore di errori globale 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 di sospensione annotata con
@RawQuery
non aveva un tipo restituito. 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
Room 2.1.0 viene rilasciato senza modifiche rispetto a 2.1.0-rc01
. I commit inclusi nella versione sono disponibili qui.
Modifiche importanti dalla versione 2.0.0
- FTS: Room ora supporta le entità con una mappatura
tabella FTS3 o FTS4. Le classi annotate con
@Entity
ora possono essere annotate anche con@Fts3
o@Fts4
per dichiarare una classe con una tabella di ricerca full-text della mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione. - Viste: ora Room supporta la dichiarazione di una classe come query archiviata, nota anche come vista, utilizzando l'annotazione
@DatabaseView
. - Coroutine: i metodi DAO ora possono essere funzioni di sospensione. Includi
room-ktx
nelle dipendenze per sfruttare questa funzionalità. L'artefatto ktx fornisce anche la funzione di estensioneRoomDatabase.withTransaction
per eseguire transazioni di database all'interno di una coroutine. - Auto Value: Room ora supporta la dichiarazione di classi annotate con
AutoValue
come entità e POJO. Le annotazioni Room
@PrimaryKey
,@ColumnInfo
,@Embedded
e@Relation
ora possono essere dichiarate nei metodi astratti di una classe annotata con valore automatico. Tieni presente che queste annotazioni devono essere accompagnate anche da@CopyAnnotations
per consentire a Room di comprenderle correttamente. - Supporto asincrono aggiuntivo: i metodi DAO annotati con
@Insert
,@Delete
o@Update
, insieme a@Query
contenente istruzioniINSERT
,DELETE
oUPDATE
, ora supportano i tipi restituiti RxCompletable
,Single
,Maybe
e il tipo restituito di GuavaListenableFuture
e possono anche essere funzioni di sospensione. enableMultiInstanceInvalidation
è una nuova API inRoomDatabase.Builder
per abilitare 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.- Room ora utilizzerà correttamente il costruttore principale di Kotlin nelle classi di 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 di Room che potrebbe verificarsi a causa di una configurazione temp_store già impostata. 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
- Corretto un bug per cui InvalidationTracker causava un arresto anomalo quando venivano eseguiti più controlli di invalidazione 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 al comportamento / alle API
- La funzione di estensione
RoomDatabase.withTransaction
è stata modificata in modo da non accettare più un blocco di funzioni conCoroutineScope
come destinatario. In questo modo, non è possibile saltare il wrappercoroutineScope { }
aggiuntivo necessario per eseguire le operazioni nel blocco di transazione contemporaneamente.
Correzioni di bug
- È stato corretto un bug per cui Room non riusciva a trovare una corrispondenza con un TypeConverter per una funzione DAO Kotlin contenente un parametro di tipo Collection. b/122066791
Versione 2.1.0-alpha06
22 marzo 2019
Modifiche al comportamento / alle API
- Le query di transazione 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 eseguirà più il wrapping delle 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
- Grammatica SQLite
Room
aggiornata in modo che corrisponda a 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 modo sicuro transazioni di database all'interno di una coroutine. Le funzioni di estensione delle stanze e il supporto delle coroutine sono disponibili nell'artefattoroom-ktx
. - I metodi DAO non astratti annotati con
@Transaction
ora possono essere funzioni di sospensione. b/120241587
Modifiche al comportamento / alle API
- L'artefatto
room-coroutines
è stato rinominato inroom-ktx
seguendo la stessa convenzione di denominazione degli altri artefatti androidx. beginTransaction
,setTransactionSuccessful
eendTransaction
inRoomDatabase
sono stati ritirati a favore dirunInTransaction
e della funzione di estensioneroom-ktx
withTransaction
.
Correzioni di bug
- Corretto un bug per cui gli argomenti del tokenizer venivano eliminati se il tokenizer utilizzato era SIMPLE. b/125427014
- È stato corretto un bug per cui Room non riusciva a identificare correttamente le funzioni di sospensione con parametri il cui tipo era una classe interna. b/123767877
- È stato corretto un bug per cui il metodo DAO
@Query
differito con le istruzioniINSERT
,UPDATE
oDELETE
preparava la query in modo eager nel thread principale. b/123695593 - Sono stati corretti vari bug in cui Room generava codice errato per determinate funzioni di sospensione. b/123466702 e b/123457323
- È stato corretto un bug per cui l'utilizzo deprecato 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'artefatto
kotlinx-metadata-jvm
, che al momento non è 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 i tipi asincroniSingle
,Mayble
,Completable
eListenableFuture
. Inoltre, possono anche essere funzioni di sospensione. b/120227284
Modifiche al comportamento / alle API
- Room ora 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 intorno 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 gli attuali binding SQLite di Android. b/117266738
Correzioni di bug
- È stato corretto un bug per cui Room non utilizzava correttamente TypeConverter di un tipo restituito 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 sospensive. b/122902595
- È stato corretto un bug per cui Room generava un 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 alle API
- L'FTS
tokenizer
in@Fts3
/@Fts4
ora accetta una stringa anziché un'enumerazione. Ciò consente a Room di utilizzare tokenizer personalizzati. I tokenizer integrati sono ancora definiti inFtsOptions
come costanti stringa. b/119234881
Nuove funzionalità
- Coroutine: i metodi DAO ora possono essere funzioni di sospensione. Per supportare le funzioni di sospensione in Room è stato rilasciato un nuovo artefatto,
room-coroutines
. b/69474692 - I metodi DAO annotati con
@Insert
,@Delete
o@Update
ora supportanoListenableFuture
come tipo restituito. 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 come finali i parametri del metodo DAO nell'implementazione generata. b/118015483
- È stato corretto un bug per cui il processore
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 varie implementazioni di
Collection
come argomenti di un'espressioneIN
. b/119884035 - È stato corretto un bug per cui 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 chiuso di
RoomDatabase
per ridurre la contesa del blocco. b/117900450
Versione 2.1.0-alpha02
30 ottobre 2018
Nuove funzionalità
- È stato aggiunto il supporto per il riferimento a un
@DatabaseView
in un@Relation
. b/117680932
Correzioni di bug
- È stato corretto un bug per cui Room eseguiva operazioni di I/O del disco nel thread principale durante la sottoscrizione e l'eliminazione di un tipo restituito Rx. b/117201279
- È stato corretto un bug per cui Room non riusciva a trovare un convertitore di tipi appropriato per un campo in una classe di entità Kotlin. b/111404868
- È stato corretto un bug per cui Room generava un codice errato per un'implementazione dell'interfaccia
DAO
contenente un metodo predefinito Kotlin senza argomenti. b/117527454 - Aggiornato il parser della grammatica SQLite
Room
, risolvendo un problema di prestazioni che causava tempi di compilazione lunghi. b/117401230
Versione 2.1.0-alpha01
8 ottobre 2018
Nuove funzionalità
- FTS: Room ora supporta le entità con una tabella di mapping FTS3 o FTS4. I corsi annotati con
@Entity
ora possono essere annotati anche con@Fts3
o@Fts4
per dichiarare un corso con una tabella di ricerca full-text della mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione. b/62356416 - Viste: Room ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, utilizzando l'annotazione @DatabaseView. b/67033276
- Auto Value: Room ora supporta la dichiarazione di classi annotate AutoValue come entità e POJO. Le annotazioni Room
@PrimaryKey
,@ColumnInfo
,@Embedded
e@Relation
ora possono essere dichiarate nei metodi astratti di una classe annotata con valore automatico. Tieni presente che queste annotazioni devono essere accompagnate anche da@CopyAnnotations
per consentire a Room di comprenderle correttamente. b/62408420 - Supporto di tipi di restituzione Rx aggiuntivi: i metodi DAO annotati con
@Insert
,@Delete
o@Update
ora supportano i tipi di restituzione RxCompletable
,Single<T>
eMaybe<T>
. b/63317956 - Tipi immutabili con
@Relation
: in precedenza Room richiedeva che i campi annotati@Relation
fossero impostabili, ma ora possono essere parametri del costruttore. enableMultiInstanceInvalidation
: è una nuova API inRoomDatabase.Builder
per abilitare l'invalidazione in più istanze di RoomDatabase utilizzando lo stesso file di database. Questo meccanismo di annullamento convalida multi-istanza funziona anche su 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 al comportamento / alle API
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 per cui Room non veniva ripristinato correttamente in seguito a un database danneggiato o a una migrazione errata durante l'inizializzazione. b/111504749 e b/111519144
- Room ora utilizzerà correttamente il costruttore principale di Kotlin nelle classi di 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 al comportamento / alle API
- Aggiunta di
RoomDatabase.Builder.setQueryExecutor()
per consentire la personalizzazione della posizione in cui vengono eseguite le query - Aggiunto il supporto di RxJava2
Observable
- Le implementazioni di DAO e database generate sono ora finali
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 RoomOpenHelper con le versioni precedenti di Room 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 stanza 1.1.1
è identica alla stanza 1.1.1-rc1
.
Versione 1.1.1-rc1
16 maggio 2018
Se utilizzi le migrazioni, ti consigliamo vivamente di utilizzare Room 1.1.1-rc1
anziché 1.1.0
.
È 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
Room
RxSingle
eMaybe
in cui il sistema ricicla la query in anticipo, causando problemi se aggiungi 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 alle 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
- [RoomDatabase.clearAllTables][ref-clearAllTables] ora 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
, purché 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 da più tabelle (come relazioni e join). In precedenza, questi non riuscivano ad attivare nuovi risultati o non potevano essere compilati. b/74128314
Versione 1.1.0-alpha1
22 gennaio 2018
Nuove funzionalità
RawQuery
: Questa nuova API consente ai metodi@Dao
di ricevere l'SQL come parametro di query b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: questa nuova API inRoomDatabase.Builder
consente un controllo più granulare delle versioni dello schema di partenza da cui sono consentite le migrazioni distruttive (rispetto a fallbackToDestructiveMigration) b/64989640- Ora la stanza supporta solo le API Paging più recenti (alpha-4+), abbandonando il supporto per
LivePagedListProvider
, che è stato ritirato. Per utilizzare la nuova versione alpha di Room, devi utilizzare la paginazionealpha-4
o versioni successive e passare daLivePagedListProvider
aLivePagedListBuilder
, se non l'hai ancora fatto.
Correzioni di bug
- Supporto migliorato per i tipi Kotlin Kapt. b/69164099
- L'ordine dei campi non invalida più lo schema. b/64290754