Room

La libreria di persistenza Room fornisce un livello di astrazione su SQLite per consentire un accesso al database più affidabile, sfruttando al contempo tutta la potenza di SQLite.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Versione alpha
11 dicembre 2024 2.6.1 - - 2.7.0-alpha12

Dichiarazione delle dipendenze

Per aggiungere una dipendenza da Room, devi aggiungere il repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il repository Maven di Google.

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

Aggiungi le dipendenze per gli elementi necessari nel file build.gradle per la tua app o il tuo modulo:

Kotlin

dependencies {
    val room_version = "2.6.1"

    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.6.1"

    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 KSP per la configurazione rapida.

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

Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.

Facoltativamente, per le librerie non Android (ad es. 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 elaboratore di 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 l'elaborazione delle annotazioni incrementali di Gradle. Il valore predefinito è true.
room.generateKotlin boolean
Genera file di origine Kotlin anziché Java. Richiede KSP. Il valore predefinito è false. Per ulteriori dettagli, consulta le note sulla versione 2.6.0.

Utilizzare il plug-in Gradle 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 compilazione 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 compilazione 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 in modo da generare i file dello schema in cartelle con nome specifico, ad esempioschemas/flavorOneDebug/com.package.MyDatabase/1.json. Questi file devono essere controllati nel repository per essere utilizzati per la convalida e le migrazioni automatiche.

Alcune opzioni non possono essere configurate in tutte le versioni del plug-in Gradle di Room, anche se sono supportate dal compilatore Room. La tabella seguente elenca ogni opzione e mostra la versione del plug-in Gradle Room che ha aggiunto il supporto per configurare l'opzione utilizzando l'estensione room. Se la tua versione è precedente o se l'opzione non è ancora supportata, puoi utilizzare le opzioni di elaboratore 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 Room o se l'opzione che ti interessa non è supportata dalla tua versione del plug-in, puoi configurare Room utilizzando le opzioni dell'elaboratore di annotazioni, come descritto in Aggiungere dipendenze di compilazione. Il modo in cui specifichi le opzioni di annotazione dipende dal fatto che tu utilizzi 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 la conosca quando esegue i controlli aggiornati. Esegui la migrazione del database Room 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 raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. 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 del Monitoraggio problemi.

Versione 2.7

Versione 2.7.0-alpha12

11 dicembre 2024

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

Modifiche all'API

  • Aggiungi l'API sperimentale RoomDatabase.Builder.setInMemoryTrackingMode() per configurare se Room deve utilizzare 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 assicurarsi che vengano ricreate, allineando il comportamento quando allowDestructiveMigrationForAllTables è ON (valore predefinito di KMP) con il comportamento esistente quando è OFF. (0a3e83, b/381518941)

Versione 2.7.0-alpha11

30 ottobre 2024

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

Modifiche all'API

  • Rivedi la firma del metodo convertRows() appena aggiunto in modo che sia una funzione di sospensione che riceve un RawRoomQuery per la paginazione delle stanze. (Ie57b5, b/369136627)

Correzioni di bug

  • È stato risolto il problema di paginazione della stanza per cui veniva generato un codice non valido quando si utilizzava @Relation in combinazione con PagingSource.

Versione 2.7.0-alpha10

16 ottobre 2024

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

Modifiche all'API

  • Crea la classe interna ByteArrayWrapper per supportare le relazioni con ByteBuffer in piattaforme non Android e non JVM. (I75543, b/367205685)
  • Aggiungi SQLiteStatement.getColumnType() insieme alle varie costanti di risultato 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 rilasciato. La versione 2.7.0-alpha09 contiene questi commit.

Correzioni di bug

  • Risolto 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 rilasciato. La versione 2.7.0-alpha08 contiene questi commit.

Nuove funzionalità

  • È stata eseguita la migrazione degli elementi room-paging in modo che siano compatibili con KMP. (Ib8756, b/339934824)
  • L'API invalidationTrackerFlow() è stata resa disponibile come API proprietaria come InvalidationTracker.createFlow() ed è ora disponibile per i set di origine non Android nei progetti KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)

Modifiche all'API

  • Tutti gli avvisi e i messaggi di errore in Room che utilizzano la parola Cursor sono stati rimossi o sostituiti, poiché Cursor non è più un termine generale preciso 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 Room che causava un errore come "Impossibile modificare gli attributi della configurazione … dopo che è stato bloccato 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 rilasciato. La versione 2.7.0-alpha07 contiene questi commit.

Nuove funzionalità

  • Ora il plug-in Gradle Room aggiunge 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 fatto che il valore "effettivo" generato per RoomDatabaseConstructor non include il modificatore "effettivo" nella funzione initialize se questa funzione viene sostituita anche nella dichiarazione "expect". (359631627)
  • È stato risolto un problema relativo al fatto che il valore "effettivo" generato del RoomDatabaseConstructor non corrisponde alla visibilità della dichiarazione "expect". (358138953)

Versione 2.7.0-alpha06

7 agosto 2024

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

Modifiche all'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 fare riferimento a una funzione da generare, denominata instantiateImpl(), non è più valida. Vengono 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 b/316978491, b/338446862 e b/342905180

  • Supporto di @RawQuery in Room KMP mediante l'aggiunta di una nuova API denominata RoomRawQuery, simile a SupportSQLiteQuery in termini di gestione della stringa SQL non elaborata, e di una funzione per legare gli argomenti a un'istruzione. Le funzioni annotate @RawQuery ora possono accettare un RoomRawQuery come unico parametro. (Iea844, b/330586815)
  • Aggiungi un sovraccarico di setQueryCallback() che accetti un CoroutineContext. (Id66ff, b/309996304)
  • È stato aggiunto il supporto per i target linuxArm64 Kotlin Multiplatform (I139d3, b/338268719)

Correzioni di bug

  • Risolto un problema per cui Room generava erroneamente una chiamata a recursiveFetchArrayMap nei target non Android. (710c36, b/352482325)
  • È stato risolto un problema per cui a volte Room generava un'eccezione relativa a "Timeout durante il tentativo di connessione" in un progetto KMP. (fa72d0, b/347737870)
  • È stato corretto un problema nelle migrazioni automatiche che verificava la presenza di 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 rilasciato. La versione 2.7.0-alpha05 contiene questi commit.

Modifiche all'API

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

Correzioni di bug

  • È stato corretto un bug per cui un RoomDatabase generava un deadlock o un errore con un timeout della connessione durante l'utilizzo di AndroidSQLiteDriver.

Versione 2.7.0-alpha04

12 giugno 2024

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

Correzioni di bug

  • È stato risolto un problema nell'elaborazione delle annotazioni di Room che generava codice KMP incompatibile quando in un DAO era definito un tipo di ritorno con più mappe. (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 per cui l'attivazione della chiusura automatica e dell'invalidazione multi-istanza a volte causava un errore ConcurrentModificationException quando il database veniva chiuso automaticamente per inattività.

Versione 2.7.0-alpha03

29 maggio 2024

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

Correzioni di bug

  • Risolvere vari problemi relativi a Kotlin 2.0 e KSP 2.0. Tieni presente che Kotlin 2.0 con il supporto di 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 rilasciato. La versione 2.7.0-alpha02 contiene questi commit.

Correzioni di bug

  • Sono stati risolti vari problemi relativi a KSP.

Versione 2.7.0-alpha01

1° maggio 2024

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

Nuove funzionalità

  • Supporto di Kotlin Multiplatform (KMP): in questa release, Room è stato sottoposto a refactoring per diventare una libreria Kotlin Multiplatform (KMP). Anche se c'è ancora del lavoro da fare, questa release introduce una nuova versione di Room in cui la maggior parte delle funzionalità è stata "standardizzata" (realizzata per essere multipiattaforma). Le piattaforme attualmente supportate sono Android, iOS, JVM (computer), Mac nativo e Linux nativo. Le funzionalità mancanti nelle piattaforme di nuova introduzione saranno rese "complete" nelle release di Room future.

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

  • La generazione di codice Kotlin su KSP è stata attivata per impostazione predefinita se l'elaborazione viene eseguita tramite KSP. Per i progetti solo KAPT o Java, Room continuerà a generare sorgenti Java.

Modifiche all'API

  • È stato aggiunto un sovraccarico di Room.databaseBuilder() che accetta un parametro lambda da utilizzare con una funzione generata da Room per evitare di utilizzare la riflessione durante l'inizializzazione dell'implementazione di RoomDatabase generata. Un esempio di utilizzo è:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • Al generatore è stata aggiunta un'API per la configurazione di una stanza con un CoroutineContext: RoomDatabase.Builder.setQueryCoroutineContext. Tieni presente che un RoomDatabase può essere configurato solo con gli esecutori che utilizzano setQueryExecutor o con un contesto Coroutine, ma non con entrambi.
  • È stata aggiunta un'API per la configurazione di Room con un driver SQLite: RoomDatabase.Builder.setDriver(). Per ulteriori informazioni sull'API SQLite Driver, consulta la documentazione di SQLite KMP.
  • Sono state aggiunte le API per accedere al SQLiteConnection sottostante dalle API di aggiornamento: RoomDatabase.useReaderConnection e RoomDatabase.useWriterConnection.
  • Diversi callback relativi alla stanza ora hanno una versione sovraccaricata che riceve SQLiteConnection anziché SupportSQLiteDatabase. Questi valori devono 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 richiami sono:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • L'elemento KTX androidx.room:room-ktx è stato unito a androidx.room:room-runtime insieme a tutte le relative API. L'elemento è ora vuoto. Rimuovilo dall'elenco delle dipendenze.

Versione 2.6

Versione 2.6.1

29 novembre 2023

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

Correzioni di bug

  • È stato risolto un problema nel codice generato per cui il valore predefinito per le colonne doppie 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 lanciate dai caricamenti 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 si tratta di un cambiamento di comportamento: in passato, gli errori di caricamento venivano visualizzati come un'eccezione lanciata dal metodo dao che ha attivato il caricamento. (I93887, b/302708983)

Versione 2.6.0

18 ottobre 2023

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

Modifiche importanti dalla versione 2.5.0

  • L'opzione per attivare la generazione di codice Kotlin (o "Kotlin CodeGen") è ora disponibile in Room KSP. (4297ec0). Per attivare Kotlin CodeGen in Room, aggiungi il nome dell'opzione room.generateKotlin alle opzioni del processore per KSP. Per maggiori dettagli su come passare le opzioni di elaborazione 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 dovrebbero 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 di ritorno delle raccolte Nullable non sono più consentiti in Room per la generazione di codice Kotlin.

Avviso: potresti scoprire che i tuoi progetti sono più rigidi in termini di presenza di valori null quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, la nullabilità degli argomenti di tipo è importante, mentre in Java viene ignorata per la maggior parte. Ad esempio, supponiamo che tu abbia un tipo di ritorno "Flow<foo\>" e che la tabella sia vuota. In CodeGen Java, questo non causerà alcun problema, ma in CodeGen Kotlin verrà visualizzato un errore. Per evitare questo problema, devi utilizzare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>

  • Il nuovo elemento 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'utilizzo di input e output degli schemi tramite le opzioni dell'annotatore Gradle. Per maggiori dettagli, consulta le note di rilascio della versione 2.6.0-alpha02 di Room.
  • Le classi di valore nelle entità Room sono ora supportate per KSP. (4194095)
  • I tipi di ritorno Map nidificati 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 rilasciato. La versione 2.6.0-rc01 contiene questi commit.

Versione 2.6.0-beta01

23 agosto 2023

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

Correzioni di bug

  • Gestione dell'eccezione speciale SQLite durante l'upsert rilevata quando viene lanciata l'eccezione 2067 SQLITE_CONSTRAINT_UNIQUE durante un upsert, l'upsert deve eseguire un aggiornamento. (If2849, b/243039555)

Versione 2.6.0-alpha03

9 agosto 2023

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

Nuove funzionalità

  • I tipi di ritorno Map nidificati nelle funzioni DAO sono ora supportati in Room. (I13f48, 203008711)

Modifiche all'API

  • È stata creata una nuova annotazione del tipo @MapColumn per sostituire @MapInfo, che è stato ritirato. Per ogni nome di colonna (keyColumnName, valueColumnName o entrambi) fornito in un'annotazione @MapInfo, devi dichiarare un'annotazione @MapColumn con solo columnName e utilizzarla nell'argomento di tipo specifico a cui viene fatto riferimento (la chiave o il valore della mappa) nel tipo di ritorno della funzione DAO. Questo perché l'annotazione @MapColumn viene utilizzata direttamente nell'argomento 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 di 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ù agevoli, ma è anche abbastanza flessibile da configurare manualmente i gusti o gli schemi di tipo di build mantenendo i vantaggi del plug-in (build riproducibili e memorizzabili nella cache). (I09d6f, b/278266663)

Correzioni di bug

  • È stata corretta una potenziale vulnerabilità di perdita di memoria in QueryInterceptorStatement. (I193d1)
  • È stato corretto un comportamento errato nella funzione QueryInterceptorDatabase execSQL(). (Iefdc8)

Versione 2.6.0-alpha02

21 giu 2023

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

Plug-in Gradle Room

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

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

Il plug-in configurerà quindi il compilatore Room e le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) per generare i file dello schema in cartelle con nome specifico, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json. Come di consueto, questi file vengono sottoposti a check-in nel repository per essere utilizzati per la convalida e le migrazioni automatiche. Dopo la migrazione all'utilizzo del plug-in anziché delle opzioni di elaboratore di annotazioni, i file dello schema esistenti devono essere copiati nelle directory dei tipi generati creati dal plug-in. Si tratta di un'operazione di migrazione una tantum che deve essere eseguita manualmente. La documentazione dello schema in developers.android.com verrà aggiornata in futuro, una volta che il feedback sarà stato risolto e il plug-in sarà stabile, quindi provaci.

Modifiche all'API

  • RoomDatabase.QueryCallback è stato definito come un'interfaccia funzionale per consentire gli utilizzi delle conversioni SAM. (Iab8ea, b/281008549)

Correzioni di bug

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

Versione 2.6.0-alpha01

22 marzo 2023

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

Nuove funzionalità

  • Supporto delle classi di valore in Room per KSP. Ora Room è in grado di supportare le classi di valore in Entities. (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 maggiori dettagli su come passare le opzioni di elaborazione 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 dovrebbero 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 di ritorno delle raccolte Nullable non sono più consentiti in Room per la generazione di codice Kotlin.

Avviso: potresti scoprire che i tuoi progetti sono più rigidi in termini di presenza di valori null quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, la nullabilità degli argomenti di tipo è importante, mentre in Java viene ignorata per la maggior parte. Ad esempio, supponiamo che tu abbia un tipo di ritorno "Flow<foo\>" e che la tabella sia vuota. In CodeGen Java, questo non causerà alcun problema, ma in CodeGen Kotlin verrà visualizzato un errore. Per evitare questo problema, devi utilizzare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>

Modifiche all'API

  • Evitare l'utilizzo non significativo di raccolte nullable nei tipi di ritorno dei metodi DAO. (I777dc, b/253271782, b/259426907)
  • Aggiungi un'API per creare un flusso che emetta 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 nella compilazione di Kotlin, ma devono essere riscritte come funzioni per evitare la falsa idea 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 rilasciato. La versione 2.5.2 contiene questi commit.

Correzioni di bug

  • Risolvere un problema di incompatibilità con kotlinx-metadata-jvm. (386d5c)
  • Risolto un problema che causava l'emissione di un errore da parte di Room quando veniva 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 rilasciato. La versione 2.5.1 contiene questi commit.

Correzioni di bug

  • Evita di controllare la directory principale del database in FrameworkSQLiteHelper se il database è già aperto. (5de86b8)
  • Utilizza un controllo isOpenInternal per verificare se il database è già aperto. (e91fb35)
  • Ora è disponibile una gestione migliore del caso reentrante in acquireTransactionThread() di Room. (219f98b). Durante una transazione in sospensione, Room utilizza un thread dall'executor della transazione, avvia un loop di eventi al suo interno e invia le operazioni di sospensione del database in modo che siano tutte incapsulate nella coroutine della transazione. In genere, il thread della transazione è diverso da quello che avvia la transazione, ma in alcuni casi sono uguali. Per gestire questi casi di ricorsione, withTransaction() è stato sottoposto a refactoring in modo da non fare più affidamento su un job di controllo ed eseguire invece il blocco della transazione in sospensione all'interno di runBlocking nel thread della 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 vengono rilasciati. La versione 2.5.0 contiene questi commit.

Versione 2.5.0

11 gennaio 2023

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

Modifiche importanti dalla versione 2.4.0

  • Tutte le origini di room-runtime sono state convertite da Java a Kotlin. Tieni presente che potresti riscontrare problemi di incompatibilità con il codice sorgente se il codice è in Kotlin a causa della conversione della libreria in Kotlin. Ad esempio, una modifica incompatibile nota dell'origine è che ora in InvalidationTracker dovrai 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 se si verificano incompatibilità significative.
  • È stata aggiunta una nuova annotazione di scorciatoia, @Upsert, che tenta di inserire un'entità quando non esiste un conflitto di unicità o di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)
  • Sono stati aggiunti nuovi elementi room-paging-rxjava2, room-paging-rxjava3 e room-paging-guava per la gestione della paginazione delle stanze.
  • Sono state aggiunte API per fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in @MapInfo (Icc4b5)

Versione 2.5.0-rc01

7 dicembre 2022

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

  • Questa release è identica a 2.5.0-beta02.

Versione 2.5.0-beta02

9 novembre 2022

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

Modifiche all'API

  • Correggi varie API che passano gli argomenti di query da invariabili (Array<Any?>) a controvarianti (Array<out Any?>) per adattarli al comportamento degli array di Java. (b/253531073)

Versione 2.5.0-beta01

5 ottobre 2022

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

Modifiche all'API

  • Limita la versione minima che supporta @Upsert all'API 16. Ciò è dovuto all'impossibilità di identificare un conflitto di vincoli della 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 .json dello schema, danneggiandoli. (I4f83b, b/246751839)

Versione 2.5.0-alpha03

24 agosto 2022

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

Nuove funzionalità

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

Correzioni di bug

  • Ora la stanza restituirà un SQLiteConstraintException anziché un IllegalStateException durante un controllo del vincolo della chiave esterna della migrazione automatica. (I328dd)
  • Correzione di una modifica incompatibile del codice sorgente 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 rilasciato. La versione 2.5.0-alpha02 contiene questi commit.

Nuove funzionalità

Modifiche all'API

  • Tutto 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à con il codice sorgente a causa della conversione della libreria in Kotlin. Se il codice era in Kotlin e chiamava la versione precedente di Room, la nuova versione dovrà gestire questi casi. Ad esempio, una modifica incompatibile nota dell'origine è che ora in InvalidationTracker dovrai dichiarare onInvalidate() in Observer per avere un parametro di tipo Set e non MutableSet.

  • Sono state aggiunte API per fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in @MapInfo (Icc4b5)
  • Risolto un problema di compatibilità del codice sorgente per consentire nuovamente @Ignore nei getter delle proprietà. (Ifc2fb)

Correzioni di bug

  • Algoritmo di risoluzione delle colonne duplicate. Ora Room tenterà di risolvere le colonne ambigue in una query con più mappe. In questo modo, le UNION con tabelle contenenti tabelle con lo stesso nome possono essere mappate correttamente a un oggetto dati del risultato. (I4b444, b/201306012, b/212279118)

Versione 2.5.0-alpha01

23 febbraio 2022

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

Modifiche all'API

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

    Nota:potresti riscontrare problemi di incompatibilità con il codice sorgente perché alcune proprietà sono state spostate in oggetti companion durante la conversione della libreria in Kotlin. Se il codice era in Kotlin e chiamava la versione precedente di Room, la nuova versione avrà bisogno del suffisso ".Companion" per accedere a queste proprietà.

  • È stata convertita la 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 multi-processo a livello di FrameworkSQLite*, per proteggere la creazione e le migrazioni del database multi-processo la prima volta. (Ied267, b/193182592)

Correzioni di bug

  • È stato aggiunto il supporto per le proprietà interne nei file sorgente Kotlin. Si tratta di un lieve cambiamento di comportamento in Room, che utilizzerà il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza veniva utilizzato il nome JVM della funzione, che è diverso per le funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per associare i getter/setter alle proprietà private, verifica il codice generato dopo l'aggiornamento (If6531, b/205289020)

Versione 2.4.3

Versione 2.4.3

27 luglio 2022

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

Correzioni di bug

  • È stato risolto un problema che causava la mancata rilevazione da parte di Room delle funzioni di sospensione in Kotlin 1.7 (b/236612358)

Versione 2.4.2

Versione 2.4.2

23 febbraio 2022

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

Correzioni di bug

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

Versione 2.4.1

Versione 2.4.1

12 gennaio 2022

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

Correzioni di bug

  • È stato aggiunto il supporto per le proprietà interne nei file sorgente Kotlin. Si tratta di un lieve cambiamento di comportamento in Room, che utilizzerà il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza veniva utilizzato il nome JVM della funzione, che è diverso per le funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per associare i getter/setter alle proprietà private, verifica il codice generato dopo l'aggiornamento (If6531, b/205289020)

Versione 2.4.0

Versione 2.4.0

15 dicembre 2021

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

Modifiche importanti dalla versione 2.3.0

  • Migrazioni automatiche: ora Room offre un'API per la generazione automatica delle 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 verso cui eseguire la migrazione automatica. Quando Room ha bisogno di informazioni aggiuntive su rinominazioni o eliminazioni di tabelle e colonne, l'annotazione @AutoMigration può dichiarare una classe di specifiche contenente questi input. Per ulteriori dettagli, consulta la documentazione di @AutoMigration.
  • Iniezione di dipendenze nelle migrazioni automatiche: @ProvidedAutoMigrationSpec è una nuova API per dichiarare che un AutoMigrationSpec verrà fornito in fase di esecuzione tramite RoomDatabase.Builder#addAutoMigrationSpec(). Ciò consente a un framework di Dependency Injection 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 del costruttore che riceve la classe del database in test. In questo modo, l'helper può aggiungere automaticamente le migrazioni automatiche nello stesso modo durante runMigrationsAndValidate.
  • Supporto della paginazione delle stanze: è stato rilasciato androidx.room:room-paging, che fornisce il supporto nativo della paginazione 3.0 per le query Room che restituiscono androidx.paging.PagingSource.
  • Metodi di query relazionali: Room ora supporta i metodi @Dao per i tipi di ritorno delle mappe multiple, 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 rilasciato. 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 rilasciato. La versione 2.4.0-beta02 contiene questi commit.

Nuove funzionalità

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

Correzioni di bug

  • Abbiamo aggiunto un nuovo analizzatore TypeConverter che prende in considerazione le informazioni sulla nullabilità nei tipi. Poiché queste informazioni sono disponibili solo in KSP, vengono attivate per impostazione predefinita solo in KSP. Se causa problemi, puoi disattivarlo passando room.useNullAwareTypeAnalysis=false al processore di annotazioni. In questo caso, segnala un bug, poiché questo indicatore verrà rimosso in futuro. Con questo nuovo analizzatore TypeConverter, ti consigliamo di fornire solo TypeConverter di ricezione non null, poiché il nuovo analizzatore ha la possibilità di racchiuderli con un controllo null. Tieni presente che questo non ha alcun impatto sugli utenti che utilizzano KAPT o Java come elaboratori di annotazioni (a differenza di KSP) e non hanno informazioni sulla nullità nei tipi. (Ia88f9, b/193437407)
  • È stato corretto un bug per cui la compilazione di Room non andava a buon fine con un errore SQL quando un'entità FTS dichiarava di utilizzare lo 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 di ritorno del metodo di query relazionale nelle query LEFT JOIN. Con queste modifiche, se è presente una mappatura 1-to-many, la raccolta restituita per una chiave non includerà l'oggetto valore non valido se non viene trovato nel cursore. Se non vengono trovati valori validi, una chiave verrà mappata a una raccolta vuota. (Id5552b/201946438)
  • È stato risolto il problema di migrazione automatica per cui non è stato possibile applicare l'escape alle 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 rilasciato. 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 dalla paginazione delle stanze ora utilizza queryExecutor passato tramite RoomDatabase.Builder, quindi può essere sostituita, anziché Dispatchers.IO in precedenza. (Iae259)

Versione 2.4.0-alpha05

29 settembre 2021

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

Nuove funzionalità

Modifiche all'API

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

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

@MapInfo sarà obbligatorio quando la colonna della chiave o del 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

  • È stato risolto un problema per cui i risultati delle query con più mappe non erano 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 rilasciato. La versione 2.4.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Room ora supporta i metodi @Dao per i tipi di ritorno delle mappe multiple, utili per le istruzioni JOIN. I tipi di multimap supportati sono Map, oltre a ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap di Guava.

    Di seguito sono riportati alcuni esempi di query su mappe multiple:

    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 della mappa multipla può anche essere racchiuso nei tipi di ritorno asincroni supportati, come LiveData, Observable di Rx o le coroutine Flow.

Ricerca stanza

  • Viene rilasciato androidx.room:room-paging, che 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 elemento sostituisce l'implementazione di 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, pertanto 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, che sarà il primo elemento caricato.Key Questo comportamento si discosta da quello esistente, in cui LoadParams.Refresh.Key viene considerato la posizione di scorrimento dell'utente e gli elementi vengono caricati sia prima che dopo la chiave.

  • L'elemento è facoltativo e la disattivazione comporterà il ricorso al supporto esistente per la funzionalità Paging 3.0 introdotta in Room 2.3. Tuttavia, questo elemento non sarà facoltativo nelle release future per chi utilizza Room con la funzionalità di paginazione 3.0. Per attivare questa funzionalità, aggiungi il nuovo elemento room-paging al classpath. Se utilizzi Gradle, puoi aggiungere il seguente snippet a build.gradle:

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

Correzioni di bug

  • È stato risolto un problema nelle migrazioni automatiche relativo alla gestione delle violazioni delle chiavi esterne. (b/190113935)

Versione 2.4.0-alpha03

16 giugno 2021

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

Modifiche all'API

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

Correzioni di bug

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

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

  • È stato risolto un problema nelle migrazioni automatiche relativo agli indici. b/177673291

Aggiornamenti delle dipendenze

  • Il supporto di KSP per Room ora dipende da KSP 1.5.10-1.0.0-beta01. (1ecb11, b/160322705)

Versione 2.4.0-alpha02

5 maggio 2021

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

Modifiche all'API

  • @ProvidedAutoMigrationSpec è una nuova API per dichiarare che un AutoMigrationSpec verrà fornito in fase di esecuzione tramite RoomDatabase.Builder#addAutoMigrationSpec(). Ciò consente a un framework di Dependency Injection 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 a volte il callback InvalidationTracker veniva invocato in modo non valido, troppo tardi o per niente. 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 rilasciato. La versione 2.4.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Migrazioni automatiche: ora Room offre un'API per la generazione automatica delle 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 verso cui eseguire la migrazione automatica. Quando Room ha bisogno di informazioni aggiuntive su rinominazioni o eliminazioni di tabelle e colonne, l'annotazione @AutoMigration può dichiarare una classe di specifiche contenente questi input. Per ulteriori dettagli, consulta la documentazione di @AutoMigration.

Correzioni di bug

  • Risolto un problema per cui defaultValue con parentesi aggiuntive veniva convalidato 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 rilasciato. La versione 2.3.0 contiene questi commit.

Modifiche importanti dalla versione 2.2.0

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

Versione 2.3.0-rc01

24 marzo 2021

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

Correzioni di bug

  • Risolto un problema che impediva l'utilizzo delle query di flusso di coroutine create da Room in un blocco withTransaction in sospensione. (I797bf)

Versione 2.3.0-beta03

10 marzo 2021

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

Nuove funzionalità

  • È 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 nel thread principale poteva attivare un ANR. (I42b74, b/181221318)
  • È stata corretta la visibilità di @ExperimentalRoomApi in modo che sia pubblica anziché privata per il pacchetto. (b/181356119)

Contributo esterno

  • Consenti a Room di accettare un tipo di ritorno 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 di ritorno POJO nello stesso modo in cui viene fatto per un metodo DAO @RawQuery annotato. Grazie a "Markus Riegel | hey@marcorei.com". (I45acb)

Versione 2.3.0-beta02

18 febbraio 2021

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

Nuove funzionalità

  • Ora Room supporta in via sperimentale l'elaborazione dei simboli Kotlin KSP.

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

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

    Tieni presente che, poiché KSP è sperimentale, ti consigliamo di continuare a utilizzare KAPT per il codice di produzione. La riduzione dei tempi di compilazione è applicabile solo se non sono presenti altri processori che utilizzano KAPT. Per i problemi noti, consulta b/160322705.

Versione 2.3.0-beta01

27 gennaio 2021

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

Nuove funzionalità

  • Database chiudibili automaticamente: ora Room è in grado di chiudere i database a cui non viene eseguito l'accesso dopo un determinato periodo di tempo. Questa è una funzionalità sperimentale che può essere attivata chiamando RoomDatabase.Builder#setAutoCloseTimeout(). Questa funzionalità è utile per le applicazioni con più database.

Correzioni di bug

  • È stato risolto 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 in modo efficace quella definita. (/I0b90d, b/176138543)

Versione 2.3.0-alpha04

16 dicembre 2020

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

Nuove funzionalità

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

Problema noto

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

Correzioni di bug

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

Contributo esterno

  • Ora Room utilizzerà per impostazione predefinita beginTransactionNonExclusive se la modalità WAL è attivata e l'API è pari o superiore a 16. 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 rilasciato. La versione 2.3.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Room ora dispone di API per fornire istanze di convertitori di tipo in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore di tipo da fornire 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 uno stream di input. Ciò è utile ad esempio quando il database precompilato è compresso con gzip. Grazie ad "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060)

Modifiche all'API

  • È stato aggiunto il target mancante all'annotazione @ForeignKey per impedirne l'utilizzo al di fuori dell'annotazione @Entity. (Iced1e)

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

Correzioni di bug

  • Aggiornamento alla 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 in Dao con un supertipo generico con "primitivi" Kotlin. (Ice6bb, b/160258066)

  • Aggiornamento della documentazione dei metodi di aggiunta/rimozione degli osservatori per chiarire il threading (Ifd1d9, b/153948821)

  • È stato risolto un problema relativo alla convalida errata da parte di Room delle tabelle FTS che hanno dichiarato la colonna rowid. (d62ebc, b/145858914)

Contributi esterni

  • Risolvere i problemi relativi alle impostazioni internazionali di lettere maiuscole/minuscole relativi 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 copiato un database precompilato. (I1ba74, b/148934423)

Versione 2.3.0-alpha02

22 luglio 2020

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

Nuove funzionalità

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

Modifiche all'API

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

Versione 2.3.0-alpha01

10 giugno 2020

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

Nuove funzionalità

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

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

Modifiche all'API

  • @RewriteQueriesToDropUnusedColumns è una nuova comoda annotazione 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 come sostituto delle query di ottimizzazione delle camere con proiezioni a stelle. Tieni presente che @RewriteQueriesToDropUnusedColumns non sostituisce la soluzione per i conflitti di colonne room.expandProjection offerta in merito ai tipi di dati restituiti che contenevano campi @Embedded.

Correzioni di bug

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

Versione 2.2.6

Versione 2.2.6

16 dicembre 2020

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

Correzioni di bug

  • È stato risolto un problema per cui Room disattivava erroneamente l'elaborazione delle annotazioni incrementali nelle versioni JDK più recenti. (b/171387388)

Versione 2.2.5

Versione 2.2.5

18 marzo 2020

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

Correzioni di bug

  • Rendi MultiInstanceInvalidationService directBootAware. Grazie a "Mygod contact-git@mygod.be" (b/148240967)
  • È stato risolto un bug che causava un arresto anomalo quando l'invalidazione multi-istanza era attivata e il database conteneva un'entità FTS. (b/148969394)
  • È stato risolto un problema relativo al caricamento delle librerie native SQLite nell'elaboratore 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

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

Correzioni di bug

  • Risolto un problema relativo alla sospensione delle transazioni che causavano un deadlock 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 codice errato quando un'interfaccia DAO in Kotlin aveva una funzione concreta. (b/146825845)

Versione 2.2.3

Versione 2.2.3

18 dicembre 2019

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

Correzioni di bug

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

Versione 2.2.2

Versione 2.2.2

20 novembre 2019

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

Correzioni di bug

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

Versione 2.2.1

Versione 2.2.1

23 ottobre 2019

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

Correzioni di bug

  • È 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 ripetizione per la gestione della libreria nativa mancante utilizzata per la verifica delle query in fase di compilazione.

Versione 2.2.0

Versione 2.2.0

9 ottobre 2019

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

Modifiche importanti dalla versione 2.1.0

  • Database precompilato: ora sono disponibili due nuove API in RoomDatabase.Builder per creare un RoomDatabase a partire da un file di database già compilato. createFromAsset() è per quando il file del database precompilato si trova nella cartella delle risorse dell'APK, mentre createFromFile() è per quando il file si trova in una posizione arbitraria. L'utilizzo di queste API cambia il comportamento delle migrazioni distruttive in modo che, durante una migrazione di riserva, Room provi a copiare di nuovo il database precompilato, se disponibile, altrimenti esegue il fallback all'eliminazione e alla ricostituzione di 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 dello schema di un database e, se specificati, verranno convalidati durante le migrazioni. 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 congiunzione (nota anche come tabella di join). b/69201917
  • Relazioni uno a uno: la limitazione nei campi POJO annotati con @Relation come di tipo List o Set è stata rimossa, consentendo così di rappresentare le relazioni con un solo valore. b/62905145
  • Entità target: le annotazioni DAO @Insert, @Update e @Delete ora hanno una nuova proprietà targetEntity che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. In questo modo, i parametri di questi metodi DAO possono essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506
  • Flusso di coroutine: ora i metodi DAO @Query possono avere tipo di ritorno Flow<T>. Il flusso restituito emette nuovamente un nuovo insieme di valori se le tabelle di osservazione nella query vengono invalidate. Dichiarare una funzione DAO con un tipo di valore restituito Channel<T> è un errore. Room ti incoraggia invece a utilizzare Flow e poi le funzioni adiacenti per convertire Flow in Channel. b/130428884
  • Gradle Incremental Annotation Processor: Room ora è un processore di annotazioni isolante di Gradle e l'incrementabilità può essere attivata tramite l'opzione del processore room.incremental. Per ulteriori informazioni, 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 versione stabile futura. b/112110217
  • Proiezioni espandenti: è stata aggiunta una nuova opzione sperimentale del compilatoreroom.expandProjection che consente a Room di riscrivere una query con una proiezione a stella in modo che contenga solo le colonne del tipo POJO restituito. Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. Room riscriverà quindi la query in SELECT id, title FROM Song in modo da recuperare l'insieme minimo di colonne per soddisfare il tipo di ritorno. In questo modo viene eliminato l'CURSOR_MISMATCH avviso visualizzato quando la query restituisce colonne aggiuntive che non corrispondono a nessun campo nel tipo POJO restituito.

Versione 2.2.0-rc01

5 settembre 2019

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

Nessuna modifica pubblica dalla Sala 2.2.0-beta01.

Versione 2.2.0-beta01

22 agosto 2019

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

Correzioni di bug

  • È stato corretto un bug per cui una query di flusso di coroutine smetteva di riemettere nuovi valori dopo un determinato 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 di cui non era stata eseguita la migrazione da Room 1.0, causando un arresto anomalo in fase di esecuzione a causa di uno schema non valido. (b/139306173)

Versione 2.2.0-alpha02

7 agosto 2019

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

Nuove funzionalità

  • Flusso di coroutine: ora i metodi DAO @Query possono avere tipo di ritorno Flow<T>. Il flusso restituito emette nuovamente un nuovo insieme di valori se le tabelle di osservazione nella query vengono invalidate. Dichiarare una funzione DAO con un tipo di valore restituito Channel<T> è un errore. Room ti incoraggia invece a utilizzare Flow e poi le funzioni adiacenti per convertire Flow in Channel. b/130428884
  • Proiezioni espandenti: è stata aggiunta una nuova opzione sperimentale del compilatoreroom.expandProjection che consente a Room di riscrivere una query con una proiezione a stella in modo che contenga solo le colonne del tipo POJO restituito. Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. Room riscriverà quindi la query in SELECT id, title FROM Song in modo da recuperare l'insieme minimo di colonne per soddisfare il tipo di ritorno. In questo modo viene eliminato l'CURSOR_MISMATCH avviso visualizzato quando la query restituisce colonne aggiuntive che non corrispondono a nessun 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 codice errato utilizzando un metodo come settatore di campo quando il campo è protetto. b/136194628
  • È stato corretto un bug che causava l'emissione di un NPE da parte di InvalidationTracker in un secondo processo quando l'invalidazione multi-istanza era attivata e il servizio di invalidazione veniva interrotto. b/137454915
  • È stato risolto un bug per cui Room non identificava correttamente il tipo di ritorno di una funzione di sospensione ereditata annotata con @RawQuery. b/137878827
  • È stato aggiornato il codice generato per @Relation quando la chiave di collegamento è di tipo BLOB in modo da utilizzare un ByteBuffer paragonabile. b/137881998
  • È stato corretto un bug per cui Room segnalava l'assenza di setter nei POJO utilizzati come parametri di entità parziali di @Insert, @Update e @Delete. b/138664463
  • È stato corretto un bug per cui Room segnalava l'assenza 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 precompilato: ora sono disponibili due nuove API in RoomDatabase.Builder per creare un RoomDatabase a partire da un file di database già compilato. createFromAsset() è per quando il file del database precompilato si trova nella cartella delle risorse dell'APK, mentre createFromFile() è per quando il file si trova in una posizione arbitraria. L'utilizzo di queste API cambia il comportamento delle migrazioni distruttive in modo che, durante una migrazione di riserva, Room provi a copiare di nuovo il database precompilato, se disponibile, altrimenti esegue il fallback all'eliminazione e alla ricostituzione di 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 dello schema di un database e, se specificati, verranno convalidati durante le migrazioni. b/64088772

    Nota:se lo schema del database contiene 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, potrebbe essere necessario eseguire una migrazione per convalidare i valori predefiniti non considerati. Per ulteriori informazioni, consulta la sezione 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 congiunzione (nota anche come tabella di join). b/69201917
  • Relazioni uno a uno: la limitazione nei campi POJO annotati con @Relation come di tipo List o Set è stata rimossa, consentendo così di rappresentare le relazioni con un solo valore. b/62905145
  • Entità target: le annotazioni DAO @Insert, @Update e @Delete ora hanno una nuova proprietà targetEntity che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. In questo modo, i parametri di questi metodi DAO possono essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506
  • Gradle Incremental Annotation Processor: Room ora è un processore di annotazioni isolante di Gradle e l'incrementabilità può essere attivata tramite l'opzione del processore room.incremental. Per ulteriori informazioni, 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 versione stabile futura. b/112110217

Correzioni di bug

  • Room non propagherà più EmptySetResultException al gestore degli errori globali 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 sospesa annotata con @RawQuery non aveva un tipo di ritorno. b/134303897
  • Room non genererà più adattatori DAO con tipi non elaborati. b/135747255

Versione 2.1.0

Versione 2.1.0

13 giugno 2019

La versione 2.1.0 di Room viene rilasciata senza modifiche rispetto alla versione 2.1.0-rc01. I commit inclusi nella versione sono disponibili qui.

Modifiche importanti dalla versione 2.0.0

  • FTS: ora Room supporta le entità con una tabella di mappatura FTS3 o FTS4. Le classi annotate con @Entity ora possono essere ulteriormente annotate con @Fts3 o @Fts4 per dichiarare un corso con una tabella di ricerca full-text di mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione.
  • Visualizzazioni: ora Room supporta la dichiarazione di un'entità come query memorizzata, nota anche come visualizzazione, utilizzando l'annotazione @DatabaseView.
  • Coroutine: ora i metodi DAO possono essere funzioni di sospensione. Includi room-ktx nelle tue dipendenze per usufruire di questa funzionalità. L'elemento ktx fornisce anche la funzione di estensione RoomDatabase.withTransaction per eseguire transazioni di database all'interno di una coroutine.
  • Auto Value: ora Room supporta la dichiarazione di classi annotate con AutoValue come entità e POJO. Ora le annotazioni Room @PrimaryKey, @ColumnInfo, @Embedded e @Relation possono essere dichiarate nei metodi astratti di una classe con annotazioni del valore automatico. Tieni presente che queste annotazioni devono essere accompagnate anche da @CopyAnnotations affinché Room possa comprenderle correttamente.
  • Supporto aggiuntivo per l'esecuzione asincrona: i metodi DAO annotati con @Insert, @Delete o @Update, insieme a @Query contenenti istruzioni INSERT, DELETE o UPDATE, ora supportano i tipi di ritorno Rx Completable, Single, Maybe e il tipo di ritorno di Guava ListenableFuture e possono anche essere funzioni di sospensione.
  • enableMultiInstanceInvalidation è una nuova API in RoomDatabase.Builder per attivare 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.
  • Ora Room utilizzerà correttamente il costruttore principale di Kotlin nei classi dati, evitando la necessità di dichiarare le proprietà come vars.

Versione 2.1.0-rc01

29 maggio 2019

Correzioni di bug

  • È stato corretto un errore di inizializzazione della stanza che potrebbe verificarsi a causa di una configurazione già impostata temp_store. 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
  • È stato corretto un bug per cui InvalidationTracker causava un arresto anomalo quando si verificavano più controlli di convalida 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 all'API / al comportamento

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

Correzioni di bug

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

Versione 2.1.0-alpha06

22 marzo 2019

Modifiche all'API / al comportamento

  • Le query di transazioni 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 avvolgerà più le 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
  • È stata aggiornata la grammatica SQLite di Room in modo che corrisponda a quella di 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 sicurezza transazioni di database all'interno di una coroutine. Le funzioni di estensioni di Room e il supporto delle coroutine sono disponibili nell'artifact room-ktx.
  • I metodi DAO non astratti annotati con @Transaction ora possono essere funzioni di sospensione. b/120241587

Modifiche all'API / al comportamento

  • L'elemento room-coroutines è stato rinominato room-ktx seguendo la stessa convenzione di denominazione degli altri elementi 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

  • È stato corretto un bug per cui gli argomenti dello tokenizer venivano ignorati se lo tokenizer utilizzato era SIMPLE. b/125427014
  • È stato corretto un bug per cui Room non riusciva a identificare correttamente le funzioni di sospensione con parametri di tipo classe interna. b/123767877
  • È stato corretto un bug per cui il metodo DAO @Query differito con istruzioni INSERT, UPDATE o DELETE preparava anticipatamente la query nel thread principale. b/123695593
  • Sono stati corretti vari bug che causavano la generazione di codice errato da parte di Room per determinate funzioni di sospensione. b/123466702 e b/123457323
  • È stato corretto un bug per cui l'utilizzo obsoleto 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'elemento kotlinx-metadata-jvm che non è attualmente 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 tipi asincroni Single, Mayble, Completable e ListenableFuture. Inoltre, possono essere funzioni di sospensione. b/120227284

Modifiche all'API / al comportamento

  • Ora Room 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 attorno 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 le attuali associazioni SQLite di Android. b/117266738

Correzioni di bug

  • È stato corretto un bug per cui Room non utilizzava correttamente il TypeConverter di un tipo di ritorno 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 in sospensione. b/122902595
  • È stato corretto un bug per cui Room generava 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 all'API

  • L'attributo FTS tokenizer in @Fts3/@Fts4 ora accetta una stringa anziché un'enumerazione. In questo modo, Room può utilizzare tokenizzatori personalizzati. I tokenizzatori integrati sono ancora definiti in FtsOptions come costanti di stringa. b/119234881

Nuove funzionalità

  • Coroutine: ora i metodi DAO possono essere funzioni di sospensione. Per supportare le funzioni di sospensione in Room, è stato rilasciato un nuovo artifact, room-coroutines. b/69474692
  • I metodi DAO annotati con @Insert, @Delete o @Update ora supportano ListenableFuture come tipo di ritorno. 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 i parametri del metodo DAO come finali nell'implementazione generata. b/118015483
  • È stato corretto un bug per cui il processore di 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 implementazioni di Collection come argomenti di un'espressione IN. b/119884035
  • È stato corretto un bug per cui il 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 di chiusura di RoomDatabase per ridurre le contese per i blocchi. b/117900450

Versione 2.1.0-alpha02

30 ottobre 2018

Nuove funzionalità

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

Correzioni di bug

  • È stato corretto un bug per cui Room eseguiva I/O su disco nel thread principale durante l'iscrizione e lo smaltimento da un tipo di ritorno Rx. b/117201279
  • È stato corretto un bug per cui Room non riusciva a trovare un convertitore di tipo appropriato per un campo in una classe di entità Kotlin. b/111404868
  • È stato corretto un bug per cui Room generava codice errato per un'implementazione dell'interfaccia DAO contenente un metodo predefinito Kotlin senza argomenti. b/117527454
  • È stato aggiornato l'analizzatore della sintassi SQLite di Room per risolvere un problema di prestazioni che causava tempi di compilazione lunghi. b/117401230

Versione 2.1.0-alpha01

8 ottobre 2018

Nuove funzionalità

  • FTS: ora Room supporta le entità con una tabella di mappatura FTS3 o FTS4. Le classi annotate con @Entity ora possono essere ulteriormente annotate con @Fts3 o @Fts4 per dichiarare una classe con una tabella di ricerca full-text di mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione. b/62356416
  • Visualizzazioni: ora Room supporta la dichiarazione di una classe come query memorizzata, nota anche come visualizzazione, utilizzando l'annotazione @DatabaseView. b/67033276
  • Auto Value: ora Room supporta la dichiarazione di classi annotate AutoValue come entità e POJO. Ora le annotazioni Room @PrimaryKey, @ColumnInfo, @Embedded e @Relation possono essere dichiarate nei metodi astratti di una classe con annotazione del valore automatico. Tieni presente che queste annotazioni devono essere accompagnate anche da @CopyAnnotations affinché Room le comprenda correttamente. b/62408420
  • Supporto aggiuntivo per i tipi di reso Rx: i metodi DAO annotati con @Insert, @Delete o @Update ora supportano i tipi di reso Rx Completable, Single<T> e Maybe<T>. b/63317956
  • Tipi immutabili con @Relation: in precedenza Room richiedeva che i campi annotati con @Relation fossero impostabili, ma ora possono essere parametri del costruttore.
  • enableMultiInstanceInvalidation: è una nuova API in RoomDatabase.Builder che consente di attivare l'invalidazione in più istanze di RoomDatabase che utilizzano lo stesso file di database. Questo meccanismo di annullamento convalida multi-istanza funziona anche in 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 all'API / al comportamento

  • 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 relativi al recupero da un database danneggiato o da una migrazione errata durante l'inizializzazione di Room. b/111504749 e b/111519144
  • Ora Room utilizzerà correttamente il costruttore principale di Kotlin nei classi 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 all'API / al comportamento

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

Correzioni di bug

  • Specifica il nome della classe/del campo nell'errore "Impossibile trovare il getter per il campo" b/73334503
  • È stata corretta la compatibilità con le versioni precedenti di Room di RoomOpenHelper 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 camera 1.1.1 è identica alla camera 1.1.1-rc1.

Versione 1.1.1-rc1

16 maggio 2018 Consigliamo vivamente di utilizzare Room 1.1.1-rc1 anziché 1.1.0 se utilizzi le migrazioni.

È 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 Rx Single e Maybe di Room, che riutilizzava la query in anticipo, causando problemi se aggiungevi 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 all'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

  • Ora [RoomDatabase.clearAllTables][ref-clearAllTables] 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, a condizione che il 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 multi-tabella (ad esempio relazioni e join). In precedenza, non riuscivano ad attivare nuovi risultati o non riuscivano a compilare. b/74128314

Versione 1.1.0-alpha1

22 gennaio 2018

Nuove funzionalità

  • RawQuery: questa nuova API consente ai metodi @Dao di ricevere il codice SQL come parametro di query b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: questa nuova API in RoomDatabase.Builder consente un controllo più granulare sulle versioni iniziali dello schema da cui sono consentite le migrazioni distruttive (rispetto a fallbackToDestructiveMigration) b/64989640
  • Room ora supporta solo le API di paginazione più recenti (alpha-4 e versioni successive), pertanto non supporta più quelle ritirateLivePagedListProvider. Per utilizzare la nuova versione alpha di Room, devi utilizzare la funzionalità di paginazionealpha-4 o successiva e passare da LivePagedListProvider a LivePagedListBuilder, se non l'hai ancora fatto.

Correzioni di bug

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