Room

La libreria di persistenza Room fornisce un livello di astrazione su SQLite per consentire un accesso più affidabile al database sfruttando tutta la potenza di SQLite.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Alpha Release
16 luglio 2025 2.7.2 - - 2.8.0-alpha01

Dichiarazione di dipendenze

Per aggiungere una dipendenza da Room, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.

Le dipendenze per Room includono test delle migrazioni di Room e Room RxJava

Aggiungi le dipendenze per gli artefatti che ti servono nel file build.gradle per la tua app o il tuo modulo:

Kotlin

dependencies {
    val room_version = "2.7.2"

    implementation("androidx.room:room-runtime:$room_version")

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Groovy

dependencies {
    def room_version = "2.7.2"

    implementation "androidx.room:room-runtime:$room_version"

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See KSP Quickstart to add KSP to your build
    ksp "androidx.room:room-compiler:$room_version"

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

Per informazioni sull'utilizzo del plug-in KAPT, consulta la documentazione di KAPT.

Per informazioni sull'utilizzo del plug-in KSP, consulta la documentazione di avvio rapido di KSP.

Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di KTX.

Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze di build.

Facoltativamente, per le librerie non Android (ovvero i moduli Gradle solo Java o Kotlin), puoi fare affidamento su androidx.room:room-common per utilizzare le annotazioni Room.

Configurazione delle opzioni del compilatore

Room ha le seguenti opzioni di elaborazione delle annotazioni.

room.schemaLocation directory
Consente di esportare gli schemi di database in file JSON nella directory specificata. Per ulteriori informazioni, consulta la sezione Migrazioni delle stanze.
room.incremental boolean
Attiva il processore di annotazioni incrementale di Gradle. Il valore predefinito è true.
room.generateKotlin boolean
Genera file sorgente Kotlin anziché Java. Richiede KSP. Il valore predefinito è true a partire dalla versione 2.7.0. Per ulteriori dettagli, consulta le note relative alla versione 2.6.0, quando è stata introdotta.

Utilizzare il plug-in Gradle di Room

Con Room versione 2.6.0 e successive, puoi utilizzare il plug-in Gradle di Room per configurare le opzioni per il compilatore Room. Il plug-in configura il progetto in modo che gli schemi generati (che sono un output delle attività di compilazione e vengono utilizzati per le migrazioni automatiche) siano configurati correttamente per avere build riproducibili e memorizzabili nella cache.

Per aggiungere il plug-in, definisci il plug-in e la relativa versione nel file di build Gradle di primo livello.

Groovy

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

Nel file di build Gradle a livello di modulo, applica il plug-in e utilizza l'estensione room.

Groovy

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Kotlin

plugins {
    id("androidx.room")
}

android {
    ...
    room {
        schemaDirectory("$projectDir/schemas")
    }
}

L'impostazione di un schemaDirectory è obbligatoria quando utilizzi il plug-in Gradle Room. In questo modo il compilatore Room e le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) verranno configurati per generare file di schema in cartelle con varianti, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json. Questi file devono essere inseriti nel repository per essere utilizzati per la convalida e le migrazioni automatiche.

Alcune opzioni non possono essere configurate in tutte le versioni del plug-in Gradle di Room, anche se sono supportate dal compilatore Room. La tabella seguente elenca ogni opzione e mostra la versione del plug-in Gradle di Room che ha aggiunto il supporto per la configurazione di questa opzione utilizzando l'estensione room. Se la tua versione è precedente o se l'opzione non è ancora supportata, puoi utilizzare le opzioni del processore di annotazioni.

Opzione A partire dalla versione
room.schemaLocation (campo obbligatorio) 2.6.0
room.incremental -
room.generateKotlin -

Utilizzare le opzioni del processore di annotazioni

Se non utilizzi il plug-in Gradle di Room o se l'opzione che ti interessa non è supportata dalla tua versione del plug-in, puoi configurare Room utilizzando le opzioni del processore di annotazioni, come descritto in Aggiungere dipendenze di build. Il modo in cui specificare le opzioni di annotazione dipende dall'utilizzo di KSP o KAPT per Room.

Groovy

// For KSP
ksp {
    arg("option_name", "option_value")
    // other otions...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "option_name":"option_value",
                    // other options...
                    ]
            }
        }
    }
}

Kotlin

// For KSP
ksp {
    arg("option_name", "option_value")
    // other options...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "option_name" to "option_value",
                    // other options...
                )
            }
        }
    }
}

Poiché room.schemaLocation è una directory e non un tipo primitivo, è necessario utilizzare un CommandLineArgumentsProvider quando aggiungi questa opzione in modo che Gradle conosca questa directory quando esegue controlli aggiornati. Migrate your Room database mostra un'implementazione completa di CommandLineArgumentsProvider che fornisce la posizione dello schema.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa libreria. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa libreria. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Creare un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 2.8

Versione 2.8.0-alpha01

16 luglio 2025

androidx.room:room-*:2.8.0-alpha01 viene ritirata. La versione 2.8.0-alpha01 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto un nuovo artefatto androidx.room:room-sqlite-wrapper che contiene API per ottenere un wrapper SupportSQLiteDatabase di RoomDatabase con un SQLiteDriver configurato. Per ottenere il wrapper, utilizza la nuova funzione di estensione RoomDatabase.getSupportWrapper(). Si tratta di un artefatto di compatibilità per mantenere gli utilizzi di SupportSQLiteDatabase, in genere ottenuti da RoomDatabase.openHelper.writableDatabase, anche se il database Room è configurato con un SQLiteDriver. Questo wrapper è utile per la migrazione incrementale di codebase che vogliono adottare SQLiteDriver, ma hanno un utilizzo esteso delle API SupportSQLite e vogliono sfruttare BundledSQLiteDriver. (Icf6ac)
  • Aggiungi target KMP per Watch OS e TV OS (I228f6, b/394238801)

Correzioni di bug

  • Correzione di un deadlock che poteva verificarsi occasionalmente quando si utilizzavano le transazioni sospese e AndroidSQLiteDriver. (b/415006268)

Versione 2.7

Versione 2.7.2

18 giugno 2025

androidx.room:room-*:2.7.2 viene ritirata. La versione 2.7.2 contiene questi commit.

Correzioni di bug

  • Risolvi un problema per cui i valori delle annotazioni venivano letti in modo errato durante l'elaborazione delle origini native con KSP, a volte mancavano le esportazioni dello schema. (b/416549580)
  • Correzione di un bug per cui i commenti iniziali in un SQL causavano l'esecuzione delle istruzioni come se fossero query di sola lettura. (b/413061402)
  • Risolvi un problema relativo alla mancata configurazione del plug-in Gradle di Room a causa della directory dello schema vuota. (b/417823384)
  • Non viene più generato un SQLiteException quando l'ottenimento di una connessione richiede troppo tempo. Al suo posto, la libreria invia un messaggio di log. La registrazione anziché la generazione di errori funziona intorno ai loop di sospensione di iOS, causando l'errata interpretazione del timeout che si verifica nella coroutine Kotlin che acquisisce la connessione e impedisce quindi la generazione dell'eccezione quando un'app per iOS viene eseguita in background e ripresa in un secondo momento nel bel mezzo di un'operazione di database. (b/422448815)

Versione 2.7.1

23 aprile 2025

androidx.room:room-*:2.7.1 viene ritirata. La versione 2.7.1 contiene questi commit.

Correzioni di bug

  • Correzione del bug IndexOutOfBoundsException durante la convalida del convertitore di tipi fornito. (b/409804755).
  • Supporto di RoomDatabase.runInTransaction() quando un SQLiteDriver è configurato con Room. (b/408364828).

Versione 2.7.0

9 aprile 2025

androidx.room:room-*:2.7.0 viene ritirata. La versione 2.7.0 contiene questi commit.

Modifiche importanti dalla versione 2.6.0

  • Supporto di Kotlin Multiplatform (KMP):in questa release, Room è stato sottoposto a refactoring per diventare una libreria Kotlin Multiplatform (KMP). Le piattaforme attualmente supportate sono Android, iOS, JVM (desktop), Mac nativo e Linux nativo. Per ulteriori informazioni su come iniziare a utilizzare Room KMP, consulta la documentazione ufficiale di Room KMP. Nell'ambito del supporto di KMP, Room può essere configurato anche con un SQLiteDriver. Per informazioni su come eseguire la migrazione di un'app esistente alle API Driver e a Room KMP, consulta la documentazione sulla migrazione.
  • Kotlin Code Generation on KSP è attivato per impostazione predefinita se l'elaborazione viene eseguita tramite KSP. Per i progetti solo KAPT o Java, Room genererà comunque origini Java.
  • Kotlin 2.0 e KSP2:Room ora ha come target il linguaggio Kotlin 2.0 e richiederà che anche i progetti vengano compilati con Kotlin 2.0 e una versione del linguaggio equivalente o superiore. È stato aggiunto anche il supporto per KSP2, consigliato quando si utilizza Room con Kotlin 2.0 o versioni successive.

Versione 2.7.0-rc03

26 marzo 2025

androidx.room:room-*:2.7.0-rc03 viene ritirata. La versione 2.7.0-rc03 contiene questi commit.

Correzioni di bug

  • Non viene più generata un'eccezione InterruptedExceptionquando un thread viene interrotto durante l'esecuzione delle API di blocco delle stanze, incluse le funzioni DAO di blocco (b/400584611).
  • Reimplementa il pool di connessioni di Room nel tentativo di alleviare SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection. e problemi simili (b/380088809).

Versione 2.7.0-rc02

12 marzo 2025

androidx.room:room-*:2.7.0-rc02 viene ritirata. La versione 2.7.0-rc02 contiene questi commit.

Correzioni di bug

  • Correzione delle migrazioni automatiche che gestiscono in modo errato una nuova colonna in una tabella FTS. (b/348227770, Ic53f3)
  • Correzione di un arresto anomalo del compilatore di stanze dovuto a un NullPointerException durante l'elaborazione di origini non JVM tramite KSP. (b/396607230, I693c9)
  • Risolvi un problema per cui Room non invalidava le tabelle al termine dell'utilizzo della connessione writer. (b/340606803, I73ef6)

Versione 2.7.0-rc01

26 febbraio 2025

androidx.room:room-*:2.7.0-rc01 viene ritirata. La versione 2.7.0-rc01 contiene questi commit.

Correzioni di bug

  • Risolvi un problema per cui Room non imposta busy_timeout nella connessione iniziale al database, il che comporta problemi di SQLException: Error code: 5, message: database is locked (I93208, b/380088809).
  • È stato risolto un problema nel compilatore di Room che causava l'arresto anomalo del processore KSP durante l'elaborazione di set di origini nativi (come iOS) su Kotlin 2.1.x e KSP1 (I883b8, b/396607230).

Versione 2.7.0-beta01

12 febbraio 2025

androidx.room:room-*:2.7.0-beta01 viene ritirata. La versione 2.7.0-beta01 contiene questi commit.

Correzioni di bug

  • Risolvi un problema con RoomDatabase.inTransaction() che apre un database chiuso quando non dovrebbe e dovrebbe restituire rapidamente false se il database è chiuso (b/325432967).
  • È stato corretto un arresto anomalo (IllegalArgumentException: not a valid name) nel compilatore di Room durante l'elaborazione delle funzioni DAO con classi inline / valore Kotlin (b/388299754).
  • Includi le regole Proguard nell'artefatto JVM di room-runtime in modo che il costruttore predefinito dell'implementazione del database generata non venga rimosso, poiché viene utilizzato dall'inizializzazione predefinita di Room che utilizza la reflection (b/392657750).

Versione 2.7.0-alpha13

29 gennaio 2025

androidx.room:room-*:2.7.0-alpha13 viene ritirata. La versione 2.7.0-alpha13 contiene questi commit.

Modifiche alle API

  • Room ora ha come target il linguaggio Kotlin 2.0 e richiederà che i progetti vengano compilati anche con Kotlin 2.0 e una versione del linguaggio equivalente o superiore. (I8efb0, b/315461431, b/384600605)

Correzioni di bug

  • Risolvi un problema nel builder di database Room KMP quando in Android veniva utilizzato un nome semplice anziché un percorso e il percorso risolto del file di database non si trovava nella directory dei dati dell'app. (I83315, b/377830104)
  • Correzione di un problema relativo al plug-in Gradle per Room in cui la configurazione degli input e dell'output dello schema causava un problema nei progetti Android: property 'inputDirectory' is final and cannot be changed any further. (1dbb4c, b/376071291)
  • Aggiungi il supporto per KSP2 nel plug-in Gradle di Room, risolvendo un problema per cui la directory dello schema non veniva configurata correttamente dal plug-in. (Iec3c4, b/379159770)

Contributo esterno

  • È stato risolto un problema relativo all'integrazione della paginazione di Room che causava salti dell'interfaccia utente quando la chiave iniziale da aggiornare era troppo vicina alla fine dell'elenco. Grazie a Eva. (I2abbe, b/389729367)

Versione 2.7.0-alpha12

11 dicembre 2024

androidx.room:room-*:2.7.0-alpha12 viene ritirata. La versione 2.7.0-alpha12 contiene questi commit.

Modifiche alle API

  • Aggiungi l'API sperimentale RoomDatabase.Builder.setInMemoryTrackingMode() per configurare se Room utilizzerà o meno una tabella in memoria per il monitoraggio dell'invalidazione. (I2a9b2, b/185414040)

Correzioni di bug

  • Le migrazioni distruttive ora eliminano le visualizzazioni per garantire che vengano ricreate, allineando il comportamento quando allowDestructiveMigrationForAllTables è ATTIVO (impostazione predefinita di KMP) con il comportamento esistente quando è DISATTIVATO. (0a3e83, b/381518941)

Versione 2.7.0-alpha11

30 ottobre 2024

androidx.room:room-*:2.7.0-alpha11 viene ritirata. La versione 2.7.0-alpha11 contiene questi commit.

Modifiche alle API

  • Rivedi la firma del metodo convertRows() appena aggiunto per renderlo una funzione di sospensione che riceve un RawRoomQuery per la ricerca di stanze. (Ie57b5, b/369136627)

Correzioni di bug

  • È stato risolto il problema di cambio pagina della stanza per cui veniva generato un codice non valido quando si utilizzava @Relation insieme a PagingSource.

Versione 2.7.0-alpha10

16 ottobre 2024

androidx.room:room-*:2.7.0-alpha10 viene ritirata. La versione 2.7.0-alpha10 contiene questi commit.

Modifiche alle API

  • Crea una classe ByteArrayWrapper interna per supportare le relazioni con ByteBuffer in piattaforme non Android e non JVM. (I75543, b/367205685)
  • Aggiungi SQLiteStatement.getColumnType() insieme alle varie costanti dei risultati SQLITE_DATA_* per consentire il recupero del tipo di dati di una colonna. (I1985c, b/369636251)

Versione 2.7.0-alpha09

2 ottobre 2024

androidx.room:room-*:2.7.0-alpha09 viene ritirata. La versione 2.7.0-alpha09 contiene questi commit.

Correzioni di bug

  • Risolvi un problema con l'implementazione KMP di room-paging che causava un Error code: 8, message: attempt to write a readonly database a causa dell'avvio di una transazione di scrittura su una connessione di lettura. (b/368380988)

Versione 2.7.0-alpha08

18 settembre 2024

androidx.room:room-*:2.7.0-alpha08 viene ritirata. La versione 2.7.0-alpha08 contiene questi commit.

Nuove funzionalità

  • Gli artefatti room-paging sono stati migrati per essere compatibili con KMP. (Ib8756, b/339934824)
  • L'API invalidationTrackerFlow() è stata resa comune come API proprietaria come InvalidationTracker.createFlow() ed è ora disponibile per i set di origini non Android nei progetti KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)

Modifiche alle API

  • Tutti gli avvisi e i messaggi di errore in Room che utilizzano la parola Cursor sono stati rimossi o sostituiti, in quanto Cursor non è più un termine generale accurato da utilizzare nella versione KMP di Room. (Id8cd9, b/334087492)

Correzioni di bug

  • Risolto un problema per cui Room KMP tentava di emettere codice utilizzando UUID per piattaforme non JVM. (b/362994709)
  • È stato risolto un problema con il plug-in Gradle di Room che causava un errore come "Cannot change attributes of configuration … after it has been locked for mutation" (Impossibile modificare gli attributi della configurazione… dopo che è stata bloccata per la mutazione) quando veniva utilizzato in un progetto KMP con Compose Multiplatform. (b/343408758)

Versione 2.7.0-alpha07

21 agosto 2024

androidx.room:room-*:2.7.0-alpha07 viene ritirata. La versione 2.7.0-alpha07 contiene questi commit.

Nuove funzionalità

  • Il plug-in Gradle di Room ora aggiungerà automaticamente gli schemi esportati alle origini delle risorse di test di strumentazione Android in modo che possano essere utilizzati da MigrationTestHelper.

Correzioni di bug

  • È stato risolto un problema relativo al valore "actual" generato di RoomDatabaseConstructor a cui manca il modificatore "actual" nella funzione initialize se questa funzione viene anche sostituita nella dichiarazione "expect". (359631627)
  • È stato risolto un problema per cui il valore "effettivo" generato di RoomDatabaseConstructor non corrispondeva alla visibilità della dichiarazione "previsto". (358138953)

Versione 2.7.0-alpha06

7 agosto 2024

androidx.room:room-*:2.7.0-alpha06 viene ritirata. La versione 2.7.0-alpha06 contiene questi commit.

Modifiche alle API

  • Modifica la configurazione dell'istanza per un RoomDatabase in un progetto KMP.

A causa del modello di compilazione di Kotlin 2.0, la strategia di riferimento a una funzione da generare, denominata instantiateImpl(), non è più valida. Sono state introdotte due nuove API, @ConstructedBy e RoomDatabaseConstructor, che sostituiscono la strategia instantiateImpl(). La nuova strategia è la seguente:

  1. Definisci un oggetto expect che implementi RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. Collega l'oggetto alla dichiarazione @Database utilizzando @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. Crea una nuova istanza di database, ma senza passare un argomento di fabbrica

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

Correzioni di b/316978491, b/338446862 e b/342905180

  • Supporto di @RawQuery in Room KMP aggiungendo una nuova API chiamata RoomRawQuery simile a SupportSQLiteQuery in termini di conservazione della stringa SQL non elaborata e una funzione per associare gli argomenti a un'istruzione. @RawQuery ora possono accettare un RoomRawQuery come unico parametro. (Iea844, b/330586815)
  • Aggiungi un sovraccarico di setQueryCallback() che accetta un CoroutineContext. (Id66ff, b/309996304)
  • È stato aggiunto il supporto per i target multipiattaforma Kotlin linuxArm64 (I139d3, b/338268719)

Correzioni di bug

  • Risolvi un problema per cui Room generava in modo errato una chiamata a recursiveFetchArrayMap in target non Android. (710c36, b/352482325)
  • Risolvi un problema per cui a volte Room genera un'eccezione relativa a "Timeout durante il tentativo di connessione" in un progetto KMP. (fa72d0, b/347737870)
  • È stato risolto un problema nelle migrazioni automatiche che controllava le chiavi esterne troppo presto prima che altre tabelle modificassero i propri schemi per conformarsi alle nuove chiavi esterne. (7672c0, b/352085724)

Versione 2.7.0-alpha05

10 luglio 2024

androidx.room:room-*:2.7.0-alpha05 viene ritirata. La versione 2.7.0-alpha05 contiene questi commit.

Modifiche alle API

  • SQLiteKt è stato rinominato in SQLite e BundledSQLiteKt in BundledSQLite. (I8b501)

Correzioni di bug

  • È stato corretto un bug per cui un RoomDatabase si bloccava o restituiva un errore con timeout della connessione quando si utilizzava AndroidSQLiteDriver.

Versione 2.7.0-alpha04

12 giugno 2024

androidx.room:room-*:2.7.0-alpha04 viene ritirata. La versione 2.7.0-alpha04 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui il processore di annotazioni di Room generava codice KMP incompatibile quando in un DAO veniva definito un tipo restituito multi-mappa. (b/340983093)
  • Risolto un problema per cui Room non riusciva a trovare l'implementazione del database generata se la classe annotata @Database non aveva un pacchetto. (b/342097292)
  • È stato risolto un problema a causa del quale l'attivazione della chiusura automatica e dell'invalidazione di più istanze a volte causava un errore ConcurrentModificationException quando il database veniva chiuso automaticamente a causa dell'inattività.

Versione 2.7.0-alpha03

29 maggio 2024

androidx.room:room-*:2.7.0-alpha03 viene ritirata. La versione 2.7.0-alpha03 contiene questi commit.

Correzioni di bug

  • Risoluzione di vari problemi relativi a Kotlin 2.0 e KSP 2.0. Tieni presente che il supporto di Kotlin 2.0 con KSP 2 non è completo e il team sta lavorando alle varie API e alle modifiche del comportamento nel nuovo compilatore. (b/314151707)

Versione 2.7.0-alpha02

14 maggio 2024

androidx.room:room-*:2.7.0-alpha02 viene ritirata. La versione 2.7.0-alpha02 contiene questi commit.

Correzioni di bug

  • Risolti vari problemi di KSP.

Versione 2.7.0-alpha01

1° maggio 2024

androidx.room:room-*:2.7.0-alpha01 viene ritirata. La versione 2.7.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Supporto di Kotlin Multiplatform (KMP): in questa release, Room è stato sottoposto a refactoring per diventare una libreria Kotlin Multiplatform (KMP). Sebbene ci sia ancora del lavoro da fare, questa release introduce una nuova versione di Room in cui la maggior parte delle funzionalità è stata "comunizzata" (resa multipiattaforma). Le piattaforme attualmente supportate sono Android, iOS, JVM (desktop), Mac nativo e Linux nativo. Le funzionalità mancanti nelle piattaforme appena supportate verranno completate nelle prossime release di Room.

Per ulteriori informazioni su come iniziare a utilizzare Room KMP, consulta la documentazione ufficiale di Room KMP.

  • Kotlin Code Generation on KSP è attivato per impostazione predefinita se l'elaborazione viene eseguita tramite KSP. Per i progetti solo KAPT o Java, Room genererà comunque origini Java.

Modifiche alle API

  • È stato aggiunto un overload di Room.databaseBuilder() che accetta un parametro lambda da utilizzare con una funzione generata da Room per evitare di utilizzare la reflection durante l'istanziamento dell'implementazione RoomDatabase generata. Esempio di utilizzo:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • È stata aggiunta al builder un'API per configurare una stanza con un CoroutineContext: RoomDatabase.Builder.setQueryCoroutineContext. Tieni presente che un RoomDatabase può essere configurato solo con executor che utilizzano setQueryExecutor o con un contesto di coroutine, ma non entrambi.
  • È stata aggiunta un'API per la configurazione di Room con un driver SQLite: RoomDatabase.Builder.setDriver(). Per saperne di più sull'API SQLite Driver, consulta la documentazione di SQLite KMP.
  • Sono state aggiunte API per l'accesso a SQLiteConnection sottostante dalle API del driver: RoomDatabase.useReaderConnection e RoomDatabase.useWriterConnection.
  • Ora diversi callback correlati a Varios Room hanno una versione di overload che riceve SQLiteConnection anziché SupportSQLiteDatabase. Questi sono pensati per essere sostituiti durante la migrazione a un progetto KMP. Per ulteriori informazioni sulla migrazione degli utilizzi di Room in un'app per Android a un modulo KMP comune, consulta la guida alla migrazione. I callback sono:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • L'artefatto KTX androidx.room:room-ktx è stato unito a androidx.room:room-runtime insieme a tutte le sue API e ora è vuoto. Rimuovilo dall'elenco delle dipendenze.

Versione 2.6

Versione 2.6.1

29 novembre 2023

androidx.room:room-*:2.6.1 viene ritirata. La versione 2.6.1 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema nel codice generato per cui il valore predefinito per le colonne Double in EntityCursorConverter veniva impostato su 0 anziché su 0.0. È stata inclusa anche una potenziale correzione per un caso limite simile per le colonne di tipo Float. (Id75f5, b/304584179)
  • Le eccezioni generate dai caricamenti di PagingSource verranno ora propagate come LoadStateUpdate di LoadResult.Error contenente Throwable. Questo stato di errore è osservabile tramite PagingDataAdapter.loadStateFlow(Views) o LazyPagingItems.loadState(Compose). Tieni presente che questo segna un cambiamento comportamentale in cui in passato gli errori di caricamento venivano visualizzati come eccezione generata dal metodo DAO che ha attivato il caricamento. (I93887, b/302708983)

Versione 2.6.0

18 ottobre 2023

androidx.room:room-*:2.6.0 viene ritirata. La versione 2.6.0 contiene questi commit.

Modifiche importanti dalla versione 2.5.0

  • L'opzione per attivare la generazione di codice Kotlin (o "Kotlin CodeGen") è ora disponibile in Room KSP. (4297ec0). Per attivare Kotlin CodeGen in Room, aggiungi il nome dell'opzione room.generateKotlin alle opzioni del processore per KSP. Per ulteriori dettagli su come trasmettere le opzioni del processore per KSP, consulta la documentazione di KSP.

Nota: quando utilizzi Kotlin CodeGen, è importante notare che sono state aggiunte ulteriori limitazioni. Le proprietà astratte come getter DAO o query DAO in Kotlin CodeGen non sono consentite e devono essere riscritte come funzioni per evitare la falsa idea che il valore della proprietà sia immutabile e abbia un risultato archiviato fisso. Un'altra limitazione aggiunta è che i tipi restituiti di raccolta Nullable non sono più consentiti in Room per Kotlin CodeGen.

Avviso:potresti notare che i tuoi progetti sono più rigorosi in termini di nullabilità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, l'annullabilità degli argomenti di tipo è importante, mentre in Java viene per lo più ignorata. Ad esempio, supponiamo di avere un tipo restituito `Flow<foo\>` e che la tabella sia vuota. In Java CodeGen, questo non causerà problemi, ma in Kotlin CodeGen riceverai un errore. Per evitare questo problema, devi utilizzare `Flow<foo?\>`, supponendo che venga emesso un valore nullo. </foo?\></foo\>

  • Il nuovo artefatto per il plug-in Gradle di Room è stato aggiunto a Room con l'ID androidx.room, che risolve vari problemi esistenti in Room relativi all'input e all'output degli schemi tramite le opzioni del processore di annotazioni Gradle. Per maggiori dettagli, consulta le note di rilascio della versione 2.6.0-alpha02 di Room.
  • Le classi di valori nelle entità della stanza sono ora supportate per KSP. (4194095)
  • I tipi restituiti di mappe nidificate nelle funzioni DAO sono ora supportati in Room. (I13f48, 203008711)

Versione 2.6.0-rc01

20 settembre 2023

androidx.room:room-*:2.6.0-rc01 viene ritirata. La versione 2.6.0-rc01 contiene questi commit.

Versione 2.6.0-beta01

23 agosto 2023

androidx.room:room-*:2.6.0-beta01 viene ritirata. La versione 2.6.0-beta01 contiene questi commit.

Correzioni di bug

  • Gestione dell'eccezione SQLite del caso speciale durante l'inserimento/aggiornamento riscontrata quando viene generata l'eccezione 2067 SQLITE_CONSTRAINT_UNIQUE durante un inserimento/aggiornamento, l'inserimento/aggiornamento deve eseguire un aggiornamento. (If2849, b/243039555)

Versione 2.6.0-alpha03

9 agosto 2023

androidx.room:room-*:2.6.0-alpha03 viene ritirata. La versione 2.6.0-alpha03 contiene questi commit.

Nuove funzionalità

  • I tipi restituiti di mappe nidificate nelle funzioni DAO sono ora supportati in Room. (I13f48, 203008711)

Modifiche alle API

  • È stata creata una nuova annotazione di tipo chiamata @MapColumn per sostituire @MapInfo, che ora è ritirata. Per ogni nome di colonna (keyColumnName, valueColumnName o entrambi) fornito in un'annotazione @MapInfo, devi dichiarare un'annotazione @MapColumn con solo columnName e utilizzare l'annotazione sull'argomento di tipo specifico a cui viene fatto riferimento (la chiave o il valore della mappa) nel tipo restituito della funzione DAO. Questo perché l'annotazione @MapColumn viene utilizzata direttamente nell'argomento del tipo all'interno del tipo restituito di una funzione DAO, anziché nella funzione stessa come @MapInfo. Per saperne di più, consulta la documentazione di @MapColumn. (Ib0305, b/203008711)
  • File API aggiornati per annotare la soppressione della compatibilità (I8e87a, b/287516207)
  • Le API del plug-in Gradle Room sono state aggiornate in modo da non richiedere sempre configurazioni per variante. Ciò significa che il plug-in può accettare una posizione globale per tutte le varianti senza creare più directory, consentendo migrazioni più fluide, ma è anche abbastanza flessibile da configurare manualmente gli schemi di tipi di build o di sapori, mantenendo comunque i vantaggi del plug-in (build riproducibili e memorizzabili nella cache). (I09d6f, b/278266663)

Correzioni di bug

  • Correzione della potenziale vulnerabilità di perdita di memoria in QueryInterceptorStatement. (I193d1)
  • È stato corretto il comportamento errato nella funzione QueryInterceptorDatabase execSQL(). (Iefdc8)

Versione 2.6.0-alpha02

21 giu 2023

androidx.room:room-*:2.6.0-alpha02 viene ritirata. La versione 2.6.0-alpha02 contiene questi commit.

Plug-in Gradle Room

Questa nuova release contiene un nuovo artefatto per il plug-in Gradle di Room con ID androidx.room, che risolve vari problemi esistenti in Room relativi all'inserimento e all'output di schemi tramite le opzioni del processore di annotazioni Gradle. Il plug-in Gradle di Room configura il progetto in modo che gli schemi generati utilizzati per le migrazioni automatiche e che sono l'output delle attività di compilazione siano configurati correttamente per avere build riproducibili e memorizzabili nella cache. Il plug-in offre un DSL per configurare la posizione dello schema di base:

room {
    schemaDirectory("$projectDir/schemas/")
}

Il plug-in configurerà quindi il compilatore Room e le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) per generare file di schema in cartelle con varianti, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json. Come di consueto, questi file vengono archiviati nel repository per essere utilizzati per la convalida e le migrazioni automatiche. Dopo la migrazione all'utilizzo del plug-in anziché delle opzioni del processore di annotazioni, i file di schema esistenti devono essere copiati nelle directory delle varianti generate create dal plug-in. Si tratta di un'operazione di migrazione una tantum che deve essere eseguita manualmente. La documentazione dello schema su developers.android.com verrà aggiornata in futuro una volta che il feedback sarà stato preso in considerazione e il plug-in avrà raggiunto la versione stabile, quindi provalo.

Modifiche alle API

  • RoomDatabase.QueryCallback è stato definito come un'interfaccia funzionale per consentire l'utilizzo della conversione SAM. (Iab8ea, b/281008549)

Correzioni di bug

  • Risoluzione del problema che si verifica durante l'istanza del database in Robolectric dopo la migrazione delle origini Room da Java a Kotlin. (Ic053c, b/274924903)

Versione 2.6.0-alpha01

22 marzo 2023

androidx.room:room-*:2.6.0-alpha01 viene ritirata. La versione 2.6.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Supporto delle classi di valori in Room per KSP. Ora Room è in grado di supportare le classi di valori nelle entità. (4194095)
  • La generazione di codice Kotlin(o "Kotlin CodeGen") ora può essere attivata in Room (4297ec0). Per attivare Kotlin CodeGen in Room, aggiungi il nome dell'opzione room.generateKotlin alle opzioni del processore per KSP. Per ulteriori dettagli su come trasmettere le opzioni del processore per KSP, consulta la documentazione di KSP.

Nota: quando utilizzi Kotlin CodeGen, è importante notare che sono state aggiunte ulteriori limitazioni. Le proprietà astratte come getter DAO o query DAO in Kotlin CodeGen non sono consentite e devono essere riscritte come funzioni per evitare la falsa idea che il valore della proprietà sia immutabile e abbia un risultato archiviato fisso. Un'altra limitazione aggiunta è che i tipi restituiti di raccolta Nullable non sono più consentiti in Room per Kotlin CodeGen.

Avviso:potresti notare che i tuoi progetti sono più rigorosi in termini di nullabilità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, l'annullabilità degli argomenti di tipo è importante, mentre in Java viene per lo più ignorata. Ad esempio, supponiamo di avere un tipo restituito `Flow<foo\>` e che la tabella sia vuota. In Java CodeGen, questo non causerà problemi, ma in Kotlin CodeGen riceverai un errore. Per evitare questo problema, devi utilizzare `Flow<foo?\>`, supponendo che venga emesso un valore nullo. </foo?\></foo\>

Modifiche alle API

  • Protezione dall'utilizzo senza significato di raccolte annullabili nei tipi restituiti dei metodi DAO. (I777dc, b/253271782, b/259426907)
  • Aggiungi un'API per creare un flusso che emette modifiche al tracker di invalidazione. L'API è utile per creare stream che devono reagire alle modifiche del database. (I8c790, b/252899305)

Correzioni di bug

  • Non consentire proprietà astratte come getter DAO o query DAO in Kotlin codegen, ma riscriverle come funzioni per evitare la falsa nozione che il valore della proprietà sia immutabile e abbia un risultato archiviato fisso. (If6a13, b/127483380, b/257967987)

Versione 2.5.2

Versione 2.5.2

21 giu 2023

androidx.room:room-*:2.5.2 viene ritirata. La versione 2.5.2 contiene questi commit.

Correzioni di bug

  • Risolvi un problema di incompatibilità con kotlinx-metadata-jvm. (386d5c)
  • Risolvi un problema che causa l'errore di Room quando viene utilizzato in un test Robolectric. (f79bea, b/274924903)

Versione 2.5.1

Versione 2.5.1

22 marzo 2023

androidx.room:room-*:2.5.1 viene ritirata. La versione 2.5.1 contiene questi commit.

Correzioni di bug

  • Evita di selezionare la directory principale del database in FrameworkSQLiteHelper se il database è già aperto. (5de86b8)
  • Utilizza un controllo isOpenInternal quando verifichi se il database è già aperto. (e91fb35)
  • Ora è disponibile una migliore gestione del caso di rientro in acquireTransactionThread() di Room. (219f98b). Durante una transazione di sospensione, Room utilizza un thread dall'executor della transazione, avvia un ciclo di eventi e invia le operazioni di database di sospensione in modo che siano tutte incapsulate all'interno della coroutine della transazione. In genere, il thread della transazione è diverso da quello che la avvia, ma in alcuni casi sono uguali. Per gestire questi casi di rientro, withTransaction() è stato refactorizzato in modo da non fare più affidamento su un job di controllo e, invece, esegue il blocco di transazione di sospensione dall'interno di runBlocking nel thread di transazione.

Versione 2.5.0

Versione 2.5.0

22 febbraio 2023

androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 e androidx.room:room-paging-rxjava3:2.5.0 sono rilasciati. La versione 2.5.0 contiene questi commit.

Versione 2.5.0

11 gennaio 2023

androidx.room:room-*:2.5.0 viene ritirata. La versione 2.5.0 contiene questi commit.

Modifiche importanti dalla versione 2.4.0

  • Tutte le origini di room-runtime sono state convertite da Java a Kotlin. Tieni presente che potresti riscontrare problemi di incompatibilità dell'origine se il tuo codice è in Kotlin a causa della conversione della libreria in Kotlin. Ad esempio, una modifica incompatibile nota dell'origine è che in InvalidationTracker ora devi dichiarare onInvalidate() in Observer per avere un parametro di tipo Set e non MutableSet. Inoltre, alcuni metodi getter sono stati convertiti in proprietà che richiedono la sintassi di accesso alle proprietà nei file Kotlin. Segnala un bug in caso di incompatibilità significative.
  • È stata aggiunta una nuova annotazione di scorciatoia, @Upsert, che tenta di inserire un'entità se non esiste un conflitto di unicità o di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)
  • Sono stati aggiunti nuovi artefatti di paging delle stanze room-paging-rxjava2, room-paging-rxjava3 e room-paging-guava per il supporto in Room Paging.
  • Aggiunte API per fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in @MapInfo (Icc4b5)

Versione 2.5.0-rc01

7 dicembre 2022

androidx.room:room-*:2.5.0-rc01 viene ritirata. La versione 2.5.0-rc01 contiene questi commit.

  • Questa release è identica a 2.5.0-beta02.

Versione 2.5.0-beta02

9 novembre 2022

androidx.room:room-*:2.5.0-beta02 viene ritirata. La versione 2.5.0-beta02 contiene questi commit.

Modifiche alle API

  • Correggi varie API che accettano argomenti di query da invarianti (Array<Any?>) a controvarianti (Array<out Any?>) in modo che corrispondano al comportamento degli array di Java. (b/253531073)

Versione 2.5.0-beta01

5 ottobre 2022

androidx.room:room-*:2.5.0-beta01 viene ritirata. La versione 2.5.0-beta01 contiene questi commit.

Modifiche alle API

  • Limita la versione minima che supporta @Upsert all'API 16. Ciò è dovuto all'impossibilità di identificare un conflitto di vincoli di chiave primaria nelle API precedenti. (I5f67f, b/243039555)

Correzioni di bug

  • Risolto un problema per cui le tabelle shadow venivano esportate in modo errato nei file dello schema .json, danneggiandoli. (I4f83b, b/246751839)

Versione 2.5.0-alpha03

24 agosto 2022

androidx.room:room-*:2.5.0-alpha03 viene ritirata. La versione 2.5.0-alpha03 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta una nuova annotazione di scorciatoia, @Upsert, che tenta di inserire un'entità se non esiste un conflitto di unicità o di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)

Correzioni di bug

  • Ora la stanza genererà un SQLiteConstraintException anziché un IllegalStateException durante un controllo del vincolo di chiave esterna di migrazione automatica. (I328dd)
  • Correzione di una modifica incompatibile dell'origine Kotlin per i getter / le proprietà di getOpenHelper, getQueryExecutor e getTransactionExecutor. (Iad0ac)

Versione 2.5.0-alpha02

1 giugno 2022

androidx.room:room-*:2.5.0-alpha02 viene ritirata. La versione 2.5.0-alpha02 contiene questi commit.

Nuove funzionalità

Modifiche alle API

  • Tutto il codice room-runtime è stato convertito da Java a Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)

    Nota:potresti riscontrare problemi di incompatibilità dell'origine a causa della conversione della libreria in Kotlin. Se il codice era in Kotlin e chiamava la vecchia versione di Room, la nuova versione dovrà gestire questi casi. Ad esempio, una modifica incompatibile nota dell'origine è che in InvalidationTracker ora devi dichiarare onInvalidate() in Observer per avere un parametro di tipo Set e non MutableSet.

  • Aggiunte API per fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in @MapInfo (Icc4b5)
  • Risolvi un problema di compatibilità dell'origine per consentire nuovamente @Ignore nei getter delle proprietà. (Ifc2fb)

Correzioni di bug

  • Algoritmo euristico di risoluzione delle colonne duplicate. Room ora tenterà di risolvere le colonne ambigue in una query multimappa. In questo modo, i JOIN con tabelle contenenti tabelle con lo stesso nome possono essere mappati correttamente a un oggetto dati dei risultati. (I4b444, b/201306012, b/212279118)

Versione 2.5.0-alpha01

23 febbraio 2022

androidx.room:room-*:2.5.0-alpha01 viene ritirata. La versione 2.5.0-alpha01 contiene questi commit.

Modifiche alle API

  • Risolto un problema per cui l'utilizzo di Room @IntDef non veniva applicato nelle origini Kotlin. (I75f41, b/217951311)
  • È stato risolto un problema di compatibilità dell'origine per consentire nuovamente @Query nei getter delle proprietà. (I0a09b)
  • È stata convertita la libreria room-common da Java a Kotlin. (I69c48, b/206858235)

    Nota:potresti riscontrare problemi di incompatibilità dell'origine, in quanto alcune proprietà sono state spostate in oggetti complementari durante la conversione della libreria in Kotlin. Se il codice era in Kotlin e chiamava la vecchia versione di Room, la nuova versione avrà bisogno del suffisso ".Companion" per accedere a queste proprietà.

  • È stata eseguita la conversione della migrazione delle stanze da Java a Kotlin. (I2724b, b/206858622)
  • Sono stati convertiti i file correlati a paging in room-runtime da Java a Kotlin. (I82fc8, b/206859668)
  • È stata aggiunta un'API per il blocco e l'utilizzo multiprocesso a livello di FrameworkSQLite*, per proteggere la creazione e le migrazioni del database multiprocesso alla prima esecuzione. (Ied267, b/193182592)

Correzioni di bug

  • È stato aggiunto il supporto per le proprietà interne nelle origini Kotlin. Si tratta di una leggera modifica del comportamento in Room, che utilizzerà il nome di origine delle funzioni durante l'abbinamento alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione, diverso per funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per abbinare i metodi getter/setter alle proprietà private, controlla attentamente il codice generato dopo l'aggiornamento (If6531, b/205289020).

Versione 2.4.3

Versione 2.4.3

27 luglio 2022

androidx.room:room-*:2.4.3 viene ritirata. La versione 2.4.3 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema che impediva a Room di riconoscere le funzioni di sospensione in Kotlin 1.7 (b/236612358).

Versione 2.4.2

Versione 2.4.2

23 febbraio 2022

androidx.room:room-*:2.4.2 viene ritirata. La versione 2.4.2 contiene questi commit.

Correzioni di bug

  • Risolvi un problema di generazione del codice per una funzione di sospensione Dao @Transaction con un corpo che genera un metodo di interfaccia predefinito a causa della compilazione con -Xjvm-default=all o equivalente. (Ia4ce5)
  • Risoluzione di un bug in cui Room genera codice per un metodo di query di tipo restituito Array<ByteArray>. (If086e, b/213789489)

Versione 2.4.1

Versione 2.4.1

12 gennaio 2022

androidx.room:room-*:2.4.1 viene ritirata. La versione 2.4.1 contiene questi commit.

Correzioni di bug

  • È stato aggiunto il supporto per le proprietà interne nelle origini Kotlin. Si tratta di una leggera modifica del comportamento in Room, che utilizzerà il nome di origine delle funzioni durante l'abbinamento alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione, diverso per funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per abbinare i metodi getter/setter alle proprietà private, controlla attentamente il codice generato dopo l'aggiornamento (If6531, b/205289020).

Versione 2.4.0

Versione 2.4.0

15 dicembre 2021

androidx.room:room-*:2.4.0 viene ritirata. La versione 2.4.0 contiene questi commit.

Modifiche importanti dalla versione 2.3.0

  • Migrazioni automatiche: Room ora offre un'API per generare automaticamente le migrazioni, a condizione che gli schemi vengano esportati. Per comunicare a Room che deve generare una migrazione automatica, è possibile utilizzare una nuova proprietà @Database#autoMigrations per dichiarare le versioni da cui e a cui eseguire la migrazione automatica. Quando Room ha bisogno di ulteriori informazioni su tabelle e ridenominazione o eliminazione di colonne, l'annotazione @AutoMigration può dichiarare una classe di specifica contenente questi input. Per ulteriori dettagli, consulta la documentazione di @AutoMigration.
  • Inserimento delle dipendenze nelle migrazioni automatiche: @ProvidedAutoMigrationSpec è una nuova API per dichiarare che un AutoMigrationSpec verrà fornito in fase di runtime tramite RoomDatabase.Builder#addAutoMigrationSpec(). Ciò consente a un framework di inserimento delle dipendenze di fornire queste specifiche quando sono necessarie dipendenze complesse.
  • Supporto di Migration Test Helper per le migrazioni automatiche: MigrationTestHelper di Room è stato aggiornato per supportare le migrazioni automatiche fornendo una nuova API costruttore che riceve la classe di database in fase di test. In questo modo, l'assistente può aggiungere automaticamente le migrazioni automatiche nello stesso modo durante runMigrationsAndValidate.
  • Supporto della paginazione di Room: androidx.room:room-paging è stato rilasciato, fornendo il supporto nativo di Paging 3.0 per le query Room che restituiscono androidx.paging.PagingSource.
  • Metodi di query relazionali: Room ora supporta i metodi @Dao per i tipi restituiti multimappa, utili per le istruzioni JOIN. I tipi di multimap supportati sono Map, SparseArray, LongSparseArray, oltre a ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap di Guava.

Versione 2.4.0-rc01

1° dicembre 2021

androidx.room:room-*:2.4.0-rc01 viene ritirata. La versione 2.4.0-rc01 contiene questi commit.

Nuove funzionalità

  • Aggiorna la dipendenza di Room da KSP a 1.6.0-1.0.1 per supportare Kotlin 1.6

Versione 2.4.0-beta02

17 novembre 2021

androidx.room:room-*:2.4.0-beta02 viene ritirata. La versione 2.4.0-beta02 contiene questi commit.

Nuove funzionalità

  • Abbiamo aggiunto il supporto per SparseArray e LongSparseArray in @MapInfo. (Ic91a2b/138910317)

Correzioni di bug

  • Abbiamo aggiunto un nuovo analizzatore TypeConverter che tiene conto delle informazioni sulla nullabilità nei tipi. Poiché queste informazioni sono disponibili solo in KSP, sono attivate per impostazione predefinita solo in KSP. Se causa problemi, puoi disattivarla passando room.useNullAwareTypeAnalysis=false al processore di annotazioni. Se ciò accade, segnala un bug, poiché questo flag verrà rimosso in futuro. Con questo nuovo analizzatore TypeConverter, è consigliabile fornire solo TypeConverter di ricezione non nulli, in quanto il nuovo analizzatore è in grado di eseguirne il wrapping con un controllo di nullità. Tieni presente che questo non ha alcun impatto per gli utenti che utilizzano KAPT o Java come processori di annotazioni (a differenza di KSP), non dispongono di informazioni sulla nullabilità nei tipi. (Ia88f9, b/193437407)
  • Correzione di un bug per cui la compilazione di Room non riusciva a causa di un errore SQL quando un'entità FTS dichiarava di utilizzare il tokenizer ICU. (I00db9, b/201753224)
  • È stato risolto un problema nelle migrazioni automatiche relativo a una nuova colonna aggiunta a un'entità incorporata tra le versioni. (I5fcb1b/193798291)
  • Abbiamo risolto un problema relativo ai tipi restituiti dal metodo di query relazionale nelle query LEFT JOIN. Con queste modifiche, nel caso in cui sia presente una mappatura 1-molti, la raccolta restituita per una chiave non includerà l'oggetto valore non valido se non viene trovato nel cursore. Se non vengono trovati valori validi, una chiave verrà mappata a una raccolta vuota. (Id5552b/201946438)
  • È stato risolto il problema di migrazione automatica per cui non è stato possibile eseguire l'escape delle parole chiave SQLite nei nomi delle colonne. (Idbed4b/197133152)

Versione 2.4.0-beta01

13 ottobre 2021

androidx.room:room-*:2.4.0-beta01 viene ritirata. La versione 2.4.0-beta01 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema relativo alle migrazioni automatiche che non aggiungevano nuove colonne quando un'altra tabella nella stessa migrazione automatica aveva anche una nuova colonna con lo stesso nome. (Ia5db5, b/200818663)
  • L'implementazione di PagingSource generata da room-paging ora utilizza queryExecutor passato tramite RoomDatabase.Builder, quindi può essere sostituito, anziché Dispatchers.IO in precedenza. (Iae259)

Versione 2.4.0-alpha05

29 settembre 2021

androidx.room:room-*:2.4.0-alpha05 viene ritirata. La versione 2.4.0-alpha05 contiene questi commit.

Nuove funzionalità

Modifiche alle API

  • Aggiunta una nuova proprietà all'annotazione TypeConverters per consentire agli sviluppatori di disattivare i convertitori Enum e UUID integrati. Per impostazione predefinita, questi convertitori sono attivi, ma puoi disattivarli per un determinato ambito o per l'intero database. Per ulteriori dettagli, consulta la documentazione di TypeConverters. (36ae9e, b/195413406)

  • Supporto di chiavi/valori non POJO per i tipi restituiti Multimap nei DAO tramite l'annotazione @MapInfo. (I4d704)

@MapInfo sarà obbligatorio quando la colonna chiave o valore della mappa proviene da una singola colonna. Vedi l'esempio:

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • Rendi room-paging un artefatto obbligatorio quando utilizzi Paging3 con Room. (Ieaffe)

Correzioni di bug

  • Risolvi un problema per cui i risultati delle query multimappa non venivano ordinati correttamente quando la query conteneva una clausola ORDER BY di una colonna della chiave della mappa. (I6b887)

Contributo esterno

  • È stata aggiunta una nuova API per specificare l'ordine degli indici in @Index. Grazie a Nikita Zhelonkin. (I033fc)

Versione 2.4.0-alpha04

21 luglio 2021

androidx.room:room-*:2.4.0-alpha04 viene ritirata. La versione 2.4.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Room ora supporta i tipi restituiti multimappa @Dao, utili per le istruzioni JOIN. I tipi di multimap supportati sono Map, ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap di Guava.

    Di seguito sono riportati alcuni esempi di query multimappa:

    Mappa delle relazioni uno a uno

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    Mappa delle relazioni uno-a-molti (multimappa standard)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    Il risultato multimappa può anche essere incluso nei tipi di restituzione asincrona supportati, come LiveData, Observable di Rx o Flow di coroutine.

Room-Paging

  • androidx.room:room-paging è stato rilasciato e fornisce il supporto nativo di Paging 3.0 per le query Room che restituiscono androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • Questo artefatto sostituisce l'implementazione androidx.paging.PagingSource generata da Room con una basata sulle API Paging 3.0. La nuova implementazione di PagingSource analizza le chiavi in modo diverso, quindi qualsiasi chiave fornita manualmente a PagingSource di Room deve tenere conto di questa modifica del comportamento, inclusa la chiave iniziale passata tramite il costruttore di Pager. Le pagine inizieranno a caricarsi da Key, con Key come primo elemento caricato. Questo comportamento si discosta da quello esistente, in cui LoadParams.Refresh.Key viene trattato come la posizione di scorrimento dell'utente e gli elementi vengono caricati sia prima che dopo la chiave.

  • L'artefatto è facoltativo e la disattivazione ripristinerà il supporto esistente per Paging 3.0 introdotto in Room 2.3. Tuttavia, questo artefatto diventerà non facoltativo nella release futura per chi utilizza Room con Paging 3.0. Per attivare la funzionalità, aggiungi il nuovo artefatto di paging delle stanze al classpath. Se utilizzi Gradle, puoi aggiungere il seguente snippet al file build.gradle:

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

Correzioni di bug

  • Risolvi un problema nelle migrazioni automatiche relativo alla gestione delle violazioni dei vincoli di integrità referenziale. (b/190113935)

Versione 2.4.0-alpha03

16 giugno 2021

androidx.room:room-*:2.4.0-alpha03 viene ritirata. La versione 2.4.0-alpha03 contiene questi commit.

Modifiche alle API

  • Aggiorna MigrationTestHelper di Room per supportare le migrazioni automatiche fornendo una nuova API costruttore che riceve la classe di database in fase di test. In questo modo, l'assistente può aggiungere automaticamente le migrazioni automatiche nello stesso modo durante runMigrationsAndValidate.

Correzioni di bug

  • È stato risolto un problema relativo alla libreria nativa SQLite di Room per supportare i chip M1 di Apple. (b/174695268

  • È stato risolto un problema per cui Room non restituiva errori quando il tipo restituito di una funzione @Transaction era un flusso (I56ddd, b/190075899)

  • Risolvi un problema nelle migrazioni automatiche relativo agli indici. b/177673291

Aggiornamenti delle dipendenze

  • Il supporto dei vantaggi principali della stanza ora dipende dal vantaggio principale 1.5.10-1.0.0-beta01. (1ecb11, b/160322705)

Versione 2.4.0-alpha02

5 maggio 2021

androidx.room:room-*:2.4.0-alpha02 viene ritirata. La versione 2.4.0-alpha02 contiene questi commit.

Modifiche alle API

  • @ProvidedAutoMigrationSpec è una nuova API per dichiarare che un AutoMigrationSpec verrà fornito in fase di runtime tramite RoomDatabase.Builder#addAutoMigrationSpec(). Ciò consente a un framework di inserimento delle dipendenze di fornire queste specifiche quando sono necessarie dipendenze complesse.

Correzioni di bug

  • Risolto un problema con le migrazioni automatiche per cui i @DatabaseView non venivano ricreati correttamente.

Contributo esterno

  • È stato risolto un problema in JournalMode.TRUNCATE di Room per cui il callback InvalidationTracker a volte veniva richiamato in modo non valido, troppo tardi o non veniva richiamato affatto. Grazie a Uli Bubenheimer | bubenheimer@users.noreply.github.com (b/154040286)

Versione 2.4.0-alpha01

21 aprile 2021

androidx.room:room-*:2.4.0-alpha01 viene ritirata. La versione 2.4.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Migrazioni automatiche: Room ora offre un'API per generare automaticamente le migrazioni, a condizione che gli schemi vengano esportati. Per comunicare a Room che deve generare una migrazione automatica, è possibile utilizzare una nuova proprietà @Database#autoMigrations per dichiarare le versioni da cui e a cui eseguire la migrazione automatica. Quando Room ha bisogno di ulteriori informazioni su tabelle e ridenominazione o eliminazione di colonne, l'annotazione @AutoMigration può dichiarare una classe di specifica contenente questi input. Per ulteriori dettagli, consulta la documentazione relativa a @AutoMigration.

Correzioni di bug

  • Risolto un problema per cui defaultValue con parentesi aggiuntive venivano convalidate in modo errato dalla convalida dello schema di Room. b/182284899

Versione 2.3.0

Versione 2.3.0

21 aprile 2021

androidx.room:room-*:2.3.0 viene ritirata. La versione 2.3.0 contiene questi commit.

Modifiche importanti dalla versione 2.2.0

  • Supporto enum integrato: se non viene fornito alcun convertitore, la stanza utilizzerà per impostazione predefinita un convertitore di tipo enum in stringa e viceversa. Se esiste già un convertitore di tipi per un enum, Room darà la priorità al suo utilizzo rispetto a quello predefinito.
  • Callback query: Room ora offre un'API di callback generale RoomDatabase.QueryCallback, per quando le query stanno per essere eseguite, che può essere utile per la registrazione nelle build di debug. Il richiamo può essere impostato tramite RoomDatabase.Builder#setQueryCallback().
  • Miglioramento preconfigurato: Room ora dispone di API per la creazione di un database utilizzando un database preconfigurato letto da un flusso di input. Ciò consente di gestire casi come quello in cui il database pre-package è compresso con gzip.
  • Convertitori di tipi forniti: Room ora dispone di API per fornire istanze di convertitori di tipi in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore di tipi che verrà fornito a Room, utilizza la nuova annotazione @ProvidedTypeConverter.
  • Supporto di RxJava3: Room ora supporta i tipi RxJava3. Analogamente a RxJava2, puoi dichiarare metodi DAO il cui tipo restituito è Flowable, Single, Maybe e Completable. Inoltre, è disponibile un nuovo artefatto androidx.room:room-rxjava3 per supportare RxJava3.
  • Supporto di Paging 3.0: Room ora supporta la generazione di implementazioni per i metodi annotati @Query il cui tipo restituito è androidx.paging.PagingSource.

Versione 2.3.0-rc01

24 marzo 2021

androidx.room:room-*:2.3.0-rc01 viene ritirata. La versione 2.3.0-rc01 contiene questi commit.

Correzioni di bug

  • Risolvi un problema che impediva l'utilizzo delle query di Coroutine Flow create da Room in un blocco withTransaction sospeso. (I797bf)

Versione 2.3.0-beta03

10 marzo 2021

androidx.room:room-*:2.3.0-beta03 viene ritirata. La versione 2.3.0-beta03 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto il supporto della compilazione incrementale per KSP. (I031c1, b/176453350)

Correzioni di bug

  • È stato corretto un bug per cui la creazione di PagingSource sul thread principale poteva attivare un errore ANR. (I42b74, b/181221318)
  • È stata corretta la visibilità di @ExperimentalRoomApi in modo che sia pubblica anziché privata del pacchetto. (b/181356119)

Contributo esterno

  • Consente a Room di accettare un tipo restituito POJO in un metodo DAO annotato con @Query quando è annotato anche con @SkipQueryVerification. Room farà del suo meglio per convertire il risultato della query nel tipo restituito POJO nello stesso modo in cui viene fatto per un metodo DAO annotato con @RawQuery. Grazie a "Markus Riegel | hey@marcorei.com". (I45acb)

Versione 2.3.0-beta02

18 febbraio 2021

androidx.room:room-*:2.3.0-beta02 viene ritirata. La versione 2.3.0-beta02 contiene questi commit.

Nuove funzionalità

  • Room ora supporta in modo sperimentale Kotlin Symbol Processing KSP.

    KSP è un sostituto di KAPT per eseguire i processori di annotazioni in modo nativo sul compilatore Kotlin, riducendo significativamente i tempi di compilazione.

    Per utilizzare Room con KSP, puoi applicare il plug-in Gradle KSP e sostituire la configurazione kapt nel file di build con ksp. Ad esempio, invece di kapt 'androidx.room:room-compiler:2.3.0-beta02' utilizza ksp 'androidx.room:room-compiler:2.3.0-beta02'. Per ulteriori dettagli, consulta la documentazione di KSP.

    Tieni presente che, poiché KSP è sperimentale, è consigliabile utilizzare KAPT per il codice di produzione. La riduzione dei tempi di compilazione è applicabile solo se non sono presenti altri processori che utilizzano KAPT. Consulta la pagina b/160322705 per i problemi noti.

Versione 2.3.0-beta01

27 gennaio 2021

androidx.room:room-*:2.3.0-beta01 viene ritirata. La versione 2.3.0-beta01 contiene questi commit.

Nuove funzionalità

  • Database chiudibili automaticamente: ora Room ha la possibilità di chiudere i database a cui non si accede dopo un determinato periodo di tempo. Questa è una funzionalità sperimentale che può essere attivata chiamando il numero RoomDatabase.Builder#setAutoCloseTimeout(). Questa funzionalità è utile per le applicazioni con più database.

Correzioni di bug

  • Risolvi un problema per cui i metodi Dao con più metodi @Update o @Delete con strategie di conflitto diverse generavano codice con una sola delle strategie, ignorando di fatto quella definita. (/I0b90d, b/176138543)

Versione 2.3.0-alpha04

16 dicembre 2020

androidx.room:room-*:2.3.0-alpha04 viene ritirata. La versione 2.3.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Room ora offre un'API di callback generale RoomDatabase.QueryCallback, per quando le query stanno per essere eseguite, che può essere utile per la registrazione nelle build di debug. Il richiamo può essere impostato tramite RoomDatabase.Builder#setQueryCallback(). (Iaa513, b/174478034, b/74877608)
  • Se non viene fornito alcun convertitore, la stanza utilizzerà per impostazione predefinita un convertitore di tipi da Enum a Stringa e viceversa. Se esiste già un convertitore di tipi per un enum, Room darà la priorità al suo utilizzo rispetto a quello predefinito. (b/73132006)

Problema noto

  • Se esiste già un convertitore di tipi unidirezionale per la lettura per l'enumerazione, Room potrebbe utilizzare accidentalmente il convertitore da stringa a enumerazione integrato, il che potrebbe non essere desiderato. Si tratta di un problema noto che può essere risolto trasformando il convertitore in un convertitore bidirezionale. Vedi: b/175707691

Correzioni di bug

  • Risolto un problema per cui Room disattivava erroneamente l'elaborazione incrementale delle annotazioni nelle versioni più recenti di JDK. (b/171387388)
  • È stato risolto un problema relativo a Room che non trovava la classe generata quando venivano utilizzati più caricatori di classi. Grazie per la correzione "Serendipity | 892449346@qq.com"! (b/170141113)
  • Risolto un problema per cui Room generava un codice errato quando un @Dao Kotlin aveva una classe base i cui generici erano primitivi nella JVM. (b/160258066)

Contributo esterno

  • Ora la stanza utilizzerà beginTransactionNonExclusive per impostazione predefinita se la modalità WAL è abilitata e l'API è 16 o superiore. Grazie ad Ahmed I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)

Versione 2.3.0-alpha03

14 ottobre 2020

androidx.room:room-*:2.3.0-alpha03 viene ritirata. La versione 2.3.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Room ora dispone di API per fornire istanze di convertitori di tipi in modo che l'app possa controllare la loro inizializzazione. Per contrassegnare un convertitore di tipi che verrà fornito a Room, utilizza la nuova annotazione @ProvidedTypeConverter. Grazie a "mzgreen yairobbe@gmail.com". (Ie4fa5, b/121067210)

  • Room ora dispone di API per la creazione di un database utilizzando un database precompilato letto da un flusso di input. Ciò consente di gestire casi come quello in cui il database pre-package è compresso con gzip. Grazie ad Ahmed El-Helw ahmedre@gmail.com (3e6792, b/146911060)

Modifiche alle API

  • È stata aggiunta la destinazione mancante all'annotazione @ForeignKey, impedendone l'utilizzo al di fuori dell'annotazione @Entity. (Iced1e)

  • Il campo mCallbacks inRoomDatabase.java ora è nascosto. (d576cb, b/76109329)

Correzioni di bug

  • Aggiornamento della documentazione di TypeConverters per chiarire che TypeConverters può essere utilizzato solo per convertire colonne / campi e non righe. (I07c56, b/77307836)

  • Aggiornamento di DaoProcessor per correggere l'errore del compilatore su Dao con un supertipo generico con le "primitive" Kotlin. (Ice6bb, b/160258066)

  • Aggiorna la documentazione dei metodi di aggiunta/rimozione di osservatori per chiarire il threading (Ifd1d9, b/153948821)

  • Risolvi un problema con Room che convalida in modo errato le tabelle FTS che hanno dichiarato la colonna rowid. (d62ebc, b/145858914)

Contributi esterni

  • Correzione dei problemi relativi alle maiuscole/minuscole delle impostazioni internazionali correlate al turco (5746e3), b/68159494

  • Sostituisci ConcurrentHashMap all'interno di RoomDatabase con Collections.synchronizedMap() per evitare problemi su Android Lollipop (d1cfc7, b/162431855)

  • Aggiungi un callback onOpenPrepackagedDatabase per quando viene copiata una DB preconfigurata. (I1ba74, b/148934423)

Versione 2.3.0-alpha02

22 luglio 2020

androidx.room:room-*:2.3.0-alpha02 viene ritirata. La versione 2.3.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Supporto di RxJava3: Room ora supporta i tipi RxJava3. Analogamente a RxJava2, puoi dichiarare metodi DAO il cui tipo restituito è Flowable, Single, Maybe e Completable. Inoltre, è disponibile un nuovo artefatto androidx.room:room-rxjava3 per supportare RxJava3. (b/152427884)

Modifiche alle API

  • La dichiarazione di un @TypeConverter nella classe Kotlin Object è ora supportata. (b/151110764)
  • L'opzione di elaborazione incrementale delle annotazioni Room è ora ATTIVA per impostazione predefinita. (b/112110217)

Versione 2.3.0-alpha01

10 giugno 2020

androidx.room:room-*:2.3.0-alpha01 viene ritirata. La versione 2.3.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Supporto di Paging 3.0: Room ora supporta la generazione di implementazioni per i metodi annotati con @Query il cui tipo restituito è androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

Modifiche alle API

  • @RewriteQueriesToDropUnusedColumns è una nuova annotazione pratica che consente a Room di riscrivere la proiezione "*" in una query in modo che le colonne inutilizzate nel risultato vengano rimosse.
  • L'opzione del processore room.expandProjection è ora deprecata. Utilizza @RewriteQueriesToDropUnusedColumns in sostituzione delle query di ottimizzazione della sala con le proiezioni delle stelle. Tieni presente che @RewriteQueriesToDropUnusedColumns non sostituisce la soluzione per i conflitti tra colonne room.expandProjection offerta in relazione ai tipi di reso che contenevano campi @Embedded.

Correzioni di bug

  • Risolto un bug per cui Room non rilevava correttamente la versione JDK utilizzata per attivare l'elaboratore di annotazioni incrementale. Grazie a Blaz Solar (me@blaz.solar) (b/155215201)
  • Room ora incorpora la dipendenza ANTLR con l'annotation processor per evitare conflitti di versione con altri processori che utilizzano anche ANTLR. (b/150106190)

Versione 2.2.6

Versione 2.2.6

16 dicembre 2020

androidx.room:room-*:2.2.6 viene ritirata. La versione 2.2.6 contiene questi commit.

Correzioni di bug

  • Risolto un problema per cui Room disattivava erroneamente l'elaborazione incrementale delle annotazioni nelle versioni più recenti di JDK. (b/171387388)

Versione 2.2.5

Versione 2.2.5

18 marzo 2020

androidx.room:room-*:2.2.5 viene ritirata. La versione 2.2.5 contiene questi commit.

Correzioni di bug

  • Rendi MultiInstanceInvalidationService compatibile con Direct Boot. Grazie a "Mygod contact-git@mygod.be" (b/148240967)
  • Risolto un bug che causava un arresto anomalo quando l'invalidazione multi-istanza era abilitata e il database conteneva un'entità FTS. (b/148969394)
  • È stato risolto un problema durante il caricamento delle librerie native SQLite nel processore di annotazioni Room che causava l'arresto anomalo del compilatore a causa di compilazioni parallele. (b/146217083)

Versione 2.2.4

Versione 2.2.4

19 febbraio 2020

androidx.room:room-common:2.2.4, androidx.room:room-compiler:2.2.4, androidx.room:room-guava:2.2.4, androidx.room:room-ktx:2.2.4, androidx.room:room-migration:2.2.4, androidx.room:room-runtime:2.2.4, androidx.room:room-rxjava2:2.2.4 e androidx.room:room-testing:2.2.4 vengono rilasciati. La versione 2.2.4 contiene questi commit.

Correzioni di bug

  • Risolto un problema relativo alla sospensione delle transazioni che si bloccavano se la coroutine veniva annullata rapidamente prima dell'inizio effettivo della transazione. (b/148181325)
  • È stato risolto un problema relativo all'utilizzo errato di @Generated durante la compilazione con JDK 9. (b/146538330)
  • Risolto un problema per cui Room generava un codice errato quando un'interfaccia DAO in Kotlin aveva una funzione concreta. (b/146825845)

Versione 2.2.3

Versione 2.2.3

18 dicembre 2019

androidx.room:room-*:2.2.3 viene ritirata. La versione 2.2.3 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui Room non riusciva a convalidare un database che non aveva subito alcuna migrazione e conteneva un hash legacy con indici nel suo schema. (b/139306173)

Versione 2.2.2

Versione 2.2.2

20 novembre 2019

androidx.room:room-*:2.2.2 viene ritirata. La versione 2.2.2 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui la raccolta di una relazione uno a uno con più di 999 righe causava la restituzione di elementi correlati nulli da parte di Room. (b/143105450)

Versione 2.2.1

Versione 2.2.1

23 ottobre 2019

androidx.room:room-*:2.2.1 viene ritirata. La versione 2.2.1 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui Room avvisava erroneamente di CURSOR_MISMATCH con l'opzione del compilatoreexpandProjection attivata. (b/140759491)
  • È stato aggiunto un meccanismo di riprova per gestire la libreria nativa mancante utilizzata per verificare le query durante la compilazione.

Versione 2.2.0

Versione 2.2.0

9 ottobre 2019

androidx.room:room-*:2.2.0 viene ritirata. La versione 2.2.0 contiene questi commit.

Modifiche importanti dalla versione 2.1.0

  • Database preconfigurato: ora sono disponibili due nuove API in RoomDatabase.Builder per la creazione di un RoomDatabase dato un file di database già compilato. createFromAsset() viene utilizzato quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentre createFromFile() viene utilizzato quando il file si trova in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento delle migrazioni distruttive in modo che, durante una migrazione di fallback, Room tenti di copiare nuovamente il database precompilato, se disponibile, altrimenti esegue il fallback eliminando e ricreando tutte le tabelle. b/62185732
  • Valori predefiniti dello schema: @ColumnInfo ora ha una nuova proprietà defaultValue che può essere utilizzata per specificare il valore predefinito di una colonna. I valori predefiniti fanno parte di uno schema di database e verranno convalidati durante le migrazioni, se specificati. b/64088772
  • Relazioni many-to-many: @Relation ora ha una nuova proprietà associateBy, che accetta una nuova annotazione @Junction, utilizzata per dichiarare una relazione che deve essere soddisfatta tramite una tabella di unione (nota anche come tabella di join). b/69201917
  • Relazioni uno-a-uno: la limitazione nei campi POJO annotati con @Relation di tipo List o Set è stata rimossa, consentendo di fatto di rappresentare le relazioni a valore singolo. b/62905145
  • Entità target: le annotazioni DAO @Insert, @Update e @Delete ora hanno una nuova proprietà targetEntity, che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. Ciò consente di utilizzare POJO arbitrari come parametri di questi metodi DAO, che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506
  • Flusso di coroutine: i metodi DAO ora possono essere di tipo restituito Flow<T>.@Query Il flusso restituito emetterà nuovamente un nuovo insieme di valori se le tabelle osservate nella query vengono invalidate. Dichiarare una funzione DAO con un tipo di ritorno Channel<T> è un errore. Room ti consiglia invece di utilizzare Flow e poi le funzioni vicine per convertire Flow in Channel. b/130428884
  • Processore di annotazioni incrementale Gradle: Room ora è un processore di annotazioni di isolamento Gradle e l'incrementabilità può essere attivata tramite l'opzione del processore room.incremental. Per saperne di più, consulta Opzioni del compilatore Room. In caso di problemi, segnala un bug qui. Abbiamo in programma di attivare l'incrementabilità per impostazione predefinita in una futura versione stabile. b/112110217
  • Espansione delle proiezioni: è stata aggiunta una nuova opzione del compilatore sperimentale room.expandProjection che fa sì che Room riscriva una query con una proiezione a stella in modo che contenga solo le colonne nel POJO del tipo restituito. Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. Quindi Room riscriverà la query in SELECT id, title FROM Song in modo che venga recuperato il set minimo di colonne per soddisfare il tipo restituito. In questo modo, viene eliminato l'avviso CURSOR_MISMATCH visualizzato quando la query restituisce colonne aggiuntive che non corrispondono ad alcun campo nel tipo POJO restituito.

Versione 2.2.0-rc01

5 settembre 2019

androidx.room:room:2.2.0-rc01 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nessuna modifica pubblica dalla stanza 2.2.0-beta01.

Versione 2.2.0-beta01

22 agosto 2019

androidx.room:room-*:2.2.0-beta01 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stato corretto un bug per cui una query di flusso di coroutine smetteva di riemettere nuovi valori dopo un certo periodo di tempo. (b/139175786)
  • È stato corretto un bug per cui Room non accettava un codice hash dello schema legacy durante l'apertura di un database che non era stato sottoposto a migrazione da Room 1.0, causando un arresto anomalo in fase di runtime a causa di uno schema non valido. (b/139306173)

Versione 2.2.0-alpha02

7 agosto 2019

androidx.room:room-*:2.2.0-alpha02 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • Flusso di coroutine: i metodi DAO ora possono essere di tipo restituito Flow<T>.@Query Il flusso restituito emetterà nuovamente un nuovo insieme di valori se le tabelle osservate nella query vengono invalidate. Dichiarare una funzione DAO con un tipo di ritorno Channel<T> è un errore. Room ti consiglia invece di utilizzare Flow e poi le funzioni vicine per convertire Flow in Channel. b/130428884
  • Espansione delle proiezioni: è stata aggiunta una nuova opzione del compilatore sperimentale room.expandProjection che fa sì che Room riscriva una query con una proiezione a stella in modo che contenga solo le colonne nel POJO del tipo restituito. Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. Quindi Room riscriverà la query in SELECT id, title FROM Song in modo che venga recuperato il set minimo di colonne per soddisfare il tipo restituito. In questo modo, viene eliminato l'avviso CURSOR_MISMATCH visualizzato quando la query restituisce colonne aggiuntive che non corrispondono ad alcun campo nel tipo POJO restituito.
  • onDestructiveMigrate è una nuova API di callback aggiunta a RoomDatabase.Callback per quando Room esegue la migrazione distruttiva di un database. b/79962330

Correzioni di bug

  • È stato corretto un bug per cui Room generava un codice errato utilizzando un metodo come setter di campo quando il campo è protetto. b/136194628
  • È stato corretto un bug che causava l'attivazione di un NPE in un secondo processo da parte di InvalidationTracker quando l'invalidazione multi-istanza era abilitata e il servizio di invalidazione era stato interrotto. b/137454915
  • È stato corretto un bug per cui Room non identificava correttamente il tipo restituito di una funzione sospesa ereditata annotata con @RawQuery. b/137878827
  • È stato aggiornato il codice generato per @Relation quando la chiave correlata è di tipo BLOB per utilizzare un ByteBuffer comparabile. b/137881998
  • È stato corretto un bug per cui Room segnalava setter mancanti nei POJO utilizzati come parametri di entità parziali di @Insert, @Update e @Delete. b/138664463
  • È stato corretto un bug per cui Room segnalava la mancanza di getter e setter per una colonna ignorata tramite @Entity quando la classe dell'entità veniva utilizzata in determinati metodi DAO. b/138238182
  • È stato corretto un bug per cui Room non convertiva correttamente gli argomenti di binding denominati in argomenti posizionali, causando un'eccezione di runtime durante l'esecuzione di una query con parametri riutilizzati. b/137254857

Versione 2.2.0-alpha01

10 luglio 2019

Nuove funzionalità

  • Database preconfigurato: ora sono disponibili due nuove API in RoomDatabase.Builder per la creazione di un RoomDatabase dato un file di database già compilato. createFromAsset() viene utilizzato quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentre createFromFile() viene utilizzato quando il file si trova in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento delle migrazioni distruttive in modo che, durante una migrazione di fallback, Room tenti di copiare nuovamente il database precompilato, se disponibile, altrimenti esegue il fallback eliminando e ricreando tutte le tabelle. b/62185732
  • Valori predefiniti dello schema: @ColumnInfo ora ha una nuova proprietà defaultValue che può essere utilizzata per specificare il valore predefinito di una colonna. I valori predefiniti fanno parte di uno schema di database e verranno convalidati durante le migrazioni, se specificati. b/64088772

    Nota:se lo schema del database ha già valori predefiniti, ad esempio quelli aggiunti tramite ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z, e decidi di definire valori predefiniti tramite @ColumnInfo per le stesse colonne, potresti dover fornire una migrazione per convalidare i valori predefiniti non contabilizzati. Per ulteriori informazioni, vedi Migrazioni delle stanze.

  • Relazioni many-to-many: @Relation ora ha una nuova proprietà associateBy, che accetta una nuova annotazione @Junction, utilizzata per dichiarare una relazione che deve essere soddisfatta tramite una tabella di unione (nota anche come tabella di join). b/69201917
  • Relazioni uno-a-uno: la limitazione nei campi POJO annotati con @Relation di tipo List o Set è stata rimossa, consentendo di fatto di rappresentare le relazioni a valore singolo. b/62905145
  • Entità target: le annotazioni DAO @Insert, @Update e @Delete ora hanno una nuova proprietà targetEntity, che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. Ciò consente di utilizzare POJO arbitrari come parametri di questi metodi DAO, che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506
  • Processore di annotazioni incrementale Gradle: Room ora è un processore di annotazioni di isolamento Gradle e l'incrementabilità può essere attivata tramite l'opzione del processore room.incremental. Per saperne di più, consulta Opzioni del compilatore Room. In caso di problemi, segnala un bug qui. Abbiamo in programma di attivare l'incrementabilità per impostazione predefinita in una futura versione stabile. b/112110217

Correzioni di bug

  • Room non propagherà più EmptySetResultException al gestore di errori globale quando lo stream Rx di una query è stato eliminato prima del completamento della query. b/130257475
  • È stato corretto un bug per cui Room mostrava un messaggio di errore errato quando una funzione DAO di sospensione annotata con @RawQuery non aveva un tipo restituito. b/134303897
  • Room non genererà più adattatori DAO con tipi non elaborati. b/135747255

Versione 2.1.0

Versione 2.1.0

13 giugno 2019

Room 2.1.0 viene rilasciato senza modifiche rispetto a 2.1.0-rc01. I commit inclusi nella versione sono disponibili qui.

Modifiche importanti dalla versione 2.0.0

  • FTS: Room ora supporta le entità con una mappatura tabella FTS3 o FTS4. Le classi annotate con @Entity ora possono essere annotate anche con @Fts3 o @Fts4 per dichiarare una classe con una tabella di ricerca full-text della mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione.
  • Viste: ora Room supporta la dichiarazione di una classe come query archiviata, nota anche come vista, utilizzando l'annotazione @DatabaseView.
  • Coroutine: i metodi DAO ora possono essere funzioni di sospensione. Includi room-ktx nelle dipendenze per sfruttare questa funzionalità. L'artefatto ktx fornisce anche la funzione di estensione RoomDatabase.withTransaction per eseguire transazioni di database all'interno di una coroutine.
  • Auto Value: Room ora supporta la dichiarazione di classi annotate con AutoValue come entità e POJO. Le annotazioni Room @PrimaryKey, @ColumnInfo, @Embedded e @Relation ora possono essere dichiarate nei metodi astratti di una classe annotata con valore automatico. Tieni presente che queste annotazioni devono essere accompagnate anche da @CopyAnnotations per consentire a Room di comprenderle correttamente.
  • Supporto asincrono aggiuntivo: i metodi DAO annotati con @Insert, @Delete o @Update, insieme a @Query contenente istruzioni INSERT, DELETE o UPDATE, ora supportano i tipi restituiti Rx Completable, Single, Maybe e il tipo restituito di Guava ListenableFuture e possono anche essere funzioni di sospensione.
  • enableMultiInstanceInvalidation è una nuova API in RoomDatabase.Builder per abilitare l'invalidazione in più istanze di RoomDatabase utilizzando lo stesso file di database.
  • fallbackToDestructiveMigrationOnDowngrade è una nuova API in RoomDatabase.Builder per ricreare automaticamente il database in caso di downgrade.
  • ignoredColumns è una nuova API nell'annotazione @Entity che può essere utilizzata per elencare i campi ignorati per nome.
  • Room ora utilizzerà correttamente il costruttore principale di Kotlin nelle classi di dati evitando la necessità di dichiarare le proprietà come vars.

Versione 2.1.0-rc01

29 maggio 2019

Correzioni di bug

  • È stato corretto un errore di inizializzazione di Room che potrebbe verificarsi a causa di una configurazione temp_store già impostata. b/132602198
  • È stato corretto un avviso relativo all'utilizzo delle virgolette doppie per gli utenti con SQLite 3.27.0 e versioni successive. b/131712640
  • Corretto un bug per cui InvalidationTracker causava un arresto anomalo quando venivano eseguiti più controlli di invalidazione in parallelo. b/133457594

Versione 2.1.0-beta01

7 maggio 2019

androidx.room 2.1.0-beta01 viene rilasciato senza modifiche rispetto alla versione 2.1.0-alpha07. I commit inclusi in questa versione sono disponibili qui.

Versione 2.1.0-alpha07

25 aprile 2019

Modifiche al comportamento / alle API

  • La funzione di estensione RoomDatabase.withTransaction è stata modificata in modo da non accettare più un blocco di funzioni con CoroutineScope come destinatario. In questo modo, non è possibile saltare il wrapper coroutineScope { } aggiuntivo necessario per eseguire le operazioni nel blocco di transazione contemporaneamente.

Correzioni di bug

  • È stato corretto un bug per cui Room non riusciva a trovare una corrispondenza con un TypeConverter per una funzione DAO Kotlin contenente un parametro di tipo Collection. b/122066791

Versione 2.1.0-alpha06

22 marzo 2019

Modifiche al comportamento / alle API

  • Le query di transazione asincrone ora vengono serializzate in modo che Room non utilizzi più di un thread per l'esecuzione delle transazioni di database. È stato aggiunto RoomDatabase.Builder.setTransactionExecutor(Executor) per consentire la configurazione dell'executor da utilizzare per le transazioni.
  • RoomDatabase.runInTransaction(Callable) non eseguirà più il wrapping delle eccezioni controllate in RuntimeException. b/128623748

Correzioni di bug

  • È stato corretto un bug per cui il tracker di invalidazione smetteva di osservare una tabella di contenuti se venivano aggiunti osservatori sia per la tabella di contenuti sia per una tabella FTS di contenuti esterni. b/128508917
  • Grammatica SQLite Room aggiornata in modo che corrisponda a SQLite 3.24.0. b/110883668

Versione 2.1.0-alpha05

13 marzo 2019

Nuove funzionalità

  • La funzione di estensione RoomDatabase.withTransaction ti consente di eseguire in modo sicuro transazioni di database all'interno di una coroutine. Le funzioni di estensione delle stanze e il supporto delle coroutine sono disponibili nell'artefatto room-ktx.
  • I metodi DAO non astratti annotati con @Transaction ora possono essere funzioni di sospensione. b/120241587

Modifiche al comportamento / alle API

  • L'artefatto room-coroutines è stato rinominato in room-ktx seguendo la stessa convenzione di denominazione degli altri artefatti androidx.
  • beginTransaction, setTransactionSuccessful e endTransaction in RoomDatabase sono stati ritirati a favore di runInTransaction e della funzione di estensione room-ktx withTransaction.

Correzioni di bug

  • Corretto un bug per cui gli argomenti del tokenizer venivano eliminati se il tokenizer utilizzato era SIMPLE. b/125427014
  • È stato corretto un bug per cui Room non riusciva a identificare correttamente le funzioni di sospensione con parametri il cui tipo era una classe interna. b/123767877
  • È stato corretto un bug per cui il metodo DAO @Query differito con le istruzioni INSERT, UPDATE o DELETE preparava la query in modo eager nel thread principale. b/123695593
  • Sono stati corretti vari bug in cui Room generava codice errato per determinate funzioni di sospensione. b/123466702 e b/123457323
  • È stato corretto un bug per cui l'utilizzo deprecato dei metodi non veniva eliminato correttamente nel codice generato. b/117602586
  • È stata aggiornata la dipendenza di Room da androidx.sqlite alla versione 1.0.2, che contiene correzioni per la gestione corretta dei database danneggiati. b/124476912

Problemi noti

  • Room 2.1.0-alpha05 dipende dall'artefatto kotlinx-metadata-jvm, che al momento non è disponibile in Maven Central (KT-27991). Questa dipendenza può essere risolta aggiungendo maven { url "https://kotlin.bintray.com/kotlinx/" } ai repository del progetto.

Versione 2.1.0-alpha04

25 gennaio 2019

Nuove funzionalità

  • I metodi DAO annotati con @Query contenenti istruzioni INSERT, UPDATE o DELETE ora possono restituire i tipi asincroni Single, Mayble, Completable e ListenableFuture. Inoltre, possono anche essere funzioni di sospensione. b/120227284

Modifiche al comportamento / alle API

  • Room ora genera un errore se un metodo DAO non astratto annotato con @Transaction restituisce un tipo asincrono come Single, Mayble, Completable, LiveData o ListenableFuture. Poiché le transazioni sono limitate ai thread, al momento è impossibile per Room iniziare e terminare una transazione intorno a una funzione che potrebbe eseguire query in thread diversi. b/120109336
  • OnConflictStrategy.FAIL e OnConflictStrategy.ROLLBACK sono stati @Deprecated perché non si comportano come previsto con gli attuali binding SQLite di Android. b/117266738

Correzioni di bug

  • È stato corretto un bug per cui Room non utilizzava correttamente TypeConverter di un tipo restituito se il metodo DAO era una funzione di sospensione. b/122988159
  • È stato corretto un bug per cui Room identificava erroneamente le funzioni di sospensione ereditate come non sospensive. b/122902595
  • È stato corretto un bug per cui Room generava un codice errato quando un campo @Embedded si trovava in una classe principale e veniva utilizzato in più classi secondarie. b/121099048
  • È stato risolto un problema per cui il database si bloccava quando venivano richiamate le funzioni di sospensione DAO tra un beginTransaction() e un endTransaction(). b/120854786

Versione 2.1.0-alpha03

4 dicembre 2018

Modifiche alle API

  • L'FTS tokenizer in @Fts3/@Fts4 ora accetta una stringa anziché un'enumerazione. Ciò consente a Room di utilizzare tokenizer personalizzati. I tokenizer integrati sono ancora definiti in FtsOptions come costanti stringa. b/119234881

Nuove funzionalità

  • Coroutine: i metodi DAO ora possono essere funzioni di sospensione. Per supportare le funzioni di sospensione in Room è stato rilasciato un nuovo artefatto, room-coroutines. b/69474692
  • I metodi DAO annotati con @Insert, @Delete o @Update ora supportano ListenableFuture come tipo restituito. b/119418331

Correzioni di bug

  • È stato corretto un bug per cui Room tentava erroneamente di trovare un costruttore con colonne nella proprietà ignoredColumns di @Entity. b/119830714
  • È stato corretto un bug per cui Room non contrassegnava come finali i parametri del metodo DAO nell'implementazione generata. b/118015483
  • È stato corretto un bug per cui il processore Room si arrestava in modo anomalo durante la segnalazione di un errore in una query con simboli speciali. b/119520136
  • È stato corretto un bug per cui Room rifiutava altre varie implementazioni di Collection come argomenti di un'espressione IN. b/119884035
  • È stato corretto un bug per cui LiveData restituito da Room veniva sottoposto a garbage collection quando veniva osservato per sempre, causando la mancata emissione di nuovi dati. b/74477406
  • È stato aggiornato il blocco chiuso di RoomDatabase per ridurre la contesa del blocco. b/117900450

Versione 2.1.0-alpha02

30 ottobre 2018

Nuove funzionalità

  • È stato aggiunto il supporto per il riferimento a un @DatabaseView in un @Relation. b/117680932

Correzioni di bug

  • È stato corretto un bug per cui Room eseguiva operazioni di I/O del disco nel thread principale durante la sottoscrizione e l'eliminazione di un tipo restituito Rx. b/117201279
  • È stato corretto un bug per cui Room non riusciva a trovare un convertitore di tipi appropriato per un campo in una classe di entità Kotlin. b/111404868
  • È stato corretto un bug per cui Room generava un codice errato per un'implementazione dell'interfaccia DAO contenente un metodo predefinito Kotlin senza argomenti. b/117527454
  • Aggiornato il parser della grammatica SQLite Room, risolvendo un problema di prestazioni che causava tempi di compilazione lunghi. b/117401230

Versione 2.1.0-alpha01

8 ottobre 2018

Nuove funzionalità

  • FTS: Room ora supporta le entità con una tabella di mapping FTS3 o FTS4. I corsi annotati con @Entity ora possono essere annotati anche con @Fts3 o @Fts4 per dichiarare un corso con una tabella di ricerca full-text della mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione. b/62356416
  • Viste: Room ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, utilizzando l'annotazione @DatabaseView. b/67033276
  • Auto Value: Room ora supporta la dichiarazione di classi annotate AutoValue come entità e POJO. Le annotazioni Room @PrimaryKey, @ColumnInfo, @Embedded e @Relation ora possono essere dichiarate nei metodi astratti di una classe annotata con valore automatico. Tieni presente che queste annotazioni devono essere accompagnate anche da @CopyAnnotations per consentire a Room di comprenderle correttamente. b/62408420
  • Supporto di tipi di restituzione Rx aggiuntivi: i metodi DAO annotati con @Insert, @Delete o @Update ora supportano i tipi di restituzione Rx Completable, Single<T> e Maybe<T>. b/63317956
  • Tipi immutabili con @Relation: in precedenza Room richiedeva che i campi annotati @Relation fossero impostabili, ma ora possono essere parametri del costruttore.
  • enableMultiInstanceInvalidation: è una nuova API in RoomDatabase.Builder per abilitare l'invalidazione in più istanze di RoomDatabase utilizzando lo stesso file di database. Questo meccanismo di annullamento convalida multi-istanza funziona anche su più processi. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: è una nuova API in RoomDatabase.Builder per ricreare automaticamente il database in caso di downgrade. b/110416954
  • ignoredColumns: è una nuova API nell'annotazione @Entity che può essere utilizzata per elencare i campi ignorati per nome. Utile per ignorare i campi ereditati in un'entità. b/63522075

Modifiche al comportamento / alle API

  • mCallback e mDatabase in RoomDatabase ora sono @Deprecated e verranno rimossi nella prossima versione principale di Room. b/76109329

Correzioni di bug

  • Sono stati risolti due problemi per cui Room non veniva ripristinato correttamente in seguito a un database danneggiato o a una migrazione errata durante l'inizializzazione. b/111504749 e b/111519144
  • Room ora utilizzerà correttamente il costruttore principale di Kotlin nelle classi di dati, evitando la necessità di dichiarare i campi come vars. b/105769985

Versione 2.0.0

Versione 2.0.0

1° ottobre 2018

androidx.room 2.0.0 viene rilasciato senza modifiche rispetto alla versione 2.0.0-rc01.

Versione 2.0.0-rc01

20 settembre 2018

androidx.room 2.0.0-rc01 viene rilasciato senza modifiche rispetto alla versione 2.0.0-beta01.

Versione 2.0.0-beta01

2 luglio 2018

Modifiche al comportamento / alle API

  • Aggiunta di RoomDatabase.Builder.setQueryExecutor() per consentire la personalizzazione della posizione in cui vengono eseguite le query
  • Aggiunto il supporto di RxJava2 Observable
  • Le implementazioni di DAO e database generate sono ora finali

Correzioni di bug

  • Specifica il nome della classe/del campo nell'errore "Impossibile trovare il getter per il campo" b/73334503
  • È stata corretta la compatibilità con le versioni precedenti di RoomOpenHelper con le versioni precedenti di Room b/110197391

Dipendenze precedenti ad AndroidX

Per le versioni precedenti ad AndroidX di Room, includi queste dipendenze:

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

Versione 1.1.1

Versione 1.1.1

19 giugno 2018

La stanza 1.1.1 è identica alla stanza 1.1.1-rc1.

Versione 1.1.1-rc1

16 maggio 2018 Se utilizzi le migrazioni, ti consigliamo vivamente di utilizzare Room 1.1.1-rc1 anziché 1.1.0.

È stato corretto un bug per cui Room non gestiva correttamente l'inizializzazione post-migrazione b/79362399

Versione 1.1.0

Versione 1.1.0-beta3

19 aprile 2018

Correzioni di bug

  • Correzione dell'errore di compilazione quando un POJO Kotlin fa riferimento a un'entità di relazione definita in Java b/78199923

Versione 1.1.0-beta2

5 aprile 2018

Correzioni di bug

  • È stato corretto un bug critico nelle implementazioni di Room Rx Single e Maybe in cui il sistema ricicla la query in anticipo, causando problemi se aggiungi più di un osservatore alle istanze Single o Maybe restituite. b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] non VACUUM il database se viene chiamato all'interno di una transazione. b/77235565

Versione 1.1.0-beta1

21 marzo 2018

Modifiche alle API

  • In base al feedback della revisione dell'API, @RawQuery non accetta più il passaggio di un String come parametro di query. Devi utilizzare [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (vedi [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] per creare facilmente un'istanza di [SupportSQLiteQuery][ref-SupportSQLiteQuery] con il supporto degli argomenti).
  • Il metodo [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] di RoomDatabase.Builder ora accetta vararg int anziché vararg Integer.

Correzioni di bug

  • [RoomDatabase.clearAllTables][ref-clearAllTables] ora tenta di restituire spazio al sistema operativo impostando un checkpoint WAL e VACUUMing il database.
  • [@RawQuery][ref-RawQuery] ora accetta qualsiasi Pojo per la proprietà observedEntities, purché Pojo faccia riferimento a una o più entità tramite i suoi campi Embedded o Relation. b/74041772
  • Paginazione: l'implementazione di DataSource di Room ora gestisce correttamente le dipendenze da più tabelle (come relazioni e join). In precedenza, questi non riuscivano ad attivare nuovi risultati o non potevano essere compilati. b/74128314

Versione 1.1.0-alpha1

22 gennaio 2018

Nuove funzionalità

  • RawQuery: Questa nuova API consente ai metodi @Dao di ricevere l'SQL come parametro di query b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: questa nuova API in RoomDatabase.Builder consente un controllo più granulare delle versioni dello schema di partenza da cui sono consentite le migrazioni distruttive (rispetto a fallbackToDestructiveMigration) b/64989640
  • Ora la stanza supporta solo le API Paging più recenti (alpha-4+), abbandonando il supporto per LivePagedListProvider, che è stato ritirato. Per utilizzare la nuova versione alpha di Room, devi utilizzare la paginazione alpha-4 o versioni successive e passare da LivePagedListProvider a LivePagedListBuilder, se non l'hai ancora fatto.

Correzioni di bug

  • Supporto migliorato per i tipi Kotlin Kapt. b/69164099
  • L'ordine dei campi non invalida più lo schema. b/64290754