Room
Aggiornamento più recente | Release stabile | Candidato per l'uscita | Versione beta | Release alpha |
---|---|---|---|---|
7 agosto 2024 | 2.6.1 | - | - | 2.7.0-alpha06 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza a Room, devi aggiungere il Repository Maven di Google al tuo progetto. Consulta il Repository Maven di Google per ulteriori informazioni.
Le dipendenze per la stanza includono testare le migrazioni delle stanze e Sala RxJava
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle
per
l'app o il modulo:
Groovy
dependencies { def room_version = "2.6.1" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // To use Kotlin annotation processing tool (kapt) kapt "androidx.room:room-compiler:$room_version" // To use Kotlin Symbol Processing (KSP) ksp "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" }
Kotlin
dependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") annotationProcessor("androidx.room:room-compiler:$room_version") // To use Kotlin annotation processing tool (kapt) kapt("androidx.room:room-compiler:$room_version") // To use Kotlin Symbol Processing (KSP) ksp("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") }
Per informazioni sull'utilizzo del plug-in KAPT, consulta la documentazione di KAPT.
Per informazioni sull'utilizzo del plug-in dei punti di forza principali, consulta la documentazione di avvio rapido dei punti di forza principali.
Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione ktx.
Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze nella build.
Facoltativamente, per le librerie non Android (ad es. moduli Gradle solo Java o Kotlin)
puoi dipendere da androidx.room:room-common
per utilizzare le annotazioni della stanza.
Configurazione delle opzioni del compilatore
La stanza virtuale ha le seguenti opzioni di processore delle annotazioni.
room.schemaLocation |
directory
Consente di esportare gli schemi dei database in file JSON nel . Vedi Migrazioni delle stanze per ulteriori informazioni. |
room.incremental |
boolean
Abilita il processore di annotazione incrementale Gradle. Valore predefinito è true .
|
room.generateKotlin |
boolean
Genera file sorgente Kotlin anziché Java. Richiede punti di forza principali. Il valore predefinito è false .
Vedi le note relative alla versione 2.6.0 per maggiori dettagli.
|
Usa il plug-in Room Gradle
Con Room versione 2.6.0 e successive, puoi utilizzare il plug-in Room Gradle per e configurare le opzioni per il compilatore delle stanze. Il plug-in configura il progetto in modo che ha generato schemi (che sono un output delle attività di compilazione utilizzate per le migrazioni automatiche) siano configurate correttamente per essere riproducibili memorizzabili nella cache.
Per aggiungere il plug-in, definisci nel file di build Gradle di primo livello e la relativa versione.
Alla moda
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 usa l'room
.
Alla moda
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
Se utilizzi il plug-in Room Gradle, è necessario impostare un schemaDirectory
. Questo
configurerà il compilatore della stanza e le varie attività di compilazione e i suoi backend
(javac, KAPT, KSP) per estrarre file di schema in cartelle personalizzate, ad esempio
schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Questi file devono essere
sono state archiviate nel repository per essere utilizzate per la convalida e le migrazioni automatiche.
Alcune opzioni non possono essere configurate in tutte le versioni del plug-in Room Gradle,
anche se sono supportati dal compilatore Room. Nella tabella seguente sono elencati tutti
e mostra la versione del plug-in Room Gradle che ha aggiunto il supporto per
configurando questa opzione utilizzando l'estensione room
. Se la tua versione è precedente,
oppure, se l'opzione non è ancora supportata, puoi utilizzare
opzioni del processore di annotazione.
Opzione | Dalla versione |
---|---|
room.schemaLocation (campo obbligatorio) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
Utilizza le opzioni del processore di annotazione
Se non utilizzi il plug-in Room Gradle o se l'opzione che ti interessa non è supportato dalla tua versione del plug-in, puoi configurare la stanza virtuale utilizzando delle opzioni del processore di annotazione, come descritto Aggiungi dipendenze per la build. Come La specifica delle opzioni di annotazione dipende dall'uso o meno di KSP o KAPT per le stanze.
Alla moda
// 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 CommandLineArgumentsProvider
quando si aggiunge questa opzione in modo che
che Gradle conosce questa directory quando esegue controlli aggiornati.
Eseguire la migrazione del database della stanza
mostra un'implementazione completa di CommandLineArgumentsProvider
che fornisce
la posizione dello schema.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Non esitare a contattarci in caso di nuovi problemi o idee per migliorare questa raccolta. Dai un'occhiata alle problemi esistenti in questa raccolta, prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente tramite facendo clic sul pulsante a forma di stella.
Consulta la documentazione di Issue Tracker per ulteriori informazioni.
Versione 2.7
Versione 2.7.0-alpha06
7 agosto 2024
Viene rilasciato androidx.room:room-*:2.7.0-alpha06
. La versione 2.7.0-alpha06 contiene questi commit.
Modifiche alle API
- Modifica la configurazione dell'istanza per un elemento
RoomDatabase
in un progetto KMP.
A causa del modello di compilazione Kotlin 2.0, la strategia di riferimento a una funzione da generare, denominata instantiateImpl()
, è più efficace. Vengono introdotte due nuove API, @ConstructedBy
e RoomDatabaseConstructor
, che sostituiscono la strategia instantiateImpl()
. La nuova strategia è la seguente:
Definisci un oggetto previsto che implementa
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
Collega l'oggetto con la dichiarazione
@Database
utilizzando@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
Crea una nuova istanza di database ma senza passare un argomento di fabbrica
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Correzioni b/316978491, b/338446862 e b/342905180
- Supporto per
@RawQuery
in Room KMP con l'aggiunta di una nuova API denominataRoomRawQuery
che è simile aSupportSQLiteQuery
in termini di conservazione della stringa SQL non elaborata e una funzione per associare argomenti in un'istruzione. Le funzioni annotate di@RawQuery
ora possono accettare unRoomRawQuery
come singolo parametro. (Iea844, b/330586815) - Aggiungi un sovraccarico di
setQueryCallback()
che accetta unCoroutineContext
. (Id66ff, b/309996304) - Aggiunto il supporto per
linuxArm64
target multipiattaforma Kotlin (I139d3, b/338268719)
Correzioni di bug
- Risolvi un problema per cui la stanza virtuale generava erroneamente una chiamata a
recursiveFetchArrayMap
in target non Android. (710c36, b/352482325) - Risolvi un problema per cui a volte Room generava un'eccezione "Timeout durante il tentativo di connessione" in un progetto KMP. (fa72d0, b/347737870)
- È stato risolto un problema delle migrazioni automatiche che verificavano la presenza di chiavi esterne troppo presto prima che altre tabelle modificassero i propri schemi per renderli conformi alle nuove chiavi esterne. (7672c0, b/352085724)
Versione 2.7.0-alpha05
10 luglio 2024
Viene rilasciato androidx.room:room-*:2.7.0-alpha05
. 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
RoomDatabase
causava un deadlock o un errore di timeout della connessione durante l'utilizzo diAndroidSQLiteDriver
.
Versione 2.7.0-alpha04
12 giugno 2024
Viene rilasciato androidx.room:room-*:2.7.0-alpha04
. La versione 2.7.0-alpha04 contiene questi commit.
Correzioni di bug
- Risolto un problema del processore di annotazione di Room generava un codice KMP incompatibile quando veniva definito un tipo restituito multi-mappa in un DAO. (b/340983093)
- Risolto un problema per cui Room non riusciva a trovare l'implementazione del database generata se la classe annotata
@Database
non aveva pacchetti. (b/342097292) - Risolto un problema per cui l'attivazione della chiusura automatica e dell'annullamento della convalida di più istanze a volte causava un errore
ConcurrentModificationException
quando il database veniva chiuso automaticamente per inattività.
Versione 2.7.0-alpha03
29 maggio 2024
Viene rilasciato androidx.room:room-*:2.7.0-alpha03
. La versione 2.7.0-alpha03 contiene questi commit.
Correzioni di bug
- Risolvi vari problemi relativi a Kotlin 2.0 e KSP 2.0. Si noti che Kotlin 2.0 con supporto KSP 2 non è completo e il team sta lavorando alle varie API e modifiche del comportamento nel nuovo compilatore. (b/314151707)
Versione 2.7.0-alpha02
14 maggio 2024
Viene rilasciato androidx.room:room-*:2.7.0-alpha02
. La versione 2.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Sono stati risolti diversi problemi relativi ai punti di forza principali.
Versione 2.7.0-alpha01
1° maggio 2024
Viene rilasciato androidx.room:room-*:2.7.0-alpha01
. La versione 2.7.0-alpha01 contiene questi commit.
Nuove funzionalità
- Assistenza Kotlin Multiplatform (KMP): in questa release, la stanza virtuale è stata sottoposta 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 "comune" (realizzata per essere multipiattaforma). Le piattaforme attualmente supportate sono Android, iOS, JVM (desktop), Mac nativo e Linux nativo. Eventuali funzionalità mancanti nelle nuove piattaforme supportate verranno rese "complete" nelle prossime versioni delle stanze.
Per saperne di più su come iniziare a utilizzare Room KMP, consulta la documentazione ufficiale Room KMP.
- La generazione del codice Kotlin su KSP è stata attivata per impostazione predefinita se l'elaborazione avviene tramite KSP. Per i progetti solo KAPT o Java, Room continuerà a generare origini Java.
Modifiche alle API
- È stato aggiunto un sovraccarico di
Room.databaseBuilder()
che accetta un parametro lambda che deve essere utilizzato con una funzione generata da una stanza per evitare di utilizzare la riflessione quando si crea l'istanza dell'implementazioneRoomDatabase
generata. Esempio di utilizzo:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Allo strumento di creazione è stata aggiunta un'API per la configurazione di una stanza con un
CoroutineContext
:RoomDatabase.Builder.setQueryCoroutineContext
. Tieni presente che unRoomDatabase
può essere configurato solo con gli esecutori che utilizzanosetQueryExecutor
o con un contesto Coroutine, ma non entrambi. - È stata aggiunta un'API per la configurazione della stanza con un driver
SQLite
:RoomDatabase.Builder.setDriver()
. Per saperne di più sull'API DriverSQLite
, consulta la documentazione di SQLite KMP - Sono state aggiunte le API per accedere all'oggetto
SQLiteConnection
sottostante dalle API driver:RoomDatabase.useReaderConnection
eRoomDatabase.useWriterConnection
. - I callback relativi alle stanze virtuali ora hanno una versione sovraccarica che riceve
SQLiteConnection
anzichéSupportSQLiteDatabase
. Sono pensati per essere sostituiti durante la migrazione a un progetto KMP. Per ulteriori informazioni sulla migrazione degli utilizzi delle stanze in un'app per Android a un modulo KMP comune, consulta la guida alla migrazione. I richiami sono:Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- L'artefatto KTX
androidx.room:room-ktx
è stato unito inandroidx.room:room-runtime
insieme a tutte le relative API e ora è vuoto. Rimuovila dall'elenco delle dipendenze.
Versione 2.6
Versione 2.6.1
29 novembre 2023
Viene rilasciato androidx.room:room-*:2.6.1
. La versione 2.6.1 contiene questi commit.
Correzioni di bug
- È stato risolto il problema nel codice generato in cui il valore predefinito per le colonne doppie in
EntityCursorConverter
veniva impostato su 0 anziché 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
ora verranno propagate comeLoadStateUpdate
diLoadResult.Error
contenente l'elemento Throwable. Questo stato di errore è osservabile tramitePagingDataAdapter.loadStateFlow(Views)
oLazyPagingItems.loadState(Compose)
. Tieni presente che ciò contrassegna un cambiamento di comportamento per cui in passato gli errori di caricamento appaiono come un'eccezione generata dal metodo dao che ha attivato il caricamento. (I93887, b/302708983)
Versione 2.6.0
18 ottobre 2023
Viene rilasciato androidx.room:room-*:2.6.0
. La versione 2.6.0 contiene questi commit.
Modifiche importanti dalla versione 2.5.0
- L'opzione per abilitare la generazione del codice Kotlin (o "Kotlin CodeGen") è ora disponibile nel KSP della stanza. (4297ec0). Per attivare Kotlin CodeGen nella stanza virtuale, aggiungi il nome dell'opzione
room.generateKotlin
alle opzioni relative al processore per KSP. Per ulteriori dettagli su come passare le opzioni del processore per il punto di forza principale, consulta la documentazione del punto di forza principale.
Nota:quando usi Kotlin CodeGen, è importante notare che sono state aggiunte altre limitazioni. Le proprietà astratte come getter DAO o query DAO in Kotlin CodeGen non sono consentite e dovrebbero invece essere riscritte come funzioni per evitare la falsa nozione che il valore della proprietà sia immutabile e abbia un risultato memorizzato fisso. Un'altra limitazione che è stata aggiunta è che i tipi di reso delle raccolte Nullable non sono più consentiti nella stanza per Kotlin CodeGen.
Attenzione: potresti scoprire che i tuoi progetti sono più rigidi in termini di nullità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, il valore null degli argomenti di tipo è importante, mentre in Java questo viene per lo più ignorato. Ad esempio, supponiamo di avere un tipo restituito "Flow<foo\>" e che la tabella sia vuota. In Java CodeGen, non causa alcun problema, ma in Kotlin CodeGen riceverai un errore. Per evitarlo, dovrai usare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>
- Il nuovo artefatto del plug-in Room Gradle è stato aggiunto a Room con ID
androidx.room
, che risolve vari problemi esistenti in Room relativi all'utilizzo di input e output di schemi tramite le opzioni del processore di annotazione Gradle. Per ulteriori dettagli, consulta le note di rilascio della versione 2.6.0-alpha02 della sala. - Ora le classi di valore in Entità stanza sono supportate per i punti di forza principali. (4194095)
- I tipi di restituzione delle mappe nidificate nelle funzioni DAO sono ora supportati nella stanza virtuale. (I13f48, 203008711)
Versione 2.6.0-rc01
20 settembre 2023
Viene rilasciato androidx.room:room-*:2.6.0-rc01
. La versione 2.6.0-rc01 contiene questi commit.
Versione 2.6.0-beta01
23 agosto 2023
Viene rilasciato androidx.room:room-*:2.6.0-beta01
. La versione 2.6.0-beta01 contiene questi commit.
Correzioni di bug
- Gestione dell'eccezione
SQLite
relativa al caso speciale durante l'upsert riscontrato quando viene generata l'eccezione2067 SQLITE_CONSTRAINT_UNIQUE
durante un upsert. L'upsert deve eseguire un aggiornamento. (If2849, b/243039555)
Versione 2.6.0-alpha03
9 agosto 2023
Viene rilasciato androidx.room:room-*:2.6.0-alpha03
. La versione 2.6.0-alpha03 contiene questi commit.
Nuove funzionalità
- I tipi di restituzione delle mappe nidificate nelle funzioni DAO sono ora supportati nella stanza virtuale. (I13f48, 203008711)
Modifiche alle API
- Una nuova annotazione di tipo denominata
@MapColumn
è stata creata per sostituire@MapInfo
, che ora è deprecata. Per ogni nome di colonna (keyColumnName
,valueColumnName
o entrambi) fornito in un'annotazione@MapInfo
, dovrai dichiarare un'annotazione@MapColumn
solo concolumnName
e utilizzare l'annotazione sull'argomento del 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 sull'argomento type all'interno del tipo restituito di una funzione DAO, anziché sulla funzione stessa come@MapInfo
. Per saperne di più, consulta la documentazione relativa a@MapColumn
. (Ib0305, b/203008711) - File API aggiornati per annotare l'eliminazione della compatibilità (I8e87a, b/287516207)
- Le API del plug-in Room Gradle sono state aggiornate in modo che non richiedano 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 versioni o schemi dei tipi di build pur mantenendo i vantaggi del plug-in (build riproducibili e memorizzabili nella cache). (I09d6f, b/278266663)
Correzioni di bug
- È stata corretta la 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
Viene rilasciato androidx.room:room-*:2.6.0-alpha02
. La versione 2.6.0-alpha02 contiene questi commit.
Plug-in Gradle per stanza
Questa nuova release contiene un nuovo artefatto per il plug-in Room Gradle con ID androidx.room
, che risolve vari problemi esistenti in Room relativi all'utilizzo di input e output di schemi tramite le opzioni del processore di annotazione Gradle. Il plug-in Room Gradle configura il progetto in modo che gli schemi generati utilizzati per le migrazioni automatiche e l'output delle attività di compilazione siano configurati correttamente per avere build riproducibili e memorizzabili nella cache. Il plug-in offre un DSL per configurare la posizione dello schema di base:
room {
schemaDirectory("$projectDir/schemas/")
}
Il plug-in configurerà quindi il compilatore Room, le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) per estrarre i file di schema in cartelle personalizzate, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Come di consueto, questi file vengono inseriti nel repository da utilizzare per la convalida e le migrazioni automatiche. Dopo la migrazione all'utilizzo del plug-in anziché delle opzioni del processore di annotazione, i file di schema esistenti devono essere copiati nelle directory flavor generate e create dal plug-in. Si tratta di un'operazione di migrazione una tantum che deve essere eseguita manualmente. La documentazione relativa allo schema in developers.android.com verrà aggiornata in futuro una volta che avremo gestito il feedback e che il plug-in raggiungerà la sua stabilità. Prova quindi.
Modifiche alle API
RoomDatabase.QueryCallback
è stata definita come un'interfaccia funzionale per consentire l'utilizzo delle conversioni da parte di SAM. (Iab8ea, b/281008549)
Correzioni di bug
- Risoluzione del problema derivante dalla creazione di un'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
Viene rilasciato androidx.room:room-*:2.6.0-alpha01
. La versione 2.6.0-alpha01 contiene questi commit.
Nuove funzionalità
- Supporto di classi di valore in Room for KSP. La stanza virtuale è ora in grado di supportare le classi di valore in Entità. (4194095)
- La generazione di codice Kotlin(o "Kotlin CodeGen") ora può essere attivata nella stanza (4297ec0). Per attivare Kotlin CodeGen nella stanza virtuale, aggiungi il nome dell'opzione
room.generateKotlin
alle opzioni relative al processore per KSP. Per ulteriori dettagli su come passare le opzioni del processore per il punto di forza principale, consulta la documentazione del punto di forza principale.
Nota:quando usi Kotlin CodeGen, è importante notare che sono state aggiunte altre limitazioni. Le proprietà astratte come getter DAO o query DAO in Kotlin CodeGen non sono consentite e dovrebbero invece essere riscritte come funzioni per evitare la falsa nozione che il valore della proprietà sia immutabile e abbia un risultato memorizzato fisso. Un'altra limitazione che è stata aggiunta è che i tipi di reso delle raccolte Nullable non sono più consentiti nella stanza per Kotlin CodeGen.
Attenzione: potresti scoprire che i tuoi progetti sono più rigidi in termini di nullità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, il valore null degli argomenti di tipo è importante, mentre in Java questo viene per lo più ignorato. Ad esempio, supponiamo di avere un tipo restituito "Flow<foo\>" e che la tabella sia vuota. In Java CodeGen, non causa alcun problema, ma in Kotlin CodeGen riceverai un errore. Per evitarlo, dovrai usare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>
Modifiche alle API
- Prevenire l'uso privo di significato di raccolte con valori null nei tipi di restituzione del metodo DAO. (I777dc, b/253271782, b/259426907)
- Aggiungi un'API per la creazione di un flusso che emette modifiche del tracker di invalidazione. L'API è utile per creare flussi che devono reagire alle modifiche del database. (I8c790, b/252899305)
Correzioni di bug
- Non consentire proprietà astratte come getter DAO o query DAO nel codegen Kotlin, ma devono essere riscritte come funzioni per evitare la falsa nozione che il valore della proprietà è immutabile e ha un risultato memorizzato fisso. (If6a13, b/127483380, b/257967987)
Versione 2.5.2
Versione 2.5.2
21 giu 2023
Viene rilasciato androidx.room:room-*:2.5.2
. 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 causava la generazione di un errore da parte di Room durante l'utilizzo in un test Robolectric. (f79bea, b/274924903)
Versione 2.5.1
Versione 2.5.1
22 marzo 2023
Viene rilasciato androidx.room:room-*:2.5.1
. La versione 2.5.1 contiene questi commit.
Correzioni di bug
- Se il database è già aperto, evita di controllare la directory superiore del database in
FrameworkSQLiteHelper
. (5de86b8) - Utilizza un controllo
isOpenInternal
per verificare se il database è già aperto. (e91fb35) - È ora disponibile una migliore gestione della richiesta rientrante nella stanza
acquireTransactionThread()
. (219f98b). Durante una transazione di sospensione, la stanza virtuale utilizza un thread dell'esecutore delle transazioni, avvia un loop di eventi al suo interno e invia la sospensione delle operazioni del database in modo che vengano tutte incapsulate nella coroutine della transazione. In genere ci si aspetta che il thread delle transazioni sia diverso da quello che inizia la transazione, ma in alcuni casi sono uguali. Per gestire questi casi di rientro,withTransaction()
è stato sottoposto a refactoring in modo che non si basi più su un job di controllo e eseguirà invece il blocco delle transazioni di sospensione dall'interno dirunBlocking
nel thread delle transazioni.
Versione 2.5.0
Versione 2.5.0
22 febbraio 2023
Vengono rilasciate le funzionalità 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
. La versione 2.5.0 contiene questi commit.
Versione 2.5.0
11 gennaio 2023
Viene rilasciato androidx.room:room-*:2.5.0
. La versione 2.5.0 contiene questi commit.
Modifiche importanti dalla versione 2.4.0
- Tutte le origini
room-runtime
sono state convertite da Java a Kotlin. Tieni presente che potresti riscontrare problemi di incompatibilità della fonte se il tuo codice è in Kotlin a causa della conversione della libreria in Kotlin. Ad esempio, una modifica nota incompatibile con l'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à in assenza di conflitti di univocità oppure di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353) - I nuovi elementi di impaginazione delle stanze
room-paging-rxjava2
,room-paging-rxjava3
eroom-paging-guava
sono stati aggiunti per il supporto nell'opzione Paging delle stanze. - Sono state aggiunte API per specificare i nomi delle tabelle di chiavi e valori per la disambiguazione in
@MapInfo
(Icc4b5)
Versione 2.5.0-rc01
7 dicembre 2022
Viene rilasciato androidx.room:room-*:2.5.0-rc01
. 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
Viene rilasciato androidx.room:room-*:2.5.0-beta02
. La versione 2.5.0-beta02 contiene questi commit.
Modifiche alle API
- Correggi varie API che trasformano gli argomenti delle query da invarianti (
Array<Any?>
) a contravarianti (Array<out Any?>
) per corrispondere al comportamento dell'array di Java. (b/253531073)
Versione 2.5.0-beta01
5 ottobre 2022
Viene rilasciato androidx.room:room-*:2.5.0-beta01
. La versione 2.5.0-beta01 contiene questi commit.
Modifiche alle API
- Limita l'API 16 come versione minima che supporta
@Upsert
. Ciò è dovuto all'impossibilità di identificare un conflitto di vincolo di chiave primaria nelle API meno recenti. (I5f67f, b/243039555)
Correzioni di bug
- Risolto un problema per cui le tabelle shadow venivano esportate erroneamente nei file
.json
dello schema, danneggiandole. (I4f83b, b/246751839)
Versione 2.5.0-alpha03
24 agosto 2022
Viene rilasciato androidx.room:room-*:2.5.0-alpha03
. 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à in assenza di conflitti di univocità oppure di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)
Correzioni di bug
- La stanza virtuale ora genererà un
SQLiteConstraintException
anziché unIllegalStateException
durante un controllo del vincolo di chiave esterna della migrazione automatica. (I328gg) - Correggi una modifica incompatibile con l'origine Kotlin di getter / proprietà di
getOpenHelper
,getQueryExecutor
egetTransactionExecutor
. (Iad0ac)
Versione 2.5.0-alpha02
1 giugno 2022
Viene rilasciato androidx.room:room-*:2.5.0-alpha02
. La versione 2.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- Sono stati aggiunti nuovi elementi
room-paging
room-paging-rxjava2
,room-paging-rxjava3
eroom-paging-guava
per il supporto in Paging delle stanze.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/206)
Modifiche alle API
- Tutto
room-runtime
è stato convertito da Java a Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c252) ﮮbNota:potresti riscontrare problemi di incompatibilità della fonte a causa della conversione della libreria in Kotlin. Se il tuo codice era in Kotlin e chiamava la versione precedente di Room, la nuova versione dovrà gestire questi casi. Ad esempio, una modifica nota incompatibile con l'origine è che in
InvalidationTracker
ora devi dichiarareonInvalidate()
inObserver
per avere un parametro di tipoSet
e nonMutableSet
. - Sono state aggiunte API per specificare i nomi delle tabelle di chiavi e valori per la disambiguazione in
@MapInfo
(Icc4b5) - Risolvi un problema di compatibilità della sorgente per riautorizzare
@Ignore
nei getter di proprietà. (Ifc2fb).
Correzioni di bug
- Algoritmo euristico di risoluzione delle colonne duplicato. La stanza virtuale cercherà di risolvere le colonne ambigue in una query a più mappe. 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
Viene rilasciato androidx.room:room-*:2.5.0-alpha01
. La versione 2.5.0-alpha01 contiene questi commit.
Modifiche alle API
- È stato risolto un problema per cui l'utilizzo della stanza
@IntDef
non veniva applicato in modo forzato nelle origini Kotlin. (I75f41, b/217951311) - È stato risolto un problema di compatibilità della sorgente per riautorizzare
@Query
nei getter di proprietà. (I0a09b) - Stanza comune convertita da Java a Kotlin. (I69c48, b/206858235)
Nota:potresti riscontrare problemi di incompatibilità della fonte perché alcune proprietà sono state spostate negli oggetti companion durante la conversione della libreria in Kotlin. Se il tuo codice era in Kotlin e chiamava la versione precedente di Room, la nuova versione dovrà avere il file ".Companion" quando si accede a queste proprietà.
- Migrazione delle stanze convertita da Java a Kotlin. (I2724b, b/206858622)
paging
file correlati convertiti inroom-runtime
da Java a Kotlin. (I82fc8, b/206859668)- Aggiunta un'API per il blocco e l'utilizzo multi-processo a livello di FrameworkSQLite*, al fine di proteggere la creazione e le migrazioni di database multi-processo la prima volta. (Ied267, b/193182592)
Correzioni di bug
- È stato aggiunto il supporto per le proprietà interne nelle origini Kotlin.
Si tratta di un lieve cambiamento del comportamento nella stanza virtuale in cui verrà utilizzata l'origine
nome delle funzioni abbinandole alle proprietà come getter/setter
(in precedenza, utilizzava il nome JVM della funzione, che è diverso
per funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per abbinare getter/setter alle proprietà private, controlla attentamente il codice generato dopo aggiorna (If6531, b/205289020)
Versione 2.4.3
Versione 2.4.3
27 luglio 2022
Viene rilasciato androidx.room:room-*:2.4.3
. La versione 2.4.3 contiene questi commit.
Correzioni di bug
- 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
Viene rilasciato androidx.room:room-*:2.4.2
. 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 il 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
Viene rilasciato androidx.room:room-*:2.4.1
. 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 un lieve cambiamento del comportamento nella stanza virtuale in cui verrà utilizzata l'origine
nome delle funzioni abbinandole alle proprietà come getter/setter
(in precedenza, utilizzava il nome JVM della funzione, che è diverso
per funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per abbinare getter/setter alle proprietà private, controlla attentamente il codice generato dopo aggiorna (If6531, b/205289020)
Versione 2.4.0
Versione 2.4.0
15 dicembre 2021
Viene rilasciato androidx.room:room-*:2.4.0
. La versione 2.4.0 contiene questi commit.
Modifiche importanti dalla versione 2.3.0
- Migrazioni automatiche: ora la stanza virtuale offre un'API per generare automaticamente le migrazioni purché vengano esportati gli schemi. Per comunicare alla stanza virtuale che deve generare una migrazione automatica, è possibile utilizzare una nuova proprietà
@Database#autoMigrations
per dichiarare le versioni da e verso le quali eseguire la migrazione automatica. Quando Room ha bisogno di informazioni aggiuntive sulle ridenominazioni o eliminazioni di tabelle e colonne, l'annotazione@AutoMigration
può dichiarare una classe di specifiche contenente questi input. Per ulteriori dettagli, consulta la documentazione di@AutoMigration
. - Iniezione di dipendenze nelle migrazioni automatiche:
@ProvidedAutoMigrationSpec
è una nuova API per dichiarare cheAutoMigrationSpec
verrà fornito in fase di runtime tramiteRoomDatabase.Builder#addAutoMigrationSpec()
. Ciò consente a un framework di inserimento delle dipendenze per fornire queste specifiche quando sono necessarie dipendenze complesse. - Supporto del test di migrazione per le migrazioni automatiche:
MigrationTestHelper
della stanza è stato aggiornato per supportare le migrazioni automatiche fornendo una nuova API costruttore che riceve la classe del database in fase di test. In questo modo l'assistente può aggiungere automaticamente le migrazioni automatiche allo stesso modo duranterunMigrationsAndValidate
. - Assistenza per Room-Paging: viene rilasciato
androidx.room:room-paging
, che fornisce il supporto nativo di Paging 3.0 per le query relative alle stanze virtuali che restituisconoandroidx.paging.PagingSource
. - Metodi di query relazionali: ora Room supporta i metodi
@Dao
con tipi di restituzione multimappe, utili per le istruzioni JOIN. I tipi di multimappe supportati sonoMap
,SparseArray
,LongSparseArray
, insieme aiImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
di Guava.
Versione 2.4.0-rc01
1 dicembre 2021
Viene rilasciato androidx.room:room-*:2.4.0-rc01
. La versione 2.4.0-rc01 contiene questi commit.
Nuove funzionalità
- Aggiorna la dipendenza di Room dal KSP a
1.6.0-1.0.1
per supportare Kotlin 1.6
Versione 2.4.0-beta02
17 novembre 2021
Viene rilasciato androidx.room:room-*:2.4.0-beta02
. 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 supporta i valori null le informazioni per tipo. Poiché queste informazioni sono disponibili solo nei punti di forza principali, è attivo per impostazione predefinita solo nei punti di forza principali. Se ciò causa problemi, puoi disattivarlo room.useNullAwareTypeAnalysis=false all'annotazione di fatturazione. In tal caso, segnala un bug, poiché questo flag verrà rimosso in futuro. Con questo nuovo analizzatore TypeConverter, si consiglia di fornire solo TypeConverter che ricevono valori non null poiché il nuovo analizzatore ha la possibilità per aggregarli con un controllo nullo. Tieni presente che ciò non influisce sugli utenti che utilizzano KAPT o Java come processori di annotazione (a differenza di KSP), non hanno informazioni sui valori nulli di tipi. (Ia88f9, b/193437407)
- È stato corretto un bug per cui Room non veniva compilato con un errore SQL quando un'entità FTS dichiarava di utilizzare il tokenizzatore di ICU. (I00db9, b/201753224)
- È stato risolto il problema nelle migrazioni automatiche relativo a una nuova colonna aggiunta a un'entità incorporata tra le versioni. (I5fcb1b/193798291)
- Abbiamo risolto un problema relativo ai tipi di restituzione del metodo di query relazionali nelle query LEFT JOIN. Con queste modifiche, nel caso in cui sia presente un mapping 1-many, la raccolta restituita per una chiave non includerà l'oggetto valore non valido se non viene rilevato 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 era possibile utilizzare i caratteri di escape nei nomi delle colonne per le parole chiave SQLite. (Idbed4b/197133152)
Versione 2.4.0-beta01
13 ottobre 2021
Viene rilasciato androidx.room:room-*:2.4.0-beta01
. La versione 2.4.0-beta01 contiene questi commit.
Correzioni di bug
- È stato risolto un problema relativo alla mancata aggiunta di nuove colonne nelle migrazioni automatiche quando anche un'altra tabella nella stessa migrazione automatica aveva una nuova colonna con lo stesso nome. (Ia5db5, b/200818663)
- L'implementazione di PagingSource generata dal caricamento delle pagine delle stanze
utilizza
queryExecutor
trasmesso aRoomDatabase.Builder
, in modo che possa anzichéDispatchers.IO
in precedenza. (Iae259).
Versione 2.4.0-alpha05
29 settembre 2021
Viene rilasciato androidx.room:room-*:2.4.0-alpha05
. La versione 2.4.0-alpha05 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un convertitore integrato dei tipi per l'UUID. (I671e8, b/73132006)
Modifiche alle API
È stata aggiunta una nuova proprietà all'annotazione TypeConverters per consentire agli sviluppatori di disattivare i convertitori Enum e UUID integrati. Per impostazione predefinita, questi convertitori sono attivi, ma puoi disabilitarli per un determinato ambito o per l'intero database. Per i dettagli, consulta la documentazione TypeConverters. (36ae9e, b/195413406)
Supporto di chiavi/valori non POJO per i tipi restituiti Multimap nei DAO tramite l'annotazione
@MapInfo
. (I4d704)
La colonna @MapInfo
è obbligatoria se 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 Stanza. (Ieaffe)
Correzioni di bug
- È stato risolto un problema per cui i risultati delle query multimappa non venivano ordinati in modo corretto 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 dell'indice in @Index. Grazie a Nikita Zhelonkin. (I033fc)
Versione 2.4.0-alpha04
21 luglio 2021
Viene rilasciato androidx.room:room-*:2.4.0-alpha04
. La versione 2.4.0-alpha04 contiene questi commit.
Nuove funzionalità
La stanza virtuale ora supporta i metodi
@Dao
con tipi restituiti multimap, utili per le istruzioni JOIN. I tipi di multimappe supportati sonoMap
insieme aImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
di Guava.Di seguito sono riportati alcuni esempi di query a mappa multipla:
Mappa relazione one-to-one
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
Mappa relazione one-to-many (mappa 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 aggregato nei tipi restituiti asincroni supportati, come
LiveData
,Observable
di Rx o coroutineFlow
.
Pacchetto stanza
Viene rilasciato
androidx.room:room-paging
, che fornisce il supporto nativo di Paging 3.0 per le query delle stanze virtuali 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 uno basato 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. Il caricamento delle pagine inizierà daKey
eKey
sarà il primo elemento caricato. Si discosta dal comportamento esistente in cuiLoadParams.Refresh.Key
viene considerato la posizione di scorrimento dell'utente e gli elementi vengono caricati prima e dopo la chiave.L'artefatto è facoltativo e la disattivazione comporterà il fallback al supporto esistente per Paging 3.0 che è stato introdotto nella stanza 2.3. Tuttavia, questo elemento diventerà non facoltativo nella release futura per chi utilizza la stanza virtuale 3.0. Per l'attivazione, aggiungi il nuovo artefatto di impaginazione delle stanze al tuo 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
- È stato risolto un problema relativo alla gestione delle violazioni delle chiavi esterne nelle migrazioni automatiche. (b/190113935)
Versione 2.4.0-alpha03
16 giugno 2021
Viene rilasciato androidx.room:room-*:2.4.0-alpha03
. La versione 2.4.0-alpha03 contiene questi commit.
Modifiche alle API
- Aggiorna
MigrationTestHelper
della stanza virtuale per supportare le migrazioni automatiche fornendo una nuova API costruttore che riceve la classe del database sottoposta a test. In questo modo l'assistente può aggiungere automaticamente le migrazioni automatiche allo 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
Risolto un problema per cui la stanza virtuale non generava errori quando il tipo restituito di una funzione @Transaction era un flusso (I56ddd, b/190075899)
È stato risolto un problema relativo agli indici nelle migrazioni automatiche. B/177673291
Aggiornamenti delle dipendenze
- Il supporto dei punti di forza principali della stanza ora dipende dal punto di forza principale
1.5.10-1.0.0-beta01
. (1ecb11, b/160322705)
Versione 2.4.0-alpha02
5 maggio 2021
Viene rilasciato androidx.room:room-*:2.4.0-alpha02
. La versione 2.4.0-alpha02 contiene questi commit.
Modifiche alle API
@ProvidedAutoMigrationSpec
è una nuova API per dichiarare che verrà fornito unAutoMigrationSpec
in fase di runtime tramiteRoomDatabase.Builder#addAutoMigrationSpec()
. Ciò consente a un framework di inserimento delle dipendenze per fornire queste specifiche quando sono necessarie dipendenze complesse.
Correzioni di bug
- È stato risolto un problema relativo alle migrazioni automatiche in cui i
@DatabaseView
non venivano ricreati correttamente.
Contributo esterno
- Risolvi un problema in
JournalMode.TRUNCATE
della stanza virtuale per cui il callbackInvalidationTracker
a volte veniva richiamato in modo non valido, troppo tardi o non veniva affatto chiamato. Grazie aUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
Versione 2.4.0-alpha01
21 aprile 2021
Viene rilasciato androidx.room:room-*:2.4.0-alpha01
. La versione 2.4.0-alpha01 contiene questi commit.
Nuove funzionalità
- Migrazioni automatiche: ora la stanza virtuale offre un'API per generare automaticamente le migrazioni purché vengano esportati gli schemi. Per comunicare alla stanza virtuale che deve generare una migrazione automatica, è possibile utilizzare una nuova proprietà
@Database#autoMigrations
per dichiarare le versioni da e verso le quali eseguire la migrazione automatica. Quando Room ha bisogno di informazioni aggiuntive sulle ridenominazioni o eliminazioni di tabelle e colonne, l'annotazione@AutoMigration
può dichiarare una classe di specifiche contenente questi input. Per ulteriori dettagli, consulta la documentazione di@AutoMigration
.
Correzioni di bug
- È stato risolto un problema per cui
defaultValue
con parentesi aggiuntive veniva convalidato in modo errato dalla convalida dello schema della stanza. b/182284899
Versione 2.3.0
Versione 2.3.0
21 aprile 2021
Viene rilasciato androidx.room:room-*:2.3.0
. La versione 2.3.0 contiene questi commit.
Modifiche importanti dalla versione 2.2.0
- Supporto enum integrato: la stanza ora utilizzerà per impostazione predefinita un convertitore enum in stringa e viceversa, se non viene fornito alcun convertitore di tipo Enum. Se esiste già un convertitore del tipo per un'enumerazione, la stanza virtuale darà la priorità all'utilizzo di quello predefinito.
- Callback query: ora Room offre un'API di callback generale RoomDatabase.QueryCallback, utile quando stanno per eseguire le query, che può essere utile per accedere alle build di debug. Il callback può essere impostato tramite
RoomDatabase.Builder#setQueryCallback()
. - Miglioramento predefinito: ora Room dispone di API per la creazione di un database utilizzando un database predefinito che legge da un flusso di input. Ciò consente casi come i casi in cui il database predefinito viene compresso in formato gzip.
- Convertitori di tipi forniti: ora Room dispone di API per fornire istanze dei convertitori di tipi in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore di tipi che verrà fornito alla stanza, utilizza la nuova annotazione @ProvidedTypeConverter.
- Supporto RxJava3: la stanza virtuale ora supporta i tipi RxJava3. In modo simile a RxJava2, puoi dichiarare metodi DAO il cui tipo restituito è Flowable, Single, Forse e Completabile. Inoltre, è disponibile un nuovo artefatto
androidx.room:room-rxjava3
per supportare RxJava3. - Assistenza per la release 3.0: ora Room supporterà la generazione di implementazioni per i metodi annotati
@Query
il cui tipo restituito èandroidx.paging.PagingSource
.
Versione 2.3.0-rc01
24 marzo 2021
Viene rilasciato androidx.room:room-*:2.3.0-rc01
. La versione 2.3.0-rc01 contiene questi commit.
Correzioni di bug
- Risolvi un problema che impediva la fruizione delle query Coroutine Flow create dalla stanza virtuale in un blocco
withTransaction
in fase di sospensione. (I797bf)
Versione 2.3.0-beta03
10 marzo 2021
Viene rilasciato androidx.room:room-*:2.3.0-beta03
. La versione 2.3.0-beta03 contiene questi commit.
Nuove funzionalità
- Aggiunto il supporto della compilazione incrementale per i punti di forza principali. (I031c1, b/176453350)
Correzioni di bug
- È stato corretto un bug per cui la creazione di PagingSource nel thread principale poteva attivare un errore ANR. (I42b74, b/181221318)
- È stato corretto il problema di visibilità di
@ExperimentalRoomApi
in modo che sia pubblica anziché privata del pacchetto. (b/181356119)
Contributo esterno
- Consenti a Room di accettare un tipo restituito POJO in un metodo DAO annotato
@Query
quando è anche annotato con@SkipQueryVerification
. La stanza virtuale farà il possibile per convertire il risultato della query nel tipo restituito POJO, proprio come avviene per un metodo DAO annotato@RawQuery
. Grazie a "Markus Riegel | hey@marcorei.com". (I45acb)
Versione 2.3.0-beta02
18 febbraio 2021
Viene rilasciato androidx.room:room-*:2.3.0-beta02
. La versione 2.3.0-beta02 contiene questi commit.
Nuove funzionalità
Room ora dispone del supporto sperimentale per il KSP di elaborazione dei simboli Kotlin.
KSP sostituisce KAPT, in modo da eseguire i processori di annotazione in modo nativo sul compilatore Kotlin, riducendo notevolmente i tempi di compilazione.
Per utilizzare Room with KSP, puoi applicare il plug-in Gradle del punto di forza e sostituire la configurazione
kapt
nel file di build conksp
. Ad esempio, invece dikapt 'androidx.room:room-compiler:2.3.0-beta02'
usaksp 'androidx.room:room-compiler:2.3.0-beta02'
. Per ulteriori dettagli, consulta la documentazione del punto di forza principale.Tieni presente che, poiché il punto di forza principale è sperimentale, si consiglia di usare comunque KAPT per il codice di produzione. La riduzione dei tempi di build è applicabile solo se non ci sono altri processori che utilizzano KAPT. Per i problemi noti, vedi b/160322705.
Versione 2.3.0-beta01
27 gennaio 2021
Viene rilasciato androidx.room:room-*:2.3.0-beta01
. La versione 2.3.0-beta01 contiene questi commit.
Nuove funzionalità
- Database chiudibili automaticamente: la stanza virtuale ora può chiudere i database a cui non si accede dopo un determinato periodo di tempo. Questa è una funzionalità sperimentale e 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 di queste strategie, ignorando di fatto quella definita. (/I0b90d, b/176138543)
Versione 2.3.0-alpha04
16 dicembre 2020
Viene rilasciato androidx.room:room-*:2.3.0-alpha04
. La versione 2.3.0-alpha04 contiene questi commit.
Nuove funzionalità
- Ora Room offre un'API di callback generale
RoomDatabase.QueryCallback
, per quando stanno per eseguire le query, che può essere utile per il logging nelle build di debug. Il callback può essere impostato tramiteRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - Per impostazione predefinita, per la stanza virtuale verrà utilizzato un convertitore di tipo Enum in stringa e viceversa. Se esiste già un convertitore del tipo per un'enumerazione, la stanza virtuale darà la priorità all'utilizzo di quello predefinito. (b/73132006)
Problema noto
- Se esiste già un convertitore unidirezionale per la lettura per Enum, Room potrebbe utilizzare accidentalmente il convertitore da stringa a enum integrato, cosa che potrebbe non essere desiderata. Si tratta di un problema noto che può essere risolto utilizzando un convertitore a due vie. Vedi: b/175707691
Correzioni di bug
- Risolto un problema per cui la stanza virtuale disattivava erroneamente l'elaborazione delle annotazioni incrementali nelle versioni JDK più recenti. (b/171387388)
- È stato risolto un problema relativo alla stanza che trovava la classe generata quando vengono utilizzati più caricatori di classi. Grazie per la correzione: "Serendipity | 892449346@qq.com’! (b/170141113)
- È stato 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
- La stanza virtuale utilizzerà per impostazione predefinita
beginTransactionNonExclusive
se la modalità WAL è abilitata e l'API è almeno 16. Grazie a "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com'! (b/126258791)
Versione 2.3.0-alpha03
14 ottobre 2020
Viene rilasciato androidx.room:room-*:2.3.0-alpha03
. 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 controllarne l'inizializzazione. Per contrassegnare un convertitore di tipi che verrà fornito alla stanza virtuale, 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 predefinito che legge da un flusso di input. Ciò consente casi come i casi in cui il database predefinito viene compresso in formato gzip. Grazie a "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060)
Modifiche alle API
È stato aggiunto il target mancante all'annotazione
@ForeignKey
, che ne impedisce 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 TypeConverters per chiarire che TypeConverters può essere utilizzato solo per convertire colonne / campi e non per righe. (I07c56, b/77307836)
Esegui l'aggiornamento a DaoProcessor per correggere l'errore di compilazione su Dao con un super tipo generico con "primitivi" Kotlin. (Ice6bb, b/160258066)
Aggiorna la documentazione sui metodi di aggiunta/rimozione osserva per chiarire i thread (Ifd1d9, b/153948821)
Risolvi un problema per cui la stanza virtuale convalidava erroneamente le tabelle FTS che dichiaravano la relativa colonna ID riga. (d62ebc, b/145858914)
Contributi esterni
Risolvere i problemi relativi alle impostazioni internazionali in maiuscolo/minuscolo relativi a 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 un modello Il database è stato copiato. (I1ba74, b/148934423)
Versione 2.3.0-alpha02
22 luglio 2020
Viene rilasciato androidx.room:room-*:2.3.0-alpha02
. La versione 2.3.0-alpha02 contiene questi commit.
Nuove funzionalità
- Supporto RxJava3: la stanza virtuale ora supporta i tipi RxJava3. In modo simile a RxJava2, puoi dichiarare metodi DAO il cui tipo restituito è Flowable, Single, Forse e Completabile. Inoltre, è disponibile un nuovo artefatto
androidx.room:room-rxjava3
per supportare RxJava3. (b/152427884)
Modifiche alle API
- La dichiarazione
@TypeConverter
nella classe dell'oggetto Kotlin è ora supportata. (b/151110764) - L'opzione di elaborazione incrementale delle annotazioni della stanza è ora ATTIVA per impostazione predefinita. (b/112110217)
Versione 2.3.0-alpha01
10 giugno 2020
Viene rilasciato androidx.room:room-*:2.3.0-alpha01
. La versione 2.3.0-alpha01 contiene questi commit.
Nuove funzionalità
Assistenza per la release 3.0: ora Room supporterà la generazione di implementazioni per
@Query
metodi annotati 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 pratica annotazione che consente alle stanze di riscrivere la proiezione "*" di una query in modo tale che le colonne inutilizzate nel risultato vengano rimosse.- L'opzione del processore
room.expandProjection
è ora deprecata. Utilizza@RewriteQueriesToDropUnusedColumns
come sostituzione per le query che ottimizzano le stanze con proiezioni a stella. Tieni presente che@RewriteQueriesToDropUnusedColumns
non sostituisce la soluzione di conflitto di colonneroom.expandProjection
offerta per quanto riguarda i tipi restituiti che contenevano campi@Embedded
.
Correzioni di bug
- È stato corretto un bug per cui la stanza virtuale non rilevava correttamente la versione JDK utilizzata per abilitare il processore di annotazione incrementale. Grazie a Blaz Solar (me@blaz.solar) (b/155215201)
- Ora Room incorpora la dipendenza ANTLR con il processore di annotazione per evitare conflitti di versione con altri processori che utilizzano ANTLR. (b/150106190)
Versione 2.2.6
Versione 2.2.6
16 dicembre 2020
Viene rilasciato androidx.room:room-*:2.2.6
. La versione 2.2.6 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui la stanza virtuale disattivava erroneamente l'elaborazione delle annotazioni incrementali nelle versioni JDK più recenti. (b/171387388)
Versione 2.2.5
Versione 2.2.5
18 marzo 2020
Viene rilasciato androidx.room:room-*:2.2.5
. La versione 2.2.5 contiene questi commit.
Correzioni di bug
- Imposta
MultiInstanceInvalidationService
directBootAware. Grazie a "Mygod contact-git@mygod.be" (b/148240967) - È stato corretto un bug che causava un arresto anomalo se veniva abilitata l'annullamento della convalida di più istanze e il database conteneva un'entità FTS. (b/148969394)
- È stato risolto un problema durante il caricamento delle librerie native SQLite nel processore di annotazione della stanza che causava l'arresto anomalo del compilatore a causa di compilazioni parallele. (b/146217083)
Versione 2.2.4
Versione 2.2.4
19 febbraio 2020
Vengono rilasciati i seguenti elementi: androidx.room:room-common:2.2.4
, androidx.room:room-compiler:2.2.4
, androidx.room:room-guava:2.2.4
, androidx.room:room-ktx:2.2.4
, androidx.room:room-migration:2.2.4
, androidx.room:room-runtime:2.2.4
, androidx.room:room-rxjava2:2.2.4
e androidx.room:room-testing:2.2.4
. La versione 2.2.4 contiene questi commit.
Correzioni di bug
- Risolto un problema di sospensione delle transazioni che comportava un deadlock se la coroutine veniva annullata rapidamente prima dell'inizio effettivo della transazione. (b/148181325)
- È stato risolto un problema a causa del quale @Generato veniva utilizzato in modo errato durante la creazione con JDK 9. (b/146538330)
- È stato 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
Viene rilasciato androidx.room:room-*:2.2.3
. 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 era stato sottoposto a migrazione e che conteneva un hash precedente con indici nello schema. (b/139306173)
Versione 2.2.2
Versione 2.2.2
20 novembre 2019
Viene rilasciato androidx.room:room-*:2.2.2
. La versione 2.2.2 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui la raccolta di una relazione one-to-one 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
Viene rilasciato androidx.room:room-*:2.2.1
. La versione 2.2.1 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui la stanza virtuale visualizzava erroneamente un avviso su
CURSOR_MISMATCH
con l'opzione di compilazioneexpandProjection
attivata. (b/140759491) - È stato aggiunto un meccanismo di ripetizione per la gestione della libreria nativa mancante utilizzata per verificare le query durante il tempo di compilazione.
Versione 2.2.0
Versione 2.2.0
9 ottobre 2019
Viene rilasciato androidx.room:room-*:2.2.0
. La versione 2.2.0 contiene questi commit.
Modifiche importanti dalla versione 2.1.0
- Database predefinito: ora sono disponibili due nuove API in
RoomDatabase.Builder
disponibile per la creazione di unRoomDatabase
dato un database già compilato .createFromAsset()
si utilizza quando il file di database precompilato si trova in nella cartella delle risorse dell'APK, mentrecreateFromFile()
indica quando il file viene in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento distruttive, in modo che durante una migrazione di riserva, Room proverà a ricopiare il database precompilato, se disponibile, altrimenti utilizza il fallback rilasciando e ricreando tutte le tabelle. B/62185732 - Valori predefiniti dello schema: ora
@ColumnInfo
ha una nuova proprietàdefaultValue
che può essere utilizzato per specificare il valore predefinito di una colonna. I valori predefiniti sono parte di uno schema di database e verrà convalidata durante le migrazioni specificato. B/64088772 - Relazioni di molti tipi: ora
@Relation
ha una nuova proprietàassociateBy
, che accetta una nuova annotazione@Junction
, utilizzata per dichiarare una relazione deve essere soddisfatto tramite una tabella di giunzione (nota anche come tabella di join). b/69201917 - Relazioni one-to-one: la limitazione nei campi POJO annotati con
@Relation
di tipoList
oSet
è stato rimosso, efficacemente consentendo la rappresentazione delle relazioni con un singolo valore. b/62905145 - Entità di destinazione: le annnotazioni DAO
@Insert
,@Update
e@Delete
ora ha una nuova proprietàtargetEntity
, che consente di specificare la tabella di destinazione Lo scopo del metodo DAO è intervenire. In questo modo, i parametri di questi DAO essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. B/127549506 - Flusso di coroutine:
@Query
i metodi DAO ora possono essere di tipo restituitoFlow<T>
. Il flusso restituito emetterà nuovamente un nuovo insieme di valori se le tabelle di osservazione in la query viene invalidata. Dichiarazione di una funzione DAO con ritornoChannel<T>
è un errore. Stanza invece ti incoraggia a usareFlow
e poi funzioni vicine per convertireFlow
inChannel
. B/130428884 - Processore di annotazioni incrementali Gradle: la stanza virtuale è ora un elemento di isolamento Gradle
il processore di annotazione e l'incrementalità possono essere abilitati
l'opzione
room.incremental
. Consulta: Opzioni del compilatore della stanza per ulteriori informazioni. In caso di problemi, invia una qui. Prevediamo di attivare l'incrementalità per impostazione predefinita in una versione stabile e futura. B/112110217 - Espansione delle proiezioni: una nuova opzione sperimentale per il compilatore
È stato aggiunto
room.expandProjection
che fa sì che la stanza virtuale riscrivi una query con una proiezione a stella che contenga solo le colonne nel tipo restituito POJO. Per Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. A questo punto, Room riscriverà eseguire la query suSELECT id, title FROM Song
in modo che l'insieme minimo di colonne per soddisfare il tipo restituito. Questo elimina essenzialmenteCURSOR_MISMATCH
avviso che viene visualizzato quando la query restituisce contenuti extra colonne che non corrispondono ad alcun campo nel tipo POJO di ritorno.
Versione 2.2.0-rc01
5 settembre 2019
Viene rilasciato androidx.room:room:2.2.0-rc01
. 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
Viene rilasciato androidx.room:room-*:2.2.0-beta01
. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato corretto un bug per cui una query Coroutine Flow interrompeva la restituzione di nuovi valori dopo un determinato periodo di tempo. (b/139175786)
- È stato corretto un bug per cui Room non accettava un codice hash dello schema precedente durante l'apertura di un database che non era stato eseguito dalla stanza 1.0 e causava un arresto anomalo di runtime a causa di uno schema non valido. (b/139306173)
Versione 2.2.0-alpha02
7 agosto 2019
Viene rilasciato androidx.room:room-*:2.2.0-alpha02
. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Flusso di coroutine:
@Query
i metodi DAO ora possono essere di tipo restituitoFlow<T>
. Il flusso restituito emetterà nuovamente un nuovo insieme di valori se le tabelle di osservazione in la query viene invalidata. Dichiarazione di una funzione DAO con ritornoChannel<T>
è un errore. Stanza invece ti incoraggia a usareFlow
e poi funzioni vicine per convertireFlow
inChannel
. B/130428884 - Espansione delle proiezioni: una nuova opzione sperimentale per il compilatore
È stato aggiunto
room.expandProjection
che fa sì che la stanza virtuale riscrivi una query con una proiezione a stella che contenga solo le colonne nel tipo restituito POJO. Per Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. A questo punto, Room riscriverà eseguire la query suSELECT id, title FROM Song
in modo che l'insieme minimo di colonne per soddisfare il tipo restituito. Questo elimina essenzialmenteCURSOR_MISMATCH
avviso che viene visualizzato quando la query restituisce contenuti extra colonne che non corrispondono ad alcun campo nel tipo POJO di ritorno. onDestructiveMigrate
è una nuova API callback aggiunta aRoomDatabase.Callback
per i casi in cui 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 campo setter quando il campo è protetto. B/136194628
- È stato corretto un bug che causava la generazione di un NPE da parte di InvalidationTracker Processo quando l'annullamento della convalida di più istanze è stato abilitato e l'annullamento Il servizio è stato interrotto. B/137454915
- È stato corretto un bug per cui la stanza virtuale non identificava correttamente il tipo restituito di un
funzione di sospensione ereditata annotata con
@RawQuery
. B/137878827 - Aggiornamento del codice generato per
@Relation
quando la chiave correlata è di tipo BLOB per utilizzare unByteBuffer
paragonabile. B/137881998 - È stato corretto un bug per cui la stanza virtuale si lamentava della mancanza dei setter sui POJO utilizzati come
parametri entità parziali di
@Insert
,@Update
e@Delete
. B/138664463 - È stato corretto un bug per cui la stanza virtuale si lamentava della mancanza di getter e setter per
colonna ignorata tramite
@Entity
quando la classe entità è stata utilizzata in un determinato DAO di classificazione. b/138238182 - È stato corretto un bug per cui la stanza virtuale non convertiva correttamente gli argomenti di associazione denominati in argomenti posizionali che causano 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 predefinito: ora sono disponibili due nuove API in
RoomDatabase.Builder
disponibile per la creazione di unRoomDatabase
dato un database già compilato .createFromAsset()
si utilizza quando il file di database precompilato si trova in nella cartella delle risorse dell'APK, mentrecreateFromFile()
indica quando il file viene in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento distruttive, in modo che durante una migrazione di riserva, Room proverà a ricopiare il database precompilato, se disponibile, altrimenti utilizza il fallback rilasciando e ricreando tutte le tabelle. B/62185732 - Valori predefiniti dello schema: ora
@ColumnInfo
ha una nuova proprietàdefaultValue
che può essere utilizzato per specificare il valore predefinito di una colonna. I valori predefiniti sono parte di uno schema di database e verrà convalidata durante le migrazioni specificato. B/64088772Nota: se lo schema del database include già lo schema predefinito come quelli aggiunti tramite
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
e decidi di definire valori predefiniti tramite@ColumnInfo
nel stesse colonne, potresti dover eseguire una migrazione per convalidare valori predefiniti non considerati. Consulta: Migrazioni delle stanze per ulteriori informazioni. - Relazioni di molti tipi: ora
@Relation
ha una nuova proprietàassociateBy
, che accetta una nuova annotazione@Junction
, utilizzata per dichiarare una relazione deve essere soddisfatto tramite una tabella di giunzione (nota anche come tabella di join). b/69201917 - Relazioni one-to-one: la limitazione nei campi POJO annotati con
@Relation
di tipoList
oSet
è stato rimosso, efficacemente consentendo la rappresentazione delle relazioni con un singolo valore. b/62905145 - Entità di destinazione: le annnotazioni DAO
@Insert
,@Update
e@Delete
ora ha una nuova proprietàtargetEntity
, che consente di specificare la tabella di destinazione Lo scopo del metodo DAO è intervenire. In questo modo, i parametri di questi DAO essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. B/127549506 - Processore di annotazioni incrementali Gradle: la stanza virtuale è ora un elemento di isolamento Gradle
il processore di annotazione e l'incrementalità possono essere abilitati
l'opzione
room.incremental
. Consulta: Opzioni del compilatore della stanza per ulteriori informazioni. In caso di problemi, invia una qui. Prevediamo di attivare l'incrementalità per impostazione predefinita in una versione stabile e futura. B/112110217
Correzioni di bug
- La stanza non propagherà più
EmptySetResultException
al gestore degli errori globale quando il flusso Rx di una query è stato eliminato in precedenza se la query viene completata. b/130257475 - È stato corretto un bug per cui la stanza virtuale mostrava un messaggio di errore errato quando una sospensione
La funzione DAO 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
La stanza 2.1.0 viene rilasciata senza modifiche a partire dal giorno 2.1.0-rc01
. I commit inclusi nella versione sono disponibili qui.
Modifiche importanti dalla versione 2.0.0
- FTS: la stanza virtuale ora supporta le entità con una mappatura
Tabella FTS3 o FTS4. Classi con annotazioni
Ora
@Entity
può essere ulteriormente annotato con@Fts3
o@Fts4
una classe con una tabella di ricerca di ricerca a testo intero di mappatura. FTS per ulteriori informazioni sono disponibili tramite i metodi dell'annotazione. - Visualizzazioni: la stanza virtuale ora supporta la dichiarazione di una classe come query archiviata, nota anche
come vista, utilizzando
@DatabaseView
. - Couroutine: i metodi DAO ora possono essere funzioni di sospensione. Includi
room-ktx
nelle tue dipendenze per sfruttare questa funzionalità. L'artefatto ktx offre anche la funzione di estensioneRoomDatabase.withTransaction
per l'esecuzione di transazioni di database all'interno di una coroutine. - Valore automatico: la stanza ora supporta la dichiarazione
Valore automatico
come entità e POJO. Le annotazioni della stanza
@PrimaryKey
, Ora@ColumnInfo
,@Embedded
e@Relation
possono essere dichiarati in un i metodi astratti delle classi con valore annotato. Tieni presente che anche questa annotazione deve essere accompagnati da@CopyAnnotations
affinché la stanza virtuale possa comprenderli correttamente. - Ulteriore supporto asincrono: metodi DAO annotati con
@Insert
,@Delete
o@Update
, insieme a@Query
contenenteINSERT
,DELETE
oUPDATE
ora supportano i tipi di restituzione RxCompletable
,Single
,Maybe
, e il tipo restituito di GuavaListenableFuture
. Inoltre, possono essere sospesi funzioni. enableMultiInstanceInvalidation
è una nuova API inRoomDatabase.Builder
per abilitare l'annullamento della convalida su più istanze di RoomDatabase utilizzando lo stesso in un 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 elenca i campi ignorati per nome.- La stanza virtuale utilizzerà correttamente il costruttore principale di Kotlin nelle classi di dati
evitando di dichiarare le proprietà come
vars
.
Versione 2.1.0-rc01
29 maggio 2019
Correzioni di bug
- Risolto un errore di inizializzazione della stanza che poteva verificarsi a causa di una configurazione già configurazione temp_store. B/132602198
- È stato corretto un avviso di utilizzo delle virgolette doppie per gli utenti con SQLite 3.27.0 e versioni successive. B/131712640
- È stato corretto un bug per cui InvalidationTracker causava un arresto anomalo quando più i controlli di annullamento della convalida vengono eseguiti in parallelo. B/133457594
Versione 2.1.0-beta01
7 maggio 2019
androidx.room 2.1.0-beta01
viene rilasciato senza modifiche dalla 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 / API
- La funzione di estensione
RoomDatabase.withTransaction
è stata modificata in non utilizzare più un blocco funzione con unCoroutineScope
come ricevitore. In questo modo si evita di saltare il wrappercoroutineScope { }
aggiuntivo necessario per eseguire contemporaneamente elementi nel blocco Transaction.
Correzioni di bug
- È stato corretto un bug per cui la stanza non corrispondeva a un TypeConverter per un DAO Kotlin contenente un parametro del tipo di raccolta. B/122066791
Versione 2.1.0-alpha06
22 marzo 2019
Modifiche al comportamento / API
- Le query sulle transazioni asincrone ora sono serializzate in modo che la stanza non utilizzi
più di un thread per l'esecuzione di transazioni di database.
RoomDatabase.Builder.setTransactionExecutor(Executor)
è stato aggiunto per consentire e configurare l'esecutore per le transazioni. - La casella di controllo di
RoomDatabase.runInTransaction(Callable)
non sarà più selezionata in RuntimeEccezioni. b/128623748
Correzioni di bug
- È stato corretto un bug per cui il tracker di invalidazione smetteva di osservare un contenuto se osservatori sia per la tabella dei contenuti sia per un FTS di contenuti esterni . B/128508917
- Aggiornata la grammatica SQLite di Room per corrispondere a SQLite 3.24.0. B/110883668
Versione 2.1.0-alpha05
13 marzo 2019
Nuove funzionalità
- La funzione di estensione
RoomDatabase.withTransaction
consente di eseguire in sicurezza transazioni di database all'interno di una coroutine. Le funzioni delle estensioni della stanza, insieme al supporto delle coroutine, sono disponibili nell'elementoroom-ktx
. - I metodi DAO non astratti annotati con
@Transaction
ora possono essere funzioni di sospensione. b/120241587
Modifiche al comportamento / API
- L'elemento
room-coroutines
è stato rinominato inroom-ktx
seguendo la stessa denominazione degli altri elementi Androidx. beginTransaction
,setTransactionSuccessful
eendTransaction
inRoomDatabase
sono stati deprecati a favore dirunInTransaction
e della funzione di estensioneroom-ktx
withTransaction
.
Correzioni di bug
- È stato corretto un bug per cui gli argomenti del tokenizzatore venivano eliminati se il tokenizzatore utilizzato era SEMPLICE. B/125427014
- È stato corretto un bug per cui la stanza virtuale non identificava correttamente le funzioni di sospensione con parametri di tipo una classe interna. B/123767877
- È stato corretto un bug per cui il metodo DAO
@Query
differito con istruzioniINSERT
,UPDATE
oDELETE
stava preparando con entusiasmo la query nel thread principale. b/123695593 - Sono stati corretti vari bug per cui Room generava un codice errato per alcune funzioni di sospensione. b/123466702 e b/123457323
- È stato corretto un bug per cui l'utilizzo deprecato dei metodi non veniva correttamente soppresso nel codice generato. B/117602586
- Dipendenza stanza aggiornata di androidx.sqlite alla versione 1.0.2, che contiene correzioni per la gestione corretta dei database danneggiati. B/124476912
Problemi noti
- La stanza 2.1.0-alpha05 dipende dall'artefatto
kotlinx-metadata-jvm
che non è attualmente disponibile in Maven Central (KT-27991). Questa dipendenza può essere risolta aggiungendomaven { url "https://kotlin.bintray.com/kotlinx/" }
ai repository del tuo progetto.
Versione 2.1.0-alpha04
25 gennaio 2019
Nuove funzionalità
- I metodi DAO annotati con
@Query
contenenti istruzioniINSERT
,UPDATE
oDELETE
ora possono restituire tipi asincroniSingle
,Mayble
,Completable
eListenableFuture
. Possono anche essere funzioni di sospensione. B/120227284
Modifiche al comportamento / API
- La stanza virtuale restituirà un errore se un metodo DAO non astratto annotato con
@Transaction
restituisce un tipo asincrono, ad esempioSingle
,Mayble
,Completable
,LiveData
oListenableFuture
. Poiché le transazioni sono confinate nei thread, attualmente è impossibile per le stanze virtuali iniziare e terminare una transazione relativa a una funzione che può eseguire query in thread diversi. B/120109336 OnConflictStrategy.FAIL
eOnConflictStrategy.ROLLBACK
sono stati@Deprecated
perché non si comportano come previsto con le attuali associazioni SQLite di Android. b/117266738
Correzioni di bug
- È stato corretto un bug per cui Room non utilizzava correttamente il TypeConverter di un tipo restituito se il metodo DAO era una funzione di sospensione. B/122988159
- È stato corretto un bug per cui la stanza virtuale identificava erroneamente le funzioni di sospensione ereditate come non in sospeso. B/122902595
- È stato corretto un bug per cui la stanza virtuale generava un codice errato quando un campo
@Embedded
era in una classe principale e veniva utilizzato in più corsi secondari. b/121099048 - Risolto un problema per cui il database si bloccava durante la chiamata a funzioni di sospensione DAO tra
beginTransaction()
eendTransaction()
. B/120854786
Versione 2.1.0-alpha03
4 dicembre 2018
Modifiche alle API
- L'FTS
tokenizer
in@Fts3
/@Fts4
ora prende una stringa anziché un'enum. Ciò consente l’utilizzo di tokenizzatori personalizzati da parte delle stanze. I tokenizzatori integrati sono ancora definiti inFtsOptions
come costanti stringa. b/119234881
Nuove funzionalità
- Couroutine: i metodi DAO ora possono essere funzioni di sospensione. Per supportare le funzioni di sospensione nella stanza virtuale, è 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 la stanza virtuale cercava erroneamente di trovare un costruttore con colonne nella proprietà
ignoredColumns
di@Entity
. B/119830714 - È stato corretto un bug per cui Room non contrassegnava i parametri del metodo DAO come definitivi nell'implementazione generata. B/118015483
- È stato corretto un bug per cui il processore della stanza si arrestava in modo anomalo se veniva segnalato un errore relativo a una query con simboli speciali. B/119520136
- È stato corretto un bug per cui Room avrebbe rifiutato altre varie implementazioni di
Collection
come argomenti di un'espressioneIN
. B/119884035 - È stato corretto un bug per cui i LiveData restituiti dalla stanza avrebbero ricevuto la garbage collection quando osservati per sempre, causando l'interruzione dell'emissione di nuovi dati. B/74477406
- Blocco di
RoomDatabase
aggiornato per ridurne il conflitto. b/117900450
Versione 2.1.0-alpha02
30 ottobre 2018
Nuove funzionalità
- È stato aggiunto il supporto per fare riferimento a
@DatabaseView
in un@Relation
. B/117680932
Correzioni di bug
- È stato corretto un bug per cui Room eseguiva l'I/O del disco nel thread principale durante la sottoscrizione e l'eliminazione da un tipo restituito Rx. B/117201279
- È stato corretto un bug per cui la stanza virtuale non riusciva a trovare un convertitore dei tipi appropriato per un campo in una classe di entità Kotlin. B/111404868
- È stato corretto un bug per cui Room generava codice errato per un'implementazione dell'interfaccia
DAO
contenente un metodo predefinito Kotlin senza argomenti. b/117527454 - Aggiornamento del parser grammaticale SQLite di Room, in modo da risolvere un problema di prestazioni che causava tempi di compilazione lunghi. B/117401230
Versione 2.1.0-alpha01
8 ottobre 2018
Nuove funzionalità
- FTS: la stanza virtuale ora supporta le entità con una tabella FTS3 o FTS4 di mappatura. Ora le classi annotate con
@Entity
possono essere ulteriormente annotate con@Fts3
o@Fts4
per dichiarare una classe con una tabella di ricerca a testo intero di mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione. B/62356416 - Visualizzazioni: la stanza virtuale ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, mediante l'annotazione @DatabaseView. B/67033276
- Valore automatico: la stanza virtuale ora supporta la dichiarazione delle classi annotate con Valore automatico come entità e POJO. Ora le annotazioni delle stanze
@PrimaryKey
,@ColumnInfo
,@Embedded
e@Relation
possono essere dichiarate nei metodi astratti di una classe annotata con valori automatici. Tieni presente che queste annotazioni devono anche essere accompagnate da@CopyAnnotations
affinché la stanza virtuale possa interpretarle correttamente. b/62408420 - Supporto aggiuntivo per i tipi di reso Rx: i metodi DAO annotati con
@Insert
,@Delete
o@Update
ora supportano i tipi restituiti RxCompletable
,Single<T>
eMaybe<T>
. B/63317956 - Tipi immutabili con
@Relation
: in precedenza, la stanza virtuale richiedeva che i campi annotati@Relation
fossero configurabili, ma ora possono essere parametri del costruttore. enableMultiInstanceInvalidation
: è una nuova API inRoomDatabase.Builder
che consente l'annullamento della convalida in più istanze di RoomDatabase utilizzando lo stesso file di database. Questo meccanismo di invalidazione di più istanze funziona anche su più processi. B/62334005fallbackToDestructiveMigrationOnDowngrade
: è una nuova API inRoomDatabase.Builder
che ricrea 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 su un'entità. B/63522075
Modifiche al comportamento / API
mCallback
emDatabase
inRoomDatabase
adesso sono@Deprecated
e verranno rimossi nella prossima versione principale di Stanza virtuale. b/76109329
Correzioni di bug
- Sono stati risolti due problemi per cui la stanza virtuale non veniva recuperata correttamente da un database danneggiato o da una migrazione errata durante l'inizializzazione. b/111504749 e b/111519144
- Ora Room utilizzerà correttamente il costruttore principale di Kotlin nelle classi di dati, evitando 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 dalla versione 2.0.0-rc01.
Versione 2.0.0-rc01
20 settembre 2018
androidx.room 2.0.0-rc01
viene rilasciato senza modifiche dalla versione 2.0.0-beta01.
Versione 2.0.0-beta01
2 luglio 2018
Modifiche al comportamento / API
- È stato aggiunto
RoomDatabase.Builder.setQueryExecutor()
per consentire la personalizzazione della posizione in cui vengono eseguite le query - Aggiunto il supporto RxJava2
Observable
- Le implementazioni DAO e database generate sono ora definitive
Correzioni di bug
- Specifica il nome della classe/del campo in "impossibile trovare il getter per il campo" errore b/73334503
- È stata corretta la compatibilità con le versioni precedenti di RoomOpenHelper con le versioni precedenti della stanza 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
Abbiamo moltissimo
consiglia di utilizzare la stanza 1.1.1-rc1
anziché 1.1.0
se utilizzi le migrazioni.
È stato corretto un bug per cui la stanza virtuale non gestiva correttamente l'inizializzazione successiva alla migrazione b/79362399
Versione 1.1.0
Versione 1.1.0-beta3
19 aprile 2018
Correzioni di bug
- Correggi l'errore di compilazione quando un POJO Kotlin fa riferimento a un'entità di relazione che è stato definito in Java b/78199923
Versione 1.1.0-beta2
5 aprile 2018
Correzioni di bug
È stato corretto un bug critico nelle implementazioni Rx
Single
eMaybe
della stanza in cui ricicla la query in anticipo, causando problemi se ne aggiungi più di una osservatore alle istanzeSingle
oMaybe
restituite. B/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] non
VACUUM
il database se viene chiamato in 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ù di trasmettereString
come parametro di query. Devi usare [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (vedi [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] per creare facilmente un'istanza di [SupportSQLiteQuery][ref-SupportSQLiteQuery] con supporto per 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 lo spazio al sistema operativo impostando un checkpoint WAL ed
VACUUM
ingendo il database. - [
@RawQuery
][ref-RawQuery] ora accetta qualsiasi Pojo per la proprietàobservedEntities
, purché il Pojo faccia riferimento a una o più entità tramite i relativi campiEmbedded
oRelation
. b/74041772 - Paging: l'implementazione DataSource di Room ora gestisce correttamente le dipendenze multi-tabella (come relazioni e join). In precedenza, questi ultimi non attivavano nuovi risultati o non venivano compilati. B/74128314
Versione 1.1.0-alpha1
22 gennaio 2018
Nuove funzionalità
RawQuery
: questa nuova API consente ai metodi@Dao
di ricevere il codice SQL come parametro di query b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: questa nuova API inRoomDatabase.Builder
consente controllo granulare su cui vengono eseguite le migrazioni distruttive delle versioni iniziali dello schema. consentito (rispetto a fallbackToDestructiveMigration) B/64989640- Ora Room supporta solo le API di paging più recenti (alpha-4+), eliminando il supporto per le API deprecate
LivePagedListProvider
. Per usare la nuova versione alpha della stanza virtuale, dovrai usare il pagingalpha-4
o superiore e passa 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