Aggiornamento più recente | Release stabile | Candidato per la release | Versione beta | Release alpha |
---|---|---|---|---|
12 giugno 2024 | 2.6.1 | - | - | 2.7.0-alpha04 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza alla stanza virtuale, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.
Le dipendenze per le stanze includono migrazioni delle stanze di test e RxJava delle stanze.
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle
per
l'app o il modulo:
trendy
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'uso del plug-in KAPT, consulta la documentazione KAPT.
Per informazioni sull'utilizzo del plug-in KSP, consulta la documentazione di avvio rapido di KSP.
Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione ktx.
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze build.
Facoltativamente, per le librerie non Android (ovvero moduli Gradle Java o Kotlin solo per Kotlin)
puoi dipendere da androidx.room:room-common
per l'utilizzo delle annotazioni Room.
Configurazione delle opzioni del compilatore
La stanza virtuale ha le seguenti opzioni per il processore di annotazioni.
room.schemaLocation |
directory
Consente di esportare gli schemi di database in file JSON nella directory specificata. Per ulteriori informazioni, consulta Migrazioni delle stanze. |
room.incremental |
boolean
Abilita il processore di annotazioni incrementali Gradle. Il valore predefinito è true .
|
room.generateKotlin |
boolean
Genera file sorgente Kotlin anziché Java. Richiede il principale punto di forza. Il valore predefinito è false .
Per ulteriori dettagli, vedi le note sulla versione 2.6.0.
|
Utilizza 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 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.
trendy
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'estensione room
.
trendy
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
. Il compilatore Room e le varie attività di compilazione e i relativi backend verranno configurati
(javac, KAPT, KSP) per l'output dei file di schema in cartelle personalizzate, ad esempio
schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Questi file devono essere controllati nel repository per essere utilizzati per la convalida e le migrazioni automatiche.
Alcune opzioni non possono essere configurate in tutte le versioni del plug-in 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 di tale 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 annotazioni
Se non utilizzi il plug-in Room Gradle o se l'opzione desiderata non è supportata dalla tua versione del plug-in, puoi configurare la stanza utilizzando le opzioni del processore di annotazione, come descritto in Aggiungere dipendenze build. Il modo in cui specifichi le opzioni di annotazione dipende dall'utilizzo o meno di KSP o KAPT per la camera.
trendy
// 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 usare un CommandLineArgumentsProvider
quando aggiungi questa opzione in modo che Gradle sappia della 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 rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Versione 2.7
Versione 2.7.0-alpha04
12 giugno 2024
androidx.room:room-*:2.7.0-alpha04
viene rilasciato. La versione 2.7.0-alpha04 contiene questi commit.
Correzioni di bug
- Risolto il problema nel processore di annotazioni della sala che generava un codice KMP incompatibile quando veniva definito un tipo restituito da più mappe in un DAO. (b/340983093)
- Risolto il problema per cui la stanza non riusciva a trovare l'implementazione del database generata se la classe annotata
@Database
non aveva pacchetti. (b/342097292) - Risolto il problema per cui l'abilitazione della chiusura automatica e dell'annullamento della convalida di più istanze a volte causava un evento
ConcurrentModificationException
quando il database veniva chiuso automaticamente per inattività.
Versione 2.7.0-alpha03
29 maggio 2024
androidx.room:room-*:2.7.0-alpha03
viene rilasciato. La versione 2.7.0-alpha03 contiene questi commit.
Correzioni di bug
- Risolvere diversi 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 di comportamento nel nuovo compilatore. (b/314151707)
Versione 2.7.0-alpha02
14 maggio 2024
androidx.room:room-*:2.7.0-alpha02
viene rilasciato. La versione 2.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Risolti vari problemi del principale punto di forza.
Versione 2.7.0-alpha01
1° maggio 2024
androidx.room:room-*:2.7.0-alpha01
viene rilasciato. La versione 2.7.0-alpha01 contiene questi commit.
Nuove funzionalità
- Supporto Kotlin Multiplatform (KMP): in questa release, è stato eseguito il refactoring di Room per diventare una libreria Kotlin Multiplatform (KMP). Anche se c'è ancora del lavoro da fare, questa release introduce una nuova versione di Room in cui la maggior parte delle funzionalità è "common-ized" (reso per essere multipiattaforma). Le attuali piattaforme supportate sono Android, iOS, JVM (computer), Mac nativo e Linux nativo. Eventuali funzionalità mancanti nelle nuove piattaforme supportate verranno rese "complete" nelle prossime release delle stanze.
Per saperne di più su come iniziare a utilizzare Room KMP, consulta la documentazione ufficiale di Room KMP.
- La generazione di codice Kotlin sul KSP è stata attivata per impostazione predefinita se l'elaborazione viene eseguita tramite il principale punto di forza. Per i progetti KAPT o solo Java, la stanza virtuale genererà comunque origini Java.
Modifiche alle API
- È stato aggiunto un sovraccarico di
Room.databaseBuilder()
che accetta un parametro lambda da utilizzare con una funzione generata da una stanza virtuale per evitare di utilizzare la riflessione durante la creazione dell'istanza dell'implementazioneRoomDatabase
generata. Esempio di utilizzo:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Un'API per la configurazione di una stanza virtuale con
CoroutineContext
è stata aggiunta allo strumento di creazione:RoomDatabase.Builder.setQueryCoroutineContext
. Tieni presente che unRoomDatabase
può essere configurato solo con esecutori che utilizzanosetQueryExecutor
o con un contesto Coroutine, ma non con entrambi. - È stata aggiunta un'API per la configurazione di una stanza virtuale con un driver
SQLite
:RoomDatabase.Builder.setDriver()
. Per saperne di più sull'API DriverSQLite
, consulta la documentazione SQLite KMP - Sono state aggiunte le API per accedere all'
SQLiteConnection
sottostante dalle API driver:RoomDatabase.useReaderConnection
eRoomDatabase.useWriterConnection
. - I callback correlati a Varios Room ora hanno una versione sovraccaricata che riceve
SQLiteConnection
anzichéSupportSQLiteDatabase
. Questi valori sono destinati a essere sostituiti durante la migrazione a un progetto KMP. Per saperne di più 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 aandroidx.room:room-runtime
insieme a tutte le relative API. L'elemento è ora vuoto. Rimuovila dall'elenco delle dipendenze.
Versione 2.6
Versione 2.6.1
29 novembre 2023
androidx.room:room-*:2.6.1
viene rilasciato. La versione 2.6.1 contiene questi commit.
Correzioni di bug
- È stato risolto il problema nel codice generato in cui il valore predefinito per le colonne doppie in
EntityCursorConverter
veniva impostato su 0 anziché su 0,0. È stata inclusa anche una possibile correzione per un caso limite simile per le colonne di tipo Float. (Id75f5, b/304584179) - Le eccezioni generate dai caricamenti di
PagingSource
verranno ora propagate comeLoadStateUpdate
diLoadResult.Error
contenente il file Throwable. Questo stato di errore è osservabile tramitePagingDataAdapter.loadStateFlow(Views)
oLazyPagingItems.loadState(Compose)
. Tieni presente che ciò contrassegna un cambiamento di comportamento in cui gli errori di caricamento precedenti appaiono come un'eccezione generata dal metodo dao che ha attivato il caricamento. (I93887, b/302708983)
Versione 2.6.0
18 ottobre 2023
androidx.room:room-*:2.6.0
viene rilasciato. La versione 2.6.0 contiene questi commit.
Modifiche importanti dalla versione 2.5.0
- L'opzione per attivare la generazione di codice Kotlin (o "Kotlin CodeGen") è ora disponibile nel KSP della stanza. (4297ec0). Per attivare Kotlin CodeGen nella stanza virtuale, aggiungi il nome dell'opzione
room.generateKotlin
alle opzioni del processore per il KSP. Per ulteriori dettagli su come passare le opzioni del processore per il principale punto di forza, consulta la documentazione relativa al principale punto di forza.
Nota: quando utilizzi Kotlin CodeGen, è importante tenere presente che sono state aggiunte ulteriori 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 archiviato fisso. Un'altra limitazione aggiunta riguarda il fatto che i tipi restituiti di raccolte nullable non sono più consentiti nella stanza virtuale per Kotlin CodeGen.
Avviso:potresti notare che i tuoi progetti sono più rigidi in termini di nullità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, il valore nulla degli argomenti di tipo è importante, mentre in Java questo viene per lo più ignorato. Ad esempio, supponiamo che tu abbia un tipo di restituzione "Flow<foo\>" e che la tabella sia vuota. In Java CodeGen questo non causerà alcun problema, mentre in Kotlin CodeGen riceverai un errore. Per evitarlo, devi utilizzare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>
- Il nuovo artefatto per il plug-in Room Gradle è stato aggiunto alla stanza con l'ID
androidx.room
, che risolve vari problemi esistenti in Room relativi alla presenza di input e output degli schemi tramite le opzioni del processore di annotazioni Gradle. Per maggiori dettagli, consulta le note di rilascio della versione 2.6.0-alpha02 delle stanze. - Le classi di valore nelle entità camera sono ora supportate per il principale punto di forza. (4194095)
- I tipi di restituzione delle mappe nidificate nelle funzioni DAO ora sono supportati nella stanza virtuale. (I13f48, 203008711)
Versione 2.6.0-rc01
20 settembre 2023
androidx.room:room-*:2.6.0-rc01
viene rilasciato. La versione 2.6.0-rc01 contiene questi commit.
Versione 2.6.0-beta01
23 agosto 2023
androidx.room:room-*:2.6.0-beta01
viene rilasciato. La versione 2.6.0-beta01 contiene questi commit.
Correzioni di bug
- Gestione dell'eccezione del caso speciale
SQLite
durante l'upsert riscontrato quando viene generata l'eccezione2067 SQLITE_CONSTRAINT_UNIQUE
durante un upsert; l'upsert dovrebbe eseguire un aggiornamento. (If2849, b/243039555)
Versione 2.6.0-alpha03
9 agosto 2023
androidx.room:room-*:2.6.0-alpha03
viene rilasciato. La versione 2.6.0-alpha03 contiene questi commit.
Nuove funzionalità
- I tipi di restituzione delle mappe nidificate nelle funzioni DAO ora sono supportati nella stanza virtuale. (I13f48, 203008711)
Modifiche alle API
- È stata creata una nuova annotazione di tipo denominata
@MapColumn
per sostituire@MapInfo
, che ora è deprecata. Per ogni nome di colonna (keyColumnName
,valueColumnName
o entrambi) fornito in un'annotazione@MapInfo
, devi dichiarare un'annotazione@MapColumn
solo concolumnName
e utilizzare l'annotazione sull'argomento di tipo specifico a cui viene fatto riferimento (la chiave o il valore della mappa) nel tipo restituito della funzione DAO. Il motivo è che l'annotazione@MapColumn
viene utilizzata direttamente sull'argomento type all'interno del tipo restituito di una funzione DAO, invece che sulla funzione stessa come@MapInfo
. Per saperne di più, consulta la documentazione di@MapColumn
. (Ib0305, b/203008711). - File API aggiornati per annotare la soppressione della compatibilità (I8e87a, b/287516207)
- Le API del plug-in 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 le versioni o gli schemi di tipo di build, mantenendo al contempo i vantaggi del plug-in (build riproducibili e memorizzabili nella cache). (I09d6f, b/278266663).
Correzioni di bug
- Risolto il problema di potenziale vulnerabilità di perdita della memoria in
QueryInterceptorStatement
. (I193d1). - È stato corretto il comportamento errato nella funzione
QueryInterceptorDatabase execSQL()
. (Iefdc8)
Versione 2.6.0-alpha02
21 giu 2023
androidx.room:room-*:2.6.0-alpha02
viene rilasciato. La versione 2.6.0-alpha02 contiene questi commit.
Plug-in Room Gradle
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 alla presenza di input e output degli 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 una connessione DSL per configurare la posizione di base dello schema:
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 l'output dei file di schema in cartelle personalizzate, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Come di consueto, questi file vengono inseriti nel repository per essere utilizzati per la convalida e le migrazioni automatiche. Al momento della 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 dal plug-in. Si tratta di un'operazione di migrazione una tantum che deve essere eseguita manualmente. La documentazione dello schema in developers.android.com verrà aggiornata in futuro una volta che il feedback verrà risolto e che il plug-in sarà stabile, quindi prova a farlo.
Modifiche alle API
RoomDatabase.QueryCallback
è stata definita come un'interfaccia funzionale che consente gli utilizzi delle conversioni 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
androidx.room:room-*:2.6.0-alpha01
viene rilasciato. La versione 2.6.0-alpha01 contiene questi commit.
Nuove funzionalità
- Supporto delle classi di valore in Room per i principali punti di forza. La stanza virtuale è ora in grado di supportare le classi di valore in Entità. (4194095)
- Ora la generazione del codice Kotlin(o "Kotlin CodeGen") può essere attivata nella stanza virtuale (4297ec0). Per attivare Kotlin CodeGen nella stanza virtuale, aggiungi il nome dell'opzione
room.generateKotlin
alle opzioni del processore per il KSP. Per ulteriori dettagli su come passare le opzioni del processore per il principale punto di forza, consulta la documentazione relativa al principale punto di forza.
Nota: quando utilizzi Kotlin CodeGen, è importante tenere presente che sono state aggiunte ulteriori 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 archiviato fisso. Un'altra limitazione aggiunta riguarda il fatto che i tipi restituiti di raccolte nullable non sono più consentiti nella stanza virtuale per Kotlin CodeGen.
Avviso:potresti notare che i tuoi progetti sono più rigidi in termini di nullità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, il valore nulla degli argomenti di tipo è importante, mentre in Java questo viene per lo più ignorato. Ad esempio, supponiamo che tu abbia un tipo di restituzione "Flow<foo\>" e che la tabella sia vuota. In Java CodeGen questo non causerà alcun problema, mentre in Kotlin CodeGen riceverai un errore. Per evitarlo, devi utilizzare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>
Modifiche alle API
- Protezione dall'utilizzo privo di significato delle raccolte con valori nulli nei tipi restituiti dei metodi DAO. (I777dc, b/253271782, b/259426907)
- Aggiungi un'API per la creazione di un flusso che emetta modifiche del tracker di invalidità. L'API è utile per creare flussi che devono reagire alle modifiche al database. (I8c790, b/252899305)
Correzioni di bug
- Non consentire le proprietà astratte come getter DAO o query DAO in codegen Kotlin; dovrebbero invece essere riscritte come funzioni per evitare la falsa idea che il valore della proprietà sia immutabile e abbia un risultato memorizzato fisso. (If6a13, b/127483380, b/257967987).
Versione 2.5.2
Versione 2.5.2
21 giu 2023
androidx.room:room-*:2.5.2
viene rilasciato. La versione 2.5.2 contiene questi commit.
Correzioni di bug
- Correggi un problema di incompatibilità con kotlinx-metadata-jvm. (386d5c)
- Risolvi un problema che causa un errore nella stanza virtuale quando viene utilizzata in un test Robolectric. (f79bea, b/274924903).
Versione 2.5.1
Versione 2.5.1
22 marzo 2023
androidx.room:room-*:2.5.1
viene rilasciato. La versione 2.5.1 contiene questi commit.
Correzioni di bug
- Evita di controllare la directory padre del database in
FrameworkSQLiteHelper
se il database è già aperto. (5de86b8). - Usa un controllo
isOpenInternal
per verificare se il database è già aperto. (e91fb35). - È ora disponibile una migliore gestione della richiesta di rientro nella stanza
acquireTransactionThread()
della stanza. (219f98b). Durante una transazione sospesa, la stanza virtuale utilizza un thread dall'esecutore della transazione, avvia un loop di eventi al suo interno e vi invia le operazioni di database sospese in modo che siano tutte incapsulate all'interno della coroutine della transazione. Di solito è previsto che il thread della transazione sia diverso da quello che inizia la transazione, ma in alcuni casi è uguale. Per gestire questi casi rientranti, è stato eseguito il refactoring diwithTransaction()
in modo che non si basi più su un job di controllo e, al contrario, eseguirà il blocco di transazioni sospese dall'interno dirunBlocking
nel thread delle transazioni.
Versione 2.5.0
Versione 2.5.0
22 febbraio 2023
androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
e androidx.room:room-paging-rxjava3:2.5.0
vengono rilasciati. La versione 2.5.0 contiene questi commit.
Versione 2.5.0
11 gennaio 2023
androidx.room:room-*:2.5.0
viene rilasciato. La versione 2.5.0 contiene questi commit.
Modifiche importanti dalla versione 2.4.0
- Tutte le origini
room-runtime
sono state convertite da Java a Kotlin. Tieni presente che potresti riscontrare problemi di incompatibilità della sorgente se il tuo codice è in Kotlin a causa della conversione delle librerie a 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 alla proprietà sui file Kotlin. Segnala un bug se sono presenti incompatibilità significative. - È stata aggiunta una nuova annotazione della scorciatoia,
@Upsert
, che tenta di inserire un'entità quando non ci sono conflitti di univocità o di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353). - Sono stati aggiunti nuovi elementi di paging della stanza
room-paging-rxjava2
,room-paging-rxjava3
eroom-paging-guava
per il supporto in Paging della stanza. - Sono state aggiunte API per fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in
@MapInfo
(Icc4b5)
Versione 2.5.0-rc01
7 dicembre 2022
androidx.room:room-*:2.5.0-rc01
viene rilasciato. La versione 2.5.0-rc01 contiene questi commit.
- Questa release è identica a
2.5.0-beta02
.
Versione 2.5.0-beta02
9 novembre 2022
androidx.room:room-*:2.5.0-beta02
viene rilasciato. La versione 2.5.0-beta02 contiene questi commit.
Modifiche alle API
- Correggi varie API che utilizzano argomenti di query da invarianti (
Array<Any?>
) a contravarianti (Array<out Any?>
) per corrispondere al comportamento dell'array Java. (b/253531073)
Versione 2.5.0-beta01
5 ottobre 2022
androidx.room:room-*:2.5.0-beta01
viene rilasciato. La versione 2.5.0-beta01 contiene questi commit.
Modifiche alle API
- Limita la versione minima che supporta
@Upsert
in modo che sia l'API 16. Questo è dovuto all'impossibilità di identificare un conflitto di vincoli di chiave primaria nelle API precedenti. (I5f67f, b/243039555).
Correzioni di bug
- Risolto un problema per cui le tabelle shadow venivano esportate in modo errato nei file di schema
.json
, danneggiandoli. (I4f83b, b/246751839).
Versione 2.5.0-alpha03
24 agosto 2022
androidx.room:room-*:2.5.0-alpha03
viene rilasciato. La versione 2.5.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova annotazione della scorciatoia,
@Upsert
, che tenta di inserire un'entità quando non ci sono conflitti di univocità o 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. (I328dd) - Correggi una modifica incompatibile con l'origine Kotlin per getter / proprietà di
getOpenHelper
,getQueryExecutor
egetTransactionExecutor
. (Iad0ac).
Versione 2.5.0-alpha02
1° giugno 2022
androidx.room:room-*:2.5.0-alpha02
viene rilasciato. La versione 2.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- Sono stati aggiunti nuovi elementi
room-paging
room-paging-rxjava2
,room-paging-rxjava3
eroom-paging-guava
per il supporto in Paging della stanza.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/2063b/2063)
Modifiche alle API
- L'intero dominio
room-runtime
è stato convertito da Java a Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/5)Nota: potresti riscontrare problemi di incompatibilità della fonte a causa della conversione delle librerie a Kotlin. Se il tuo codice si trovava in Kotlin e chiamava la versione precedente della stanza virtuale, 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 fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in
@MapInfo
(Icc4b5) - Risolvi un problema di compatibilità delle origini per consentire di nuovo
@Ignore
nei getter delle proprietà. (Ifc2fb).
Correzioni di bug
- Algoritmo euristico per la risoluzione delle colonne duplicato. Ora la stanza tenterà di risolvere le colonne ambigue in una query multimappa. In questo modo i JOIN con tabelle contenenti tabelle con lo stesso nome possono essere mappati correttamente a un oggetto dati risultato. (I4b444, b/201306012, b/212279118).
Versione 2.5.0-alpha01
23 febbraio 2022
androidx.room:room-*:2.5.0-alpha01
viene rilasciato. La versione 2.5.0-alpha01 contiene questi commit.
Modifiche alle API
- Risolto il problema per cui l'utilizzo della stanza
@IntDef
non veniva applicato nelle origini Kotlin. (I75f41, b/217951311) - Risolto un problema di compatibilità delle origini per consentire di nuovo
@Query
nei getter delle proprietà. (I0a09b). - Camera comune riconvertita da Java a Kotlin. (I69c48, b/206858235).
Nota: potresti riscontrare problemi di incompatibilità delle fonti poiché alcune proprietà sono state spostate in oggetti associati durante la conversione delle librerie a Kotlin. Se il codice si trovava in Kotlin e chiama la versione precedente della Room, la nuova versione avrà bisogno del suffisso ".Companion" quando accedi a queste proprietà.
- Migrazione delle camere da Java a Kotlin convertita. (I2724b, b/206858622)
- File correlati
paging
convertiti inroom-runtime
da Java a Kotlin. (I82fc8, b/206859668) - È stata aggiunta un'API per il blocco e l'utilizzo multi-processo a livello di FrameworkSQLite*, per proteggere la creazione e le migrazioni dei database multi-processo per la prima volta. (Ied267, b/193182592)
Correzioni di bug
- Aggiunto il supporto per le proprietà interne nelle sorgenti Kotlin.
Si tratta di un leggero cambiamento del comportamento in Room, in cui utilizzerà il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione che è diverso per le funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per abbinare getter/setter a proprietà private, controlla il codice generato dopo l'aggiornamento (If6531, b/205289020)
Versione 2.4.3
Versione 2.4.3
27 luglio 2022
androidx.room:room-*:2.4.3
viene rilasciato. La versione 2.4.3 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui la stanza non riconosceva le funzioni di sospensione in Kotlin 1.7 (b/236612358)
Versione 2.4.2
Versione 2.4.2
23 febbraio 2022
androidx.room:room-*:2.4.2
viene rilasciato. La versione 2.4.2 contiene questi commit.
Correzioni di bug
- Risolvi un problema di generazione del codice per una funzione di sospensione
@Transaction
di Dao con un corpo che genera un metodo di interfaccia predefinito a causa della compilazione con-Xjvm-default=all
o equivalente. (Ia4ce5). - Risoluzione di un bug in cui la stanza genera codice per un metodo di query di tipo restituito
Array<ByteArray>
. (If086e, b/213789489).
Versione 2.4.1
Versione 2.4.1
12 gennaio 2022
androidx.room:room-*:2.4.1
viene rilasciato. La versione 2.4.1 contiene questi commit.
Correzioni di bug
- Aggiunto il supporto per le proprietà interne nelle sorgenti Kotlin.
Si tratta di un leggero cambiamento del comportamento in Room, in cui utilizzerà il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione che è diverso per le funzioni/proprietà interne).
Se utilizzi annotazioni
@JvmName
personalizzate per abbinare getter/setter a proprietà private, controlla il codice generato dopo l'aggiornamento (If6531, b/205289020)
Versione 2.4.0
Versione 2.4.0
15 dicembre 2021
androidx.room:room-*:2.4.0
viene rilasciato. La versione 2.4.0 contiene questi commit.
Modifiche importanti dalla versione 2.3.0
- Migrazioni automatiche: la stanza ora offre un'API per la generazione automatica delle migrazioni, a condizione che gli schemi vengano esportati. Per comunicare alla stanza che deve generare una migrazione automatica, è possibile usare una nuova proprietà
@Database#autoMigrations
per dichiarare le versioni da e verso cui eseguire la migrazione automatica. Quando la stanza ha bisogno di informazioni aggiuntive su rinominazioni o eliminazioni di tabelle e colonne, l'annotazione@AutoMigration
può dichiarare una classe di specifica contenente questi input. Per ulteriori dettagli, consulta la documentazione di@AutoMigration
. - Dependency Injection nelle migrazioni automatiche:
@ProvidedAutoMigrationSpec
è una nuova API per dichiarare cheAutoMigrationSpec
verrà fornito durante il runtime tramiteRoomDatabase.Builder#addAutoMigrationSpec()
. In questo modo, un framework di inserimento delle dipendenze può fornire queste specifiche quando hanno bisogno di dipendenze complesse. - Supporto dell'helper per il test della migrazione per le migrazioni automatiche: il
MigrationTestHelper
della stanza è stato aggiornato per supportare le migrazioni automatiche fornendo una nuova API del costruttore che riceve la classe del database in fase di test. In questo modo l'helper può aggiungere automaticamente migrazioni automatiche allo stesso modo duranterunMigrationsAndValidate
. - Supporto stanza virtuale: viene rilasciato
androidx.room:room-paging
, che fornisce il supporto nativo di Paging 3.0 per le query Room che restituisconoandroidx.paging.PagingSource
. - Metodi di query relazionali: la stanza ora supporta i tipi di restituzione multimappa
@Dao
, utili per le istruzioni JOIN. I tipi di multimappe supportati sonoMap
,SparseArray
eLongSparseArray
, insieme aImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
di Guava.
Versione 2.4.0-rc01
1° dicembre 2021
androidx.room:room-*:2.4.0-rc01
viene rilasciato. La versione 2.4.0-rc01 contiene questi commit.
Nuove funzionalità
- Aggiorna la dipendenza della stanza dal punto di accesso principale a
1.6.0-1.0.1
per supportare Kotlin 1.6
Versione 2.4.0-beta02
17 novembre 2021
androidx.room:room-*:2.4.0-beta02
viene rilasciato. La versione 2.4.0-beta02 contiene questi commit.
Nuove funzionalità
- Abbiamo aggiunto il supporto per SparseArray e LongSparseArray in @MapInfo. (Ic91a2b/138910317)
Correzioni di bug
- Abbiamo aggiunto un nuovo analizzatore TypeConverter che prende in considerazione le informazioni sulla possibilità di nulla nei tipi. Poiché queste informazioni sono disponibili solo nel principale punto di forza, sono attive per impostazione predefinita solo nel principale punto di riferimento. Se causa problemi, puoi disattivarlo passando room.useNullAwareTypeAnalysis=false al processore di annotazione. In questo caso, segnala un bug del file, perché in futuro questo flag verrà rimosso. Con questo nuovo analizzatore TypeConverter, si consiglia di fornire solo TypeConverter che ricevono valori non null poiché il nuovo analizzatore ha la possibilità di includerli con un controllo null. Tieni presente che ciò non ha alcun impatto per gli utenti che utilizzano KAPT o Java, in quanto i processori di annotazione (a differenza di KSP) non hanno informazioni su nientebili nei tipi. (Ia88f9, b/193437407).
- Correggere un bug per cui la stanza non veniva compilata con un errore SQL quando un'entità FTS ha dichiarato di utilizzare il tokenizzatore ICU. (I00db9, b/201753224).
- È stato risolto il problema nelle migrazioni automatiche di una nuova colonna aggiunta a un'entità incorporata tra le versioni. (I5fcb1b/193798291)
- Abbiamo risolto un problema relativo ai tipi restituiti del metodo di query relazionale 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 trovato nel cursore. Se non vengono trovati valori validi, una chiave verrà mappata a una raccolta vuota. (Id5552b/201946438)
- Risolto il problema di migrazione automatica per cui le parole chiave SQLite non utilizzavano i caratteri di escape nei nomi delle colonne. (Idbed4b/197133152)
Versione 2.4.0-beta01
13 ottobre 2021
androidx.room:room-*:2.4.0-beta01
viene rilasciato. La versione 2.4.0-beta01 contiene questi commit.
Correzioni di bug
- Risolto il problema relativo alle migrazioni automatiche che non aggiungevano nuove colonne quando anche un'altra tabella nella stessa migrazione automatica aveva una nuova colonna con lo stesso nome. (Ia5db5, b/200818663).
- L'implementazione PagingSource generata dalla stanza virtuale ora
utilizza il valore
queryExecutor
trasmesso tramiteRoomDatabase.Builder
, quindi può essere sostituito, anzichéDispatchers.IO
in precedenza. (Iae259).
Versione 2.4.0-alpha05
29 settembre 2021
androidx.room:room-*:2.4.0-alpha05
viene rilasciato. La versione 2.4.0-alpha05 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un convertitore dei tipi integrato per 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 ulteriori dettagli, consulta la documentazione di TypeConverters. (36ae9e, b/195413406).
Supporto di chiavi/valori non POJO per i tipi di restituzione di più mappe nei DAO tramite l'annotazione
@MapInfo
. (I4d704)
La colonna @MapInfo
sarà obbligatoria se la colonna della chiave o del valore della mappa si trova in 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>
- Imposta
room-paging
come artefatto obbligatorio quando utilizzi Paging3 con la stanza virtuale. (Ieaffe)
Correzioni di bug
- Risolvi un problema per cui i risultati delle query multimappa non venivano ordinati correttamente quando la query conteneva una clausola ORDER BY di una colonna dalla chiave della mappa. (I6b887)
Contributi esterni
- È 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
androidx.room:room-*:2.4.0-alpha04
viene rilasciato. La versione 2.4.0-alpha04 contiene questi commit.
Nuove funzionalità
La stanza ora supporta i tipi di restituzione multimappa
@Dao
, utili per le istruzioni JOIN. I tipi di multimappe supportati sonoMap
, così comeImmutableMap
,ImmutableSetMultimap
eImmutableListMultimap
di Guava.Di seguito sono riportati alcuni esempi di query multimap:
Mappa delle relazioni 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 multipla 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 le coroutineFlow
.
Cerca in camera
Viene rilasciato
androidx.room:room-paging
, che fornisce il supporto nativo per Paging 3.0 per le query stanza 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 dalla stanza virtuale con un'implementazione basata sulle API Paging 3.0. La nuova implementazione di PagingSource analizza le chiavi in modo diverso, quindi qualsiasi chiave fornita manualmente a PagingSource della stanza deve tenere conto di questa modifica del comportamento, inclusa la chiave iniziale passata tramite il costruttore del Pager. Le pagine inizieranno a essere caricate daKey
eKey
sarà il primo elemento caricato. Questo differisce dal comportamento esistente in cuiLoadParams.Refresh.Key
viene trattato come la posizione di scorrimento dell'utente e gli elementi vengono caricati prima e dopo la chiave.L'elemento è facoltativo e se lo disattivi, verrà usato il supporto esistente per Paging 3.0 che è stato introdotto nella stanza 2.3. Tuttavia, questo artefatto diventerà non facoltativo nella release futura per gli utenti che utilizzano la stanza virtuale con Paging 3.0. Per l'attivazione, aggiungi il nuovo artefatto di paging della stanza a classpath. Se utilizzi Gradle, puoi aggiungere il seguente snippet a build.gradle:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Correzioni di bug
- Risolvi un problema nelle migrazioni automatiche relativo alla gestione delle violazioni delle chiavi esterne. (b/190113935)
Versione 2.4.0-alpha03
16 giugno 2021
androidx.room:room-*:2.4.0-alpha03
viene rilasciato. La versione 2.4.0-alpha03 contiene questi commit.
Modifiche alle API
- Aggiorna il
MigrationTestHelper
della stanza per supportare le migrazioni automatiche fornendo una nuova API del costruttore che riceve la classe del database in fase di test. In questo modo l'helper può aggiungere automaticamente migrazioni automatiche allo stesso modo duranterunMigrationsAndValidate
.
Correzioni di bug
Risolto il problema della libreria nativa SQLite di Room per supportare i chip M1 di Apple. (b/174695268
Risolto il problema per cui la stanza non veniva inviata a errori quando il tipo restituito di una funzione @Transaction era un flusso (I56ddd, b/190075899)
Risolvi un problema relativo agli indici nelle migrazioni automatiche. B/177673291
Aggiornamenti delle dipendenze
- L'assistenza per i punti di forza principali della stanza ora dipende dal principale punto di forza
1.5.10-1.0.0-beta01
. (1ecb11, b/160322705)
Versione 2.4.0-alpha02
5 maggio 2021
androidx.room:room-*:2.4.0-alpha02
viene rilasciato. La versione 2.4.0-alpha02 contiene questi commit.
Modifiche alle API
@ProvidedAutoMigrationSpec
è una nuova API per dichiarare che verrà fornito unAutoMigrationSpec
in fase di runtime tramiteRoomDatabase.Builder#addAutoMigrationSpec()
. In questo modo, un framework di inserimento delle dipendenze può fornire queste specifiche quando hanno bisogno di dipendenze complesse.
Correzioni di bug
- Risolvi un problema con le migrazioni automatiche per cui i
@DatabaseView
non venivano ricreati correttamente.
Contributi esterni
- Risolvi un problema nella
JournalMode.TRUNCATE
della stanza in cui il callbackInvalidationTracker
a volte veniva richiamato in modo non valido, troppo tardi o non veniva attivato affatto. Grazie aUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
Versione 2.4.0-alpha01
21 aprile 2021
androidx.room:room-*:2.4.0-alpha01
viene rilasciato. La versione 2.4.0-alpha01 contiene questi commit.
Nuove funzionalità
- Migrazioni automatiche: la stanza ora offre un'API per la generazione automatica delle migrazioni, a condizione che gli schemi vengano esportati. Per comunicare alla stanza che deve generare una migrazione automatica, è possibile usare una nuova proprietà
@Database#autoMigrations
per dichiarare le versioni da e verso cui eseguire la migrazione automatica. Quando la stanza ha bisogno di informazioni aggiuntive su rinominazioni o eliminazioni di tabelle e colonne, l'annotazione@AutoMigration
può dichiarare una classe di specifica contenente questi input. Per ulteriori dettagli, consulta la documentazione di@AutoMigration
.
Correzioni di bug
- Risolvi un problema per cui
defaultValue
con parentesi aggiuntive veniva convalidato in modo errato dalla convalida dello schema della stanza virtuale. b/182284899
Versione 2.3.0
Versione 2.3.0
21 aprile 2021
androidx.room:room-*:2.3.0
viene rilasciato. La versione 2.3.0 contiene questi commit.
Modifiche importanti dalla versione 2.2.0
- Supporto Enum integrato: per impostazione predefinita, per la stanza virtuale verrà utilizzato un convertitore di tipo Enum in stringa e viceversa, se non viene fornito alcun valore. Se esiste già un convertitore di tipi per un'enumerazione, la stanza virtuale darà la priorità all'utilizzo rispetto a quella predefinita.
- Callback delle query: la stanza ora offre un'API di callback generale RoomDatabase.QueryCallback, utile per l'accesso alle build di debug quando stanno per essere eseguite le query. Il callback può essere impostato tramite
RoomDatabase.Builder#setQueryCallback()
. - Miglioramento predefinito: la stanza ora dispone di API per la creazione di un database utilizzando un database predefinito che viene letto da un flusso di input. Ciò consente i casi in cui il database predefinito è compresso con gzip.
- Convertitori dei tipi forniti: il locale ora dispone di API per fornire istanze di convertitori di tipi, in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore dei tipi che verrà fornito alla stanza virtuale, utilizza la nuova annotazione @ProvidedTypeConverter.
- Supporto RxJava3: la stanza virtuale ora supporta i tipi RxJava3. In modo simile a RxJava2, puoi dichiarare i metodi DAO il cui tipo restituito sono Flowable, Single, Become e Completabile. Inoltre, è disponibile un nuovo artefatto
androidx.room:room-rxjava3
per supportare RxJava3. - Assistenza Paging 3.0: la stanza ora 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
androidx.room:room-*:2.3.0-rc01
viene rilasciato. La versione 2.3.0-rc01 contiene questi commit.
Correzioni di bug
- Risolvi un problema che impediva l'utilizzo delle query di Coroutine Flow create dalla stanza virtuale in un blocco
withTransaction
sospeso. (I797bf)
Versione 2.3.0-beta03
10 marzo 2021
androidx.room:room-*:2.3.0-beta03
viene rilasciato. La versione 2.3.0-beta03 contiene questi commit.
Nuove funzionalità
- Aggiunto il supporto della compilazione incrementale per il principale punto di forza. (I031c1, b/176453350).
Correzioni di bug
- Risolto un bug per cui la creazione di PagingSource nel thread principale poteva attivare un errore ANR. (I42b74, b/181221318)
- È stata corretta la visibilità di
@ExperimentalRoomApi
in modo che fosse pubblica anziché privata del pacchetto. (b/181356119)
Contributi esterni
- Consenti alla stanza di accettare un tipo restituito POJO in un metodo DAO annotato
@Query
quando questo è anche annotato con@SkipQueryVerification
. La stanza virtuale farà il possibile per convertire il risultato della query nel tipo restituito POJO, allo stesso modo in cui viene fatto per un metodo DAO annotato con@RawQuery
. Grazie a "Markus Riegel | hey@marcorei.com". (I45acb)
Versione 2.3.0-beta02
18 febbraio 2021
androidx.room:room-*:2.3.0-beta02
viene rilasciato. La versione 2.3.0-beta02 contiene questi commit.
Nuove funzionalità
La stanza virtuale ora supporta il supporto sperimentale per l'elaborazione dei simboli Kotlin KSP.
KSP sostituisce KAPT per eseguire i processori di annotazione in modo nativo sul compilatore Kotlin, riducendo notevolmente i tempi di compilazione.
Per utilizzare Room con il principale punto di forza, puoi applicare il plug-in Gradle del principale punto di forza e sostituire la configurazione
kapt
nel file di build conksp
. Ad esempio, anzichékapt 'androidx.room:room-compiler:2.3.0-beta02'
usaksp 'androidx.room:room-compiler:2.3.0-beta02'
. Per ulteriori dettagli, consulta la documentazione relativa al principale punto di forza.Tieni presente che, poiché il principale punto di forza è sperimentale, ti consigliamo di utilizzare comunque KAPT per il codice di produzione. La riduzione dei tempi di build è applicabile solo se non ci sono altri processori che utilizzano KAPT. Consulta la pagina b/160322705 per i problemi noti.
Versione 2.3.0-beta01
27 gennaio 2021
androidx.room:room-*:2.3.0-beta01
viene rilasciato. La versione 2.3.0-beta01 contiene questi commit.
Nuove funzionalità
- Database chiudibili automaticamente: la stanza ora è in grado di chiudere i database a cui non è possibile accedere 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 delle strategie, ignorando di fatto quella definita. (/I0b90d, b/176138543)
Versione 2.3.0-alpha04
16 dicembre 2020
androidx.room:room-*:2.3.0-alpha04
viene rilasciato. La versione 2.3.0-alpha04 contiene questi commit.
Nuove funzionalità
- La stanza virtuale ora offre un'API di callback generale
RoomDatabase.QueryCallback
, per quando stanno per essere eseguite le query, utile per accedere alle build di debug. Il callback può essere impostato tramiteRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608). - Ora per la stanza virtuale viene utilizzato un convertitore di tipo da Enum a stringa e viceversa, se non ne viene specificato uno. Se esiste già un convertitore di tipi per un'enumerazione, la stanza virtuale darà la priorità all'utilizzo rispetto a quella predefinita. (b/73132006)
Problema noto
- Se esiste già un convertitore di tipo unidirezionale per l'Enum, la stanza virtuale potrebbe utilizzare accidentalmente il convertitore integrato da Stringa a Enum, cosa che potrebbe non essere desiderata. Si tratta di un problema noto che può essere risolto impostando un convertitore bidirezionale. Consulta: b/175707691
Correzioni di bug
- Risolto il problema per cui la stanza disattivava erroneamente l'elaborazione incrementale delle annotazioni nelle versioni JDK più recenti. (b/171387388)
- Risolto il problema per cui la stanza trova il corso generato quando vengono utilizzati più caricatori di corsi. Grazie per la correzione "Serendipity | 892449346@qq.com" (b/170141113)
- Risolto il problema per cui la stanza generava un codice errato quando un Kotlin
@Dao
aveva una classe base le cui generiche sono primitive nella JVM. (b/160258066)
Contributi esterni
- La stanza virtuale utilizzerà per impostazione predefinita
beginTransactionNonExclusive
se la modalità WAL è abilitata e l'API è 16 o superiore. Grazie a "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com'! (b/126258791)
Versione 2.3.0-alpha03
14 ottobre 2020
androidx.room:room-*:2.3.0-alpha03
viene rilasciato. La versione 2.3.0-alpha03 contiene questi commit.
Nuove funzionalità
La stanza ora dispone di API per fornire istanze di convertitori di tipi in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore dei tipi che verrà fornito alla camera, utilizza la nuova annotazione
@ProvidedTypeConverter
. Grazie a "mzgreen yairobbe@gmail.com". (Ie4fa5, b/121067210)La stanza ora dispone di API per creare un database utilizzando un database predefinito che viene letto da un flusso di input. Ciò consente i casi in cui il database predefinito è compresso con 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 per righe. (I07c56, b/77307836).
Aggiornamento del DaoProcessor per correggere l'errore di compilazione su Dao con un tipo super generico con "primitivi" di Kotlin. (Ice6bb, b/160258066).
Aggiorna la documentazione sui metodi di aggiunta/rimozione dei metodi di osservazione per chiarire l'organizzazione in thread (Ifd1d9, b/153948821)
Risolvi un problema relativo alla camera che convalida erroneamente le tabelle FTS che hanno dichiarato la colonna rowid. (d62ebc, b/145858914)
Contributi esterni
Risolvere i problemi relativi alle impostazioni internazionali maiuscole/minuscole relative alla lingua turca (5746e3), b/68159494
Sostituisci
ConcurrentHashMap
all'interno diRoomDatabase
conCollections.synchronizedMap()
per evitare problemi su Android Lollipop (d1cfc7, b/162431855)Aggiungi un callback onOpenPrepackagedDatabase per quando viene copiato un database predefinito. (I1ba74, b/148934423).
Versione 2.3.0-alpha02
22 luglio 2020
androidx.room:room-*:2.3.0-alpha02
viene rilasciato. La versione 2.3.0-alpha02 contiene questi commit.
Nuove funzionalità
- Supporto RxJava3: la stanza virtuale ora supporta i tipi RxJava3. In modo simile a RxJava2, puoi dichiarare i metodi DAO il cui tipo restituito sono Flowable, Single, Become e Completabile. Inoltre, è disponibile un nuovo artefatto
androidx.room:room-rxjava3
per supportare RxJava3. (b/152427884)
Modifiche alle API
- Ora è supportata la dichiarazione di un
@TypeConverter
nella classe di oggetto Kotlin. (b/151110764) - L'opzione di elaborazione delle annotazioni incrementali della stanza è ora attiva per impostazione predefinita. (b/112110217)
Versione 2.3.0-alpha01
10 giugno 2020
androidx.room:room-*:2.3.0-alpha01
viene rilasciato. La versione 2.3.0-alpha01 contiene questi commit.
Nuove funzionalità
Assistenza Paging 3.0: la stanza ora supporterà la generazione di implementazioni per i metodi annotati
@Query
il cui tipo restituito èandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Modifiche alle API
@RewriteQueriesToDropUnusedColumns
è una nuova e pratica annotazione che fa sì che la stanza virtuale riscrivi la proiezione "*" in una query in modo che le colonne inutilizzate nel risultato vengano rimosse.- L'opzione del processore
room.expandProjection
è ora deprecata. Usa@RewriteQueriesToDropUnusedColumns
al posto delle query di ottimizzazione delle stanze con proiezioni a stella. Tieni presente che@RewriteQueriesToDropUnusedColumns
non sostituisce la soluzione per i conflitti di colonneroom.expandProjection
offerta per quanto riguarda i tipi restituiti che contenevano i campi@Embedded
.
Correzioni di bug
- Risolto un bug per cui la stanza non rilevava correttamente la versione JDK utilizzata per abilitare il processore di annotazioni incrementali. Grazie a Blaz Solar (me@blaz.solar) (b/155215201)
- La stanza ora incorpora la sua dipendenza ANTLR con il processore di annotazione per evitare conflitti di versione con altri processori che usano ANTLR. (b/150106190)
Versione 2.2.6
Versione 2.2.6
16 dicembre 2020
androidx.room:room-*:2.2.6
viene rilasciato. La versione 2.2.6 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui la stanza disattivava erroneamente l'elaborazione incrementale delle annotazioni nelle versioni JDK più recenti. (b/171387388)
Versione 2.2.5
Versione 2.2.5
18 marzo 2020
androidx.room:room-*:2.2.5
viene rilasciato. La versione 2.2.5 contiene questi commit.
Correzioni di bug
- Crea directBootAware di
MultiInstanceInvalidationService
. Grazie a "Mygod contact-git@mygod.be" (b/148240967) - Risolto un bug che causava un arresto anomalo quando veniva abilitata l'annullamento della convalida di più istanze e il database conteneva un'entità FTS. (b/148969394)
- Risolto il problema durante il caricamento delle librerie native SQLite nel processore di annotazioni delle stanze, 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 pubblicati i programmi 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 il problema di sospensione delle transazioni in cui si sarebbe verificato un deadlock se la coroutine venisse annullata rapidamente prima dell'avvio effettivo della transazione. (b/148181325)
- Risolto il problema per cui @generate viene utilizzato in modo errato durante la creazione con JDK 9. (b/146538330)
- Risolto il problema per cui la stanza generava un codice errato quando un'interfaccia DAO in Kotlin aveva una funzione concreta. (b/146825845)
Versione 2.2.3
Versione 2.2.3
18 dicembre 2019
androidx.room:room-*:2.2.3
viene rilasciato. La versione 2.2.3 contiene questi commit.
Correzioni di bug
- Risolto il bug per cui Room non convalidava un database che non era stato sottoposto a migrazione e conteneva un hash precedente con indici nel suo schema. (b/139306173)
Versione 2.2.2
Versione 2.2.2
20 novembre 2019
androidx.room:room-*:2.2.2
viene rilasciato. 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 della stanza virtuale. (b/143105450)
Versione 2.2.1
Versione 2.2.1
23 ottobre 2019
androidx.room:room-*:2.2.1
viene rilasciato. La versione 2.2.1 contiene questi commit.
Correzioni di bug
- Risolto un bug per cui la stanza virtuale avrebbe avvisato erroneamente di
CURSOR_MISMATCH
con l'opzione di compilazioneexpandProjection
attivata. (b/140759491) - È stato aggiunto un meccanismo di nuovo tentativo per gestire la libreria nativa mancante utilizzata per verificare le query durante la compilazione.
Versione 2.2.0
Versione 2.2.0
9 ottobre 2019
androidx.room:room-*:2.2.0
viene rilasciato. La versione 2.2.0 contiene questi commit.
Modifiche importanti dalla versione 2.1.0
- Database predefinito: sono ora disponibili due nuove API in
RoomDatabase.Builder
per la creazione di unRoomDatabase
in base a un file di database già popolato.createFromAsset()
è per quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentrecreateFromFile()
è per quando il file si trova in una posizione arbitraria. L'utilizzo di queste API cambia il comportamento delle migrazioni distruttive in modo che, durante una migrazione di riserva, Room tenti di copiare nuovamente il database precompilato, se disponibile, altrimenti esegue il fallback semplicemente eliminando e ricreando tutte le tabelle.b/62185732 - Valori predefiniti dello schema: ora
@ColumnInfo
ha una nuova proprietàdefaultValue
che può essere utilizzata per specificare il valore predefinito di una colonna. I valori predefiniti fanno parte di uno schema di database e verranno convalidati durante le migrazioni, se specificato. b/64088772 - Molte relazioni: ora
@Relation
ha una nuova proprietàassociateBy
, che include 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 individuali: la limitazione nei campi POJO annotati con
@Relation
affinché sia di tipoList
oSet
è stata rimossa, consentendo di rappresentare in modo efficace le relazioni con un singolo valore.b/62905145 - Entità target: le annotazioni DAO
@Insert
,@Update
e@Delete
ora hanno una nuova proprietàtargetEntity
, che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. Ciò consente ai parametri di questi metodi DAO di essere POJO arbitrari, che verranno interpretati come entità parziali. In pratica, questo consente inserti, 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 osservate nella query sono invalidate. Una volta dichiarata una funzione DAO con un tipo restituitoChannel<T>
è un errore, Room ti incoraggia a utilizzareFlow
e poi a usare le funzioni vicine per convertireFlow
inChannel
. B/130428884 - Processore di annotazioni incrementali Gradle: la stanza ora è un processore di annotazione per l'isolamento Gradle e può essere attivata tramite l'opzione del processore
room.incremental
. Per ulteriori informazioni, consulta le opzioni per il compilatore della stanza. In caso di problemi, invia una segnalazione di bug qui. Prevediamo di abilitare l'incrementbilità per impostazione predefinita in una versione futura stabile. b/112110217 - Espansione delle proiezioni: è stata aggiunta una nuova opzione di compilatore sperimentale
room.expandProjection
che consente alla Room di riscrivere una query con una proiezione a stella che contiene solo le colonne nel tipo restituito POJO. Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. Quindi, Room riscriverà la query inSELECT id, title FROM Song
in modo che venga recuperato il set minimo di colonne per soddisfare il tipo restituito. In questo modo elimini sostanzialmente l'avvisoCURSOR_MISMATCH
che viene mostrato quando la query restituisce colonne aggiuntive che non corrispondono ad alcun campo nel tipo POJO restituito.
Versione 2.2.0-rc01
5 settembre 2019
androidx.room:room:2.2.0-rc01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Nessuna modifica pubblica dalla stanza 2.2.0-beta01
.
Versione 2.2.0-beta01
22 agosto 2019
androidx.room:room-*:2.2.0-beta01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Risolto un bug per cui una query Flusso di coroutine interrompeva la riemissione di nuovi valori dopo un determinato periodo di tempo. (b/139175786)
- Risolto il bug per cui la stanza virtuale non accettava un codice hash dello schema legacy durante l'apertura di un database che non era stata eseguita dalla stanza 1.0, causando un arresto anomalo del runtime a causa di uno schema non valido. (b/139306173)
Versione 2.2.0-alpha02
7 agosto 2019
androidx.room:room-*:2.2.0-alpha02
viene rilasciato. 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 osservate nella query sono invalidate. Una volta dichiarata una funzione DAO con un tipo restituitoChannel<T>
è un errore, Room ti incoraggia a utilizzareFlow
e poi a usare le funzioni vicine per convertireFlow
inChannel
. B/130428884 - Espansione delle proiezioni: è stata aggiunta una nuova opzione di compilatore sperimentale
room.expandProjection
che consente alla Room di riscrivere una query con una proiezione a stella che contiene solo le colonne nel tipo restituito POJO. Ad esempio, per un metodo DAO con@Query("SELECT * FROM Song")
che restituisce un POJO denominatoSongIdAndTitle
con solo due campi. Quindi, Room riscriverà la query inSELECT id, title FROM Song
in modo che venga recuperato il set minimo di colonne per soddisfare il tipo restituito. In questo modo elimini sostanzialmente l'avvisoCURSOR_MISMATCH
che viene mostrato quando la query restituisce colonne aggiuntive che non corrispondono ad alcun campo nel tipo POJO restituito. onDestructiveMigrate
è una nuova API di callback aggiunta aRoomDatabase.Callback
per quando la stanza virtuale esegue in modo dannoso la migrazione di un database. b/79962330
Correzioni di bug
- Risolto il bug per cui la stanza virtuale generava un codice errato utilizzando un metodo come setter del campo quando il campo era protetto. b/136194628
- Risolto un bug per cui InvalidationTracker generava un NPE in un secondo processo quando era abilitata l'annullamento della convalida di più istanze e il servizio di annullamento dell'annullamento era stato interrotto.b/137454915
- Risolto il bug per cui la stanza virtuale 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
equivalente. b/137881998 - Risolto il bug per cui la stanza si lamentava della mancanza di setter sui POJO utilizzati come parametri di entità parziale di
@Insert
,@Update
e@Delete
. B/138664463 - Risolto un bug per cui la stanza virtuale si lamentava di getter e setter mancanti per una colonna ignorata tramite
@Entity
quando la classe entità veniva utilizzata in determinati metodi DAO. b/138238182 - Risolto il 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: sono ora disponibili due nuove API in
RoomDatabase.Builder
per la creazione di unRoomDatabase
in base a un file di database già popolato.createFromAsset()
è per quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentrecreateFromFile()
è per quando il file si trova in una posizione arbitraria. L'utilizzo di queste API cambia il comportamento delle migrazioni distruttive in modo che, durante una migrazione di riserva, Room tenti di copiare nuovamente il database precompilato, se disponibile, altrimenti esegue il fallback semplicemente eliminando e ricreando tutte le tabelle.b/62185732 - Valori predefiniti dello schema: ora
@ColumnInfo
ha una nuova proprietàdefaultValue
che può essere utilizzata per specificare il valore predefinito di una colonna. I valori predefiniti fanno parte di uno schema di database e verranno convalidati durante le migrazioni, se specificato. b/64088772Nota: se lo schema del tuo database ha già valori predefiniti, come quelli aggiunti tramite
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, e decidi di definire valori predefiniti tramite@ColumnInfo
per le stesse colonne, potrebbe essere necessario eseguire una migrazione per convalidare i valori predefiniti non considerati. Per ulteriori informazioni, consulta Migrazioni delle stanze. - Molte relazioni: ora
@Relation
ha una nuova proprietàassociateBy
, che include 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 individuali: la limitazione nei campi POJO annotati con
@Relation
affinché sia di tipoList
oSet
è stata rimossa, consentendo di rappresentare in modo efficace le relazioni con un singolo valore.b/62905145 - Entità target: le annotazioni DAO
@Insert
,@Update
e@Delete
ora hanno una nuova proprietàtargetEntity
, che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. Ciò consente ai parametri di questi metodi DAO di essere POJO arbitrari, che verranno interpretati come entità parziali. In pratica, questo consente inserti, eliminazioni e aggiornamenti parziali. b/127549506 - Processore di annotazioni incrementali Gradle: la stanza ora è un processore di annotazione per l'isolamento Gradle e può essere attivata tramite l'opzione del processore
room.incremental
. Per ulteriori informazioni, consulta le opzioni per il compilatore della stanza. In caso di problemi, invia una segnalazione di bug qui. Prevediamo di abilitare l'incrementbilità per impostazione predefinita in una versione futura stabile. b/112110217
Correzioni di bug
- La stanza virtuale non propaga più la proprietà
EmptySetResultException
al gestore degli errori globale quando il flusso Rx di una query viene eliminato prima del completamento della query. b/130257475 - Risolto il bug per cui la stanza mostrava un messaggio di errore errato quando una funzione DAO di sospensione annotata con
@RawQuery
non mostrava un tipo restituito. b/134303897 - La stanza virtuale 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 da 2.1.0-rc01
. I commit inclusi nella versione sono disponibili qui.
Modifiche importanti dalla versione 2.0.0
- FTS: la stanza ora supporta le entità con una tabella di mappatura FTS3 o FTS4. Le classi annotate con
@Entity
ora possono essere aggiunte anche con@Fts3
o@Fts4
per dichiarare una classe con una tabella di ricerca a testo intero di mappatura. Le opzioni FTS per ulteriori personalizzazioni sono disponibili tramite i metodi dell'annotazione. - Visualizzazioni: la stanza ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, utilizzando l'annotazione
@DatabaseView
. - Couroutine: i metodi DAO ora possono essere sospesi. Includi
room-ktx
nelle dipendenze per sfruttare questa funzionalità. L'artefatto ktx fornisce anche la funzione di estensioneRoomDatabase.withTransaction
per eseguire transazioni di database all'interno di una coroutine. - Valore automatico: la stanza ora supporta la dichiarazione di classi annotate AutoValue come entità e POJO. Le annotazioni per camera
@PrimaryKey
,@ColumnInfo
,@Embedded
e@Relation
ora possono essere dichiarate nei metodi astratti di una classe con valori automatici annotati. Tieni presente che queste annotazioni devono anche essere accompagnate da@CopyAnnotations
affinché la stanza virtuale possa capirla correttamente. - Supporto asincrono aggiuntivo: i metodi DAO annotati con
@Insert
,@Delete
o@Update
, insieme a@Query
che contengono istruzioniINSERT
,DELETE
oUPDATE
, ora supportano i tipi di reso RxCompletable
,Single
,Maybe
e il tipo restituito di GuavaListenableFuture
, oltre a poter sospendere le funzioni. enableMultiInstanceInvalidation
è una nuova API inRoomDatabase.Builder
per abilitare 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 in base al nome.- La stanza 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
- Risolto un errore di inizializzazione della stanza che potrebbe verificarsi a causa di una configurazione temp_store già impostata. b/132602198
- Risolto il problema di utilizzo delle virgolette doppie per gli utenti con SQLite 3.27.0 e versioni successive. b/131712640
- Risolto il bug per cui InvalidationTracker causava un arresto anomalo quando venivano eseguiti più controlli di invalidazione in parallelo. b/133457594
Versione 2.1.0-beta01
7 maggio 2019
androidx.room 2.1.0-beta01
viene rilasciato senza modifiche dalla versione 2.1.0-alpha07. I commit inclusi in questa versione sono disponibili qui.
Versione 2.1.0-alpha07
25 aprile 2019
Modifiche ad API / comportamento
- La funzione dell'estensione
RoomDatabase.withTransaction
è stata modificata in modo che non utilizzi più un blocco funzione conCoroutineScope
come destinatario. Questo impedisce di saltare il wrappercoroutineScope { }
aggiuntivo necessario per eseguire contemporaneamente elementi nel blocco transazioni.
Correzioni di bug
- Risolto il bug per cui la stanza non corrispondeva a un TypeConverter per una funzione DAO Kotlin contenente un parametro di tipo Raccolta. b/122066791
Versione 2.1.0-alpha06
22 marzo 2019
Modifiche ad API / comportamento
- Le query sulle transazioni asincrone ora sono serializzate in modo che la stanza virtuale non utilizzi più di un thread per l'esecuzione delle transazioni del database.
RoomDatabase.Builder.setTransactionExecutor(Executor)
è stato aggiunto per consentire la configurazione dell'esecutore da utilizzare per le transazioni. RoomDatabase.runInTransaction(Callable)
non eseguirà più il wrapping delle eccezioni selezionate in RuntimeEccezioni. b/128623748
Correzioni di bug
- Risolto un bug per cui il tracker dell'annullamento della convalida smetteva di osservare una tabella dei contenuti se venivano aggiunti gli osservatori sia per la tabella dei contenuti che per una tabella FTS dei contenuti esterni.b/128508917
- È stata aggiornata la grammatica SQLite della stanza 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 modo sicuro transazioni di database all'interno di una coroutine. Le funzioni delle estensioni della stanza e il supporto delle coroutine sono disponibili nell'elementoroom-ktx
. - I metodi DAO non astratti annotati con
@Transaction
ora possono essere sospesi. b/120241587
Modifiche ad API / comportamento
- L'elemento
room-coroutines
è stato rinominato inroom-ktx
con la stessa denominazione degli altri artefatti androidx. beginTransaction
,setTransactionSuccessful
eendTransaction
inRoomDatabase
sono stati ritirati a favore dirunInTransaction
e della funzione di estensioneroom-ktx
withTransaction
.
Correzioni di bug
- Risolto un bug per cui gli argomenti del tokenizzatore venivano eliminati se il tokenizzatore utilizzato era SEMPLICE. b/125427014
- Risolto il bug per cui la stanza virtuale non riusciva a identificare correttamente le funzioni di sospensione con parametri whos type erano una classe interna. b/123767877
- Risolto il 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 diversi bug per cui la stanza virtuale generava un codice errato per determinate funzioni di sospensione. b/123466702 e b/123457323
- Risolto un bug per cui l'utilizzo deprecato dei metodi non veniva eliminato correttamente nel codice generato. b/117602586
- È stata aggiornata la dipendenza della stanza 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 di progetto.
Versione 2.1.0-alpha04
25 gennaio 2019
Nuove funzionalità
- I metodi DAO annotati con
@Query
contenenti istruzioniINSERT
,UPDATE
oDELETE
ora possono restituire i tipi asincroniSingle
,Mayble
,Completable
eListenableFuture
. Inoltre, possono essere anche sospese le funzioni. b/120227284
Modifiche ad API / comportamento
- Ora la stanza virtuale genererà un errore se un metodo DAO non astratto annotato con
@Transaction
restituisce un tipo asincrono comeSingle
,Mayble
,Completable
,LiveData
oListenableFuture
. Poiché le transazioni sono limitate ai thread, al momento è impossibile per la stanza virtuale iniziare e terminare una transazione relativa a una funzione che potrebbe eseguire query in thread diversi. b/120109336 OnConflictStrategy.FAIL
eOnConflictStrategy.ROLLBACK
sono stati@Deprecated
perché non si comportano come previsto con le attuali associazioni SQLite di Android. b/117266738
Correzioni di bug
- Risolto il bug per cui la stanza virtuale non utilizzava correttamente il TypeConverter di un tipo restituito se il metodo DAO era una funzione di sospensione. b/122988159
- Risolto il bug per cui la stanza virtuale identificava erroneamente le funzioni di sospensione ereditate come non sospese. b/122902595
- Risolto il bug per cui la stanza virtuale generava un codice errato quando un campo
@Embedded
si trovava in una classe principale e veniva utilizzato in più classi secondarie. b/121099048 - Risolto il problema per cui il database si bloccava quando si richiamano le funzioni di sospensione DAO tra
beginTransaction()
eendTransaction()
. B/120854786
Versione 2.1.0-alpha03
4 dicembre 2018
Modifiche alle API
- Il FTS
tokenizer
in@Fts3
/@Fts4
ora richiede una stringa anziché una Enum. In questo modo la stanza può utilizzare tokenizzatori personalizzati. I tokenizzatori integrati sono ancora definiti inFtsOptions
come costanti delle stringhe. b/119234881
Nuove funzionalità
- Couroutine: i metodi DAO ora possono essere sospesi. 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
- Risolto il bug per cui la stanza virtuale avrebbe tentato erroneamente di trovare un costruttore con colonne nella proprietà
ignoredColumns
di@Entity
. B/119830714 - Risolto il bug per cui la stanza virtuale non contrassegnava i parametri del metodo DAO come definitivi nell'implementazione generata. b/118015483
- Risolto il bug per cui il processore della stanza si arrestava in modo anomalo quando veniva segnalato un errore su una query con simboli speciali. b/119520136
- Risolto il bug per cui la stanza virtuale rifiutava altre varie implementazioni
Collection
come argomenti di un'espressioneIN
. b/119884035 - Risolto il bug per cui LiveData restituita dalla stanza virtuale riceveva garbage collection quando osservato per sempre e, di conseguenza, non emetteva più nuovi dati. b/74477406
- È stato aggiornato il blocco di chiusura di
RoomDatabase
per ridurre la contesa del blocco. b/117900450
Versione 2.1.0-alpha02
30 ottobre 2018
Nuove funzionalità
- Aggiunto il supporto per il riferimento a
@DatabaseView
in@Relation
. B/117680932
Correzioni di bug
- Risolto il bug per cui la stanza eseguiva l'I/O del disco nel thread principale durante l'iscrizione e l'eliminazione da un tipo restituito Rx. b/117201279
- Risolto il bug per cui la stanza virtuale non riusciva a trovare un convertitore di tipi appropriato per un campo in una classe di entità Kotlin. b/111404868
- Risolto il bug per cui la stanza virtuale generava codice errato per un'implementazione dell'interfaccia
DAO
contenente un metodo predefinito Kotlin privo di argomenti. b/117527454 - È stato aggiornato il parser grammaticale SQLite della stanza, in modo da risolvere un problema di prestazioni che causava tempi di build lunghi. b/117401230
Versione 2.1.0-alpha01
8 ottobre 2018
Nuove funzionalità
- FTS: la stanza ora supporta le entità con una tabella di mappatura FTS3 o FTS4. Ora è possibile aggiungere
@Fts3
o@Fts4
alle classi annotate con@Entity
per dichiarare una classe con una tabella di ricerca a testo intero di mappatura. Le opzioni FTS per ulteriori personalizzazioni 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 ora supporta la dichiarazione di classi annotate AutoValue come entità e POJO. Le annotazioni per le stanze
@PrimaryKey
,@ColumnInfo
,@Embedded
e@Relation
ora possono essere dichiarate nei metodi astratti di una classe con valore automatico. Tieni presente che queste annotazioni devono anche essere accompagnate da@CopyAnnotations
affinché la stanza possa capirle correttamente. b/62408420 - Supporto aggiuntivo per i tipi di reso Rx: i metodi DAO annotati con
@Insert
,@Delete
o@Update
ora supportano i tipi di reso RxCompletable
,Single<T>
eMaybe<T>
. B/63317956 - Tipi immutabili con
@Relation
: in precedenza la stanza richiedeva l'impostazione di campi annotati@Relation
, ma ora possono essere parametri del costruttore. enableMultiInstanceInvalidation
: è una nuova API inRoomDatabase.Builder
per abilitare l'annullamento della convalida in più istanze di RoomDatabase utilizzando lo stesso file di database. Questo meccanismo di annullamento della convalida 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 in base al nome. Utile per ignorare i campi ereditati su un'entità. b/63522075
Modifiche ad API / comportamento
mCallback
emDatabase
inRoomDatabase
ora sono@Deprecated
e verranno rimossi nella prossima versione principale della stanza virtuale. b/76109329
Correzioni di bug
- Risolti due problemi per cui la stanza non veniva ripristinata correttamente da un database danneggiato o una migrazione errata durante l'inizializzazione. b/111504749 e b/111519144
- La stanza virtuale utilizzerà correttamente il costruttore principale di Kotlin nelle classi di dati, evitando di dover 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 ad API / comportamento
- È stato aggiunto un elemento
RoomDatabase.Builder.setQueryExecutor()
per consentire la personalizzazione della posizione in cui vengono eseguite le query - Aggiunto il supporto
Observable
per RxJava2 - Le implementazioni DAO e del database generate sono ora definitive
Correzioni di bug
- Specifica il nome della classe/del campo nell'errore "Impossibile trovare getter per il campo" b/73334503
- Correzione della compatibilità con le versioni precedenti di RoomOpenHelper con le versioni precedenti di Room b/110197391
Dipendenze pre-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 usi le migrazioni.
Risolto il bug per cui la stanza virtuale non gestiva correttamente l'inizializzazione dopo la 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
di Room in cui viene riciclato in anticipo la query, causando problemi se si aggiunge 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 dell'esame delle API,
@RawQuery
non accetta più il passaggio diString
come parametro di query. Devi utilizzare [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (consulta [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] per creare facilmente un'istanza di [SupportSQLiteQuery][ref-SupportSQLiteQuery] con supporto degli argomenti). - Il metodo [fallbackToDestructivemigrationFrom][ref-fallbackToDestructive MigrationFrom] 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 e
VACUUM
creando 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 della stanza ora gestisce correttamente le dipendenze multi-tabella (come relazioni e join). In precedenza, questi non avrebbero attivato nuovi risultati o la loro compilazione. 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 in merito da cui sono consentite le migrazioni distruttive delle versioni iniziali dello schema (rispetto a fallbackToDestructivemigration) b/64989640- La stanza ora supporta solo le API di paging più recenti (alpha-4+), con supporto della versione deprecata
LivePagedListProvider
. Per usare la nuova stanza Alpha, devi usare l'impaginazionealpha-4
o una pagina successiva e passare daLivePagedListProvider
aLivePagedListBuilder
se non l'hai ancora fatto.
Correzioni di bug
- Supporto migliorato per i tipi di Kapt Kotlin. b/69164099
- L'ordine dei campi non rende più lo schema invalidato. b/64290754