Room
Aggiornamento più recente | Release stabile | Candidato per l'uscita | Versione beta | Release alpha |
---|---|---|---|---|
10 luglio 2024 | 2.6.1 | - | - | 2.7.0-alpha05 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza a Room, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.
Le dipendenze per le stanze virtuali includono il test delle migrazioni delle stanze e Room RxJava
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle
per
l'app o il modulo:
Alla moda
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 (ovvero i moduli Gradle solo Java o Kotlin)
puoi dipendere da androidx.room:room-common
per utilizzare le annotazioni delle stanze.
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 nella directory specificata. Per ulteriori informazioni, consulta Migrazioni delle stanze. |
room.incremental |
boolean
Abilita il processore di annotazione incrementale Gradle. Il valore predefinito è true .
|
room.generateKotlin |
boolean
Genera file di origine 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 2.6.0 e versioni successive, puoi utilizzare il plug-in Room Gradle 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.
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 utilizza l'estensione 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
. In questo modo verranno configurati il compilatore Room e le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) per generare i file di schema in cartelle personalizzate, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Questi file devono essere archiviati 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 per Room Gradle, anche se sono supportate dal compilatore Room. La tabella seguente elenca ogni opzione e mostra la versione del plug-in Room Gradle che ha aggiunto il supporto per la configurazione dell'opzione utilizzando l'estensione room
. Se la tua versione è precedente o se l'opzione non è ancora supportata, puoi utilizzare le 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 è supportata dalla tua versione del plug-in, puoi configurare Room utilizzando le opzioni del processore di annotazione, come descritto in Aggiungere dipendenze build. Il modo in cui specifica le opzioni di annotazione dipende dall'uso o meno di KSP o KAPT per Room.
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 Gradle sia a conoscenza di questa directory quando esegue controlli aggiornati.
Esegui 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. Facci sapere se scopri nuovi problemi o hai idee per migliorare questa raccolta. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Versione 2.7
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 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 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
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 e 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 potrebbero verificarsi 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) {6815/9}Nota: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 avrà bisogno del suffisso ".Companion" per accedere 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 dell'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
- Aggiunto il supporto per le proprietà interne nelle origini Kotlin.
Si tratta di un leggero cambiamento del comportamento nella stanza virtuale in cui verrà utilizzato il nome
di origine delle funzioni abbinandole alle proprietà come getter/setter
(in precedenza, utilizzava il nome JVM della funzione, che era diverso
per le funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per abbinare getter/setter a proprietà private, controlla attentamente il codice generato dopo l'aggiornamento (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
- Aggiunto il supporto per le proprietà interne nelle origini Kotlin.
Si tratta di un leggero cambiamento del comportamento nella stanza virtuale in cui verrà utilizzato il nome
di origine delle funzioni abbinandole alle proprietà come getter/setter
(in precedenza, utilizzava il nome JVM della funzione, che era diverso
per le funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per abbinare getter/setter a proprietà private, controlla attentamente il codice generato dopo l'aggiornamento (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 prende in considerazione le informazioni sui valori null nei tipi. Poiché queste informazioni sono disponibili solo nel punto di forza principale, sono attive per impostazione predefinita solo nel punto di forza principale. Se causa problemi, puoi disattivarlo passando room.useNullAwareTypeAnalysis=false al processore di annotazione. In questo caso, segnala un bug poiché questo flag verrà rimosso in futuro. Con questo nuovo analizzatore TypeConverter, ti consigliamo di fornire solo TypeConverter che ricevono non null, in quanto il nuovo analizzatore ha la possibilità di aggregarli con un controllo nullo. Tieni presente che questo non ha alcun impatto per gli utenti che utilizzano KAPT o Java come processori di annotazione (a differenza di KSP). I tipi non contengono informazioni sui valori nulli. (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 con 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 PagingSource generata da room-paging ora utilizza l'elemento
queryExecutor
trasmesso tramiteRoomDatabase.Builder
, quindi è possibile eseguirne l'override, 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 multimap 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 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 questo cambiamento 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 extra 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
- Ora la stanza virtuale utilizzerà per impostazione predefinita
beginTransactionNonExclusive
se la modalità WAL è abilitata e l'API ha almeno 16 anni. 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
Aggiorna la documentazione TypeConverters per chiarire che TypeConverters può essere utilizzato solo per convertire colonne / campi e non 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 la copia di un database predefinito. (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: in
RoomDatabase.Builder
sono ora disponibili due nuove API per la creazione di unRoomDatabase
in base a un file di database già compilato.createFromAsset()
è quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentrecreateFromFile()
è quando il file si trova in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento delle migrazioni distruttive, pertanto durante una migrazione di riserva, Room proverà a ricopiare il database precompilato, se disponibile, altrimenti scaricherà e ricrea 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, se specificati, verranno convalidati durante le migrazioni. b/64088772 - Relazioni più richieste: ora
@Relation
ha una nuova proprietàassociateBy
, che accetta una nuova annotazione@Junction
, utilizzata per dichiarare una relazione che deve essere soddisfatta 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
come di tipoList
oSet
è stata rimossa, consentendo di fatto la rappresentazione delle relazioni a un singolo valore. b/62905145 - Entità target: le annnotazioni 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 ai parametri di questi metodi DAO di 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 set di valori se le tabelle di osservazione nella query vengono invalidate. Dichiarare una funzione DAO con un tipo restituitoChannel<T>
è un errore. Room ti incoraggia invece a utilizzareFlow
e a usare le funzioni di vicinanza per convertireFlow
inChannel
. B/130428884 - Processore di annotazioni incrementali di Gradle: la stanza virtuale è ora un processore di annotazione con isolamento di Gradle, ed è possibile abilitare l'incremento tramite l'opzione del processore
room.incremental
. Per ulteriori informazioni, vedi Opzioni del compilatore delle stanze. In caso di problemi, segnala un bug qui. Prevediamo di abilitare l'incrementalità per impostazione predefinita in una versione stabile futura. b/112110217 - Espansione delle proiezioni: è stata aggiunta una nuova opzione sperimentale del compilatore
room.expandProjection
che consente a Room di riscrivere una query con una proiezione a stella in modo da contenere solo le colonne nel POJO di tipo restituito. Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. Room riscriverà la query inSELECT id, title FROM Song
in modo che venga recuperato l'insieme minimo di colonne per soddisfare il tipo restituito. Sostanzialmente, elimina l'avvisoCURSOR_MISMATCH
che viene presentato quando la query restituisce colonne aggiuntive che non corrispondono a nessun campo nel tipo POJO che restituisce.
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 set di valori se le tabelle di osservazione nella query vengono invalidate. Dichiarare una funzione DAO con un tipo restituitoChannel<T>
è un errore. Room ti incoraggia invece a utilizzareFlow
e a usare le funzioni di vicinanza per convertireFlow
inChannel
. B/130428884 - Espansione delle proiezioni: è stata aggiunta una nuova opzione sperimentale del compilatore
room.expandProjection
che consente a Room di riscrivere una query con una proiezione a stella in modo da contenere solo le colonne nel POJO di tipo restituito. Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. Room riscriverà la query inSELECT id, title FROM Song
in modo che venga recuperato l'insieme minimo di colonne per soddisfare il tipo restituito. Sostanzialmente, elimina l'avvisoCURSOR_MISMATCH
che viene presentato quando la query restituisce colonne aggiuntive che non corrispondono a nessun campo nel tipo POJO che restituisce. 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 campi quando il campo è protetto. b/136194628
- È stato corretto un bug che causava la generazione di un NPE da parte di InvalidationTracker in un secondo processo quando l'invalidazione di più istanze veniva abilitata e il servizio di invalidazione veniva interrotto. b/137454915
- È stato corretto un bug per cui Room non identificava correttamente il tipo restituito di una funzione di sospensione ereditata annotata con
@RawQuery
. B/137878827 - È stato aggiornato il 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 di setter su POJO utilizzati come
parametri di entità parziali di
@Insert
,@Update
e@Delete
. B/138664463 - È stato corretto un bug per cui Room si lamentava della mancanza di getter e setter per una colonna ignorata tramite
@Entity
quando la classe entità veniva utilizzata in determinati metodi DAO. b/138238182 - È stato corretto un bug per cui la stanza virtuale non convertiva correttamente gli argomenti di associazione 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 predefinito: in
RoomDatabase.Builder
sono ora disponibili due nuove API per la creazione di unRoomDatabase
in base a un file di database già compilato.createFromAsset()
è quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentrecreateFromFile()
è quando il file si trova in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento delle migrazioni distruttive, pertanto durante una migrazione di riserva, Room proverà a ricopiare il database precompilato, se disponibile, altrimenti scaricherà e ricrea 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, se specificati, verranno convalidati durante le migrazioni. b/64088772Nota: se lo schema del tuo database include 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
nelle stesse colonne, potrebbe essere necessario eseguire una migrazione per convalidare i valori predefiniti non considerati. Per ulteriori informazioni, consulta Migrazioni delle stanze. - Relazioni più richieste: ora
@Relation
ha una nuova proprietàassociateBy
, che accetta una nuova annotazione@Junction
, utilizzata per dichiarare una relazione che deve essere soddisfatta 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
come di tipoList
oSet
è stata rimossa, consentendo di fatto la rappresentazione delle relazioni a un singolo valore. b/62905145 - Entità target: le annnotazioni 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 ai parametri di questi metodi DAO di essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506 - Processore di annotazioni incrementali di Gradle: la stanza virtuale è ora un processore di annotazione con isolamento di Gradle, ed è possibile abilitare l'incremento tramite l'opzione del processore
room.incremental
. Per ulteriori informazioni, vedi Opzioni del compilatore delle stanze. In caso di problemi, segnala un bug qui. Prevediamo di abilitare l'incrementalità per impostazione predefinita in una versione stabile futura. b/112110217
Correzioni di bug
- La stanza non propagherà più
EmptySetResultException
al gestore degli errori globale quando il flusso Rx di una query viene eliminato prima del completamento della query. b/130257475 - È stato corretto un bug per cui la stanza virtuale mostrava un messaggio di errore errato quando una funzione DAO di sospensione annotata con
@RawQuery
non aveva un tipo restituito. b/134303897 - La stanza 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 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 di annotazione. - Visualizzazioni: la stanza virtuale ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, tramite l'annotazione
@DatabaseView
. - Couroutine: 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 le transazioni del database all'interno di una coroutine. - 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. - Supporto asincrono aggiuntivo: i metodi DAO annotati con
@Insert
,@Delete
o@Update
, insieme alle istruzioni@Query
contenenti istruzioniINSERT
,DELETE
oUPDATE
, ora supportano i tipi restituiti RxCompletable
,Single
,Maybe
e il tipo restituito di GuavaListenableFuture
. Possono anche essere funzioni di sospensione. enableMultiInstanceInvalidation
è una nuova API inRoomDatabase.Builder
che consente l'annullamento della convalida in più istanze di RoomDatabase utilizzando lo stesso file di database.fallbackToDestructiveMigrationOnDowngrade
è una nuova API inRoomDatabase.Builder
che ricrea 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 della stanza che poteva verificarsi a causa di una configurazione temp_store già impostata. 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ù controlli di invalidazione venivano 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 modo da non prendere più un blocco funzione con unCoroutineScope
come ricevitore. Questo impedisce di saltare il wrappercoroutineScope { }
aggiuntivo necessario per eseguire contemporaneamente gli elementi nel blocco delle transazioni.
Correzioni di bug
- È stato corretto un bug per cui Room non corrispondeva a un TypeConverter per una funzione DAO Kotlin contenente un parametro di tipo di raccolta. b/122066791
Versione 2.1.0-alpha06
22 marzo 2019
Modifiche al comportamento / API
- Le query di transazione asincrone ora sono serializzate in modo che la stanza virtuale non utilizzi più di un thread per eseguire le transazioni del database.
È stato aggiunto
RoomDatabase.Builder.setTransactionExecutor(Executor)
per consentire di configurare l'esecutore da utilizzare per le transazioni. RoomDatabase.runInTransaction(Callable)
non aggrega più le eccezioni selezionate in RuntimeEccezioni. b/128623748
Correzioni di bug
- È stato corretto un bug per cui il tracker di invalidazione smetteva di osservare una tabella dei contenuti se venivano aggiunti osservatori sia per la tabella dei contenuti sia per una tabella FTS dei contenuti esterni. b/128508917
- È stata aggiornata la grammatica SQLite di Room 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
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 Room non riusciva a identificare 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
preparava 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 eliminato nel codice generato. b/117602586
- Dipendenza della stanza aggiornata di androidx.sqlite alla versione 1.0.2, che contiene correzioni per la corretta gestione 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
. Inoltre, 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 tra thread, al momento è 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 Room generava un codice errato quando un campo
@Embedded
era in una classe padre e veniva utilizzato in più classi figlio. 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 comunque 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 si verificava un arresto anomalo del processore della stanza virtuale 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 dati LiveData restituiti dalla stanza avrebbero ricevuto la garbage collection quando osservati per sempre, con la conseguente interruzione dell'emissione di nuovi dati. b/74477406
- Il blocco di
RoomDatabase
è stato 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, per la risoluzione di 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 utilizzati per le annotazioni. 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 essere accompagnate anche dal codice@CopyAnnotations
affinché la stanza virtuale possa comprenderle 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 della stanza. 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 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 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
Ti consigliamo vivamente di
utilizzare la stanza 1.1.1-rc1
anziché 1.1.0
se utilizzi le migrazioni.
Risolto un bug per cui la stanza virtuale non gestiva correttamente l'inizializzazione post 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 definita 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 la query veniva riciclata anticipatamente, causando problemi se si aggiungeva 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ù 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 multitabella (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 l'SQL come parametro di query b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: questa nuova API inRoomDatabase.Builder
consente un controllo granulare e più fine da cui sono consentite le migrazioni distruttive delle versioni dello schema di avvio (rispetto a fallbackToDestructiveMigration) b/64989640- Ora Room supporta solo le API di paging più recenti (alpha-4 e versioni successive e non sarà più supportato l'
LivePagedListProvider
) deprecato. Per utilizzare la nuova versione alpha della stanza virtuale, devi utilizzare il pagingalpha-4
o una versione successiva e, se non l'hai ancora fatto, passare daLivePagedListProvider
aLivePagedListBuilder
.
Correzioni di bug
- Supporto migliorato per i tipi Kotlin Kapt. b/69164099
- L'ordine dei campi non invalida più lo schema. b/64290754