Room
La libreria di persistenza della stanza fornisce un livello di astrazione rispetto a SQLite per consentire un accesso più solido al database, sfruttando al contempo tutta la potenza di SQLite.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Versione alpha
30 ottobre 2024 2.6.1 - - 2.7.0-alpha11

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:

Alla moda

dependencies {
    def room_version = "2.6.1"

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

    // To use Kotlin annotation processing tool (kapt)
    kapt "androidx.room:room-compiler:$room_version"
    // To use Kotlin Symbol Processing (KSP)
    ksp "androidx.room:room-compiler:$room_version"

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

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

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

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

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

Kotlin

dependencies {
    val room_version = "2.6.1"

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

    // To use Kotlin annotation processing tool (kapt)
    kapt("androidx.room:room-compiler:$room_version")
    // To use Kotlin Symbol Processing (KSP)
    ksp("androidx.room:room-compiler:$room_version")

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

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

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

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

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

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

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

Per informazioni sull'utilizzo del plug-in 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

La stanza virtuale ha le seguenti opzioni di processore delle annotazioni.

room.schemaLocation directory
Consente di esportare gli schemi di database in file JSON nella directory specificata. Per ulteriori informazioni, consulta Migrazioni delle stanze.
room.incremental boolean
Abilita il processore di annotazione incrementale 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 build Gradle di primo livello.

Groovy

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

Kotlin

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

Nel file di 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")
    }
}

Se utilizzi il plug-in Room Gradle, è necessario impostare un schemaDirectory. 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 -

Utilizza le opzioni del processore di annotazione

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.

Alla moda

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

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

Kotlin

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

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

Poiché room.schemaLocation è una directory e non un tipo primitivo, è necessario utilizzare CommandLineArgumentsProvider quando si aggiunge questa opzione, in modo che Gradle sia a conoscenza di questa directory quando esegue controlli aggiornati. Esegui la migrazione del database 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-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 relativo al paging delle stanze in cui veniva generato un codice non valido utilizzando @Relation insieme a 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 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

  • È stato risolto un problema per cui Room KMP tentava di emettere codice utilizzando UUID per le 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

Viene rilasciato androidx.room:room-*:2.7.0-alpha07. 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 di 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 di @RawQuery ora possono accettare un RoomRawQuery come singolo parametro. (Iea844, b/330586815)
  • Aggiungi un sovraccarico di setQueryCallback() che accetti un CoroutineContext. (Id66ff, b/309996304)
  • Aggiunto il supporto per linuxArm64 target multipiattaforma Kotlin (I139d3, b/338268719)

Correzioni di bug

  • Risolvi un problema per cui la stanza virtuale generava erroneamente una chiamata a recursiveFetchArrayMap in target non Android. (710c36, b/352482325)
  • È 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

Viene rilasciato androidx.room:room-*:2.7.0-alpha01. 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 appena supportate verranno rese "complete" nelle prossime release di Room.

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 che deve essere utilizzato con una funzione generata da una stanza per evitare di utilizzare la riflessione quando si crea l'istanza dell'implementazione 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 all'oggetto SQLiteConnection sottostante dalle API driver: RoomDatabase.useReaderConnection e RoomDatabase.useWriterConnection.
  • I callback relativi alle stanze virtuali ora hanno una versione sovraccarica 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 abilitare la generazione del codice Kotlin (o "Kotlin CodeGen") è ora disponibile nel KSP della stanza. (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 che è stata aggiunta è che i tipi di ritorno delle raccolte nullable non sono più consentiti in Room per CodeGen Kotlin.

Attenzione: potresti scoprire che i tuoi progetti sono più rigidi in termini di nullità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, il valore null degli argomenti di tipo è importante, mentre in Java viene ignorato. Ad esempio, supponiamo che tu abbia un tipo restituito "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 SQLite relativa al caso speciale durante l'upsert riscontrato quando viene generata 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 ora è deprecato. Per ogni nome di colonna (keyColumnName, valueColumnName o entrambi) fornito in un'annotazione @MapInfo, dovrai dichiarare un'annotazione @MapColumn solo con columnName e utilizzare l'annotazione sull'argomento del tipo specifico a cui viene fatto riferimento (la chiave o il valore della mappa) nel tipo restituito della funzione DAO. Questo perché l'annotazione @MapColumn viene utilizzata direttamente nell'argomento type 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 la 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 artefatto per il plug-in Room Gradle con ID androidx.room, che risolve vari problemi esistenti in Room relativi all'utilizzo di input e output di schemi tramite le opzioni del processore di annotazione Gradle. Il plug-in Room Gradle configura il progetto in modo che gli schemi generati utilizzati per le migrazioni automatiche e l'output delle attività di compilazione siano configurati correttamente per avere build riproducibili e memorizzabili nella cache. Il plug-in offre un DSL per configurare la posizione dello schema di base:

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

Il plug-in configurerà quindi il compilatore Room e le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) per generare i file dello schema in cartelle con il relativo aggiornamento, 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 relativa allo schema in developers.android.com verrà aggiornata in futuro una volta che avremo gestito il feedback e che il plug-in raggiungerà la sua stabilità. Prova quindi.

Modifiche 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 che è stata aggiunta è che i tipi di ritorno delle raccolte nullable non sono più consentiti in Room per CodeGen 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 Java CodeGen, non causa alcun problema, ma in Kotlin CodeGen riceverai un errore. Per evitare che questo accada, dovrai usare "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 la creazione di un flusso che emette modifiche del tracker di invalidazione. L'API è utile per creare flussi che devono reagire alle modifiche del database. (I8c790, b/252899305)

Correzioni di bug

  • Non consentire proprietà astratte come getter DAO o query DAO 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 rientro, withTransaction() è stato sottoposto a refactoring in modo che non si basi più su un job di controllo e eseguirà invece il blocco delle transazioni di sospensione dall'interno di runBlocking nel thread delle transazioni.

Versione 2.5.0

Versione 2.5.0

22 febbraio 2023

Vengono rilasciate le funzionalità androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 e androidx.room:room-paging-rxjava3:2.5.0. La versione 2.5.0 contiene questi commit.

Versione 2.5.0

11 gennaio 2023

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

Modifiche importanti dalla versione 2.4.0

  • Tutte le origini room-runtime sono state convertite da Java a Kotlin. Tieni presente che potresti riscontrare problemi di incompatibilità con il codice sorgente se il codice è in Kotlin a causa della conversione della libreria in Kotlin. Ad esempio, una modifica nota incompatibile con l'origine è che in InvalidationTracker ora devi dichiarare onInvalidate() in Observer per avere un parametro di tipo Set e non MutableSet. Inoltre, alcuni metodi getter sono stati convertiti in proprietà che richiedono la sintassi di accesso alle proprietà nei file Kotlin. Segnala un bug se si verificano incompatibilità significative.
  • È stata aggiunta una nuova annotazione di scorciatoia, @Upsert, che tenta di inserire un'entità in assenza di conflitti di univocità oppure di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)
  • 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

Viene rilasciato androidx.room:room-*:2.5.0-beta01. 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à in assenza di conflitti di univocità oppure di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)

Correzioni di bug

  • Ora la stanza virtuale genererà un SQLiteConstraintException anziché un IllegalStateException durante un controllo del vincolo di chiave esterna della migrazione automatica. (I328gg)
  • 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 vecchia versione di Room, la nuova versione dovrà gestire questi casi. Ad esempio, una modifica incompatibile nota dell'origine è che in InvalidationTracker ora 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)
  • Risolvi un problema di compatibilità della sorgente per riautorizzare @Ignore nei getter di 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 alle 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à della sorgente per riautorizzare @Query nei getter di proprietà. (I0a09b)
  • La libreria 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à.

  • Migrazione delle stanze convertita 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 a più processi a livello di FrameworkSQLite*, per proteggere le migrazioni e la creazione del database per la prima volta a più processi. (Ied267, b/193182592)

Correzioni di bug

  • Aggiunto il supporto per le proprietà interne nelle origini 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

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

Correzioni di bug

  • È stato risolto 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 il codice per un metodo di query di tipo restituito Array<ByteArray>. (If086e, b/213789489)

Versione 2.4.1

Versione 2.4.1

12 gennaio 2022

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 abbinare getter/setter a proprietà private, controlla il codice generato dopo l'aggiornamento (If6531, b/205289020)

Versione 2.4.0

Versione 2.4.0

15 dicembre 2021

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

Modifiche importanti dalla versione 2.3.0

  • Migrazioni automatiche: Room ora offre un'API per la generazione automatica delle migrazioni, a condizione che gli schemi vengano esportati. Per comunicare alla stanza virtuale che deve generare una migrazione automatica, è possibile utilizzare una nuova proprietà @Database#autoMigrations per dichiarare le versioni da e verso le quali eseguire la migrazione automatica. Quando Room ha bisogno di informazioni aggiuntive sulle ridenominazioni o eliminazioni di tabelle e colonne, l'annotazione @AutoMigration può dichiarare una classe di specifiche contenente questi input. Per ulteriori dettagli, consulta la documentazione di @AutoMigration.
  • Iniezione di dipendenze nelle migrazioni automatiche: @ProvidedAutoMigrationSpec è una nuova API per dichiarare che un AutoMigrationSpec verrà fornito in fase di esecuzione tramite RoomDatabase.Builder#addAutoMigrationSpec(). Ciò consente a un framework di inserimento delle dipendenze per fornire queste specifiche quando hanno bisogno di dipendenze complesse.
  • Assistenza per i test di migrazione per le migrazioni automatiche: MigrationTestHelper della stanza è stato aggiornato per supportare le migrazioni automatiche fornendo una nuova API costruttore che riceve la classe del database in fase di test. In questo modo l'assistente può aggiungere automaticamente le migrazioni automatiche allo stesso modo 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 multimap, 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

Viene rilasciato androidx.room:room-*:2.4.0-beta02. 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 sui valori null nei tipi. Poiché queste informazioni sono disponibili solo nel punto di forza principale, sono attive per impostazione predefinita solo nel punto di forza principale. Se causa problemi, puoi disattivarlo passando room.useNullAwareTypeAnalysis=false al programma di elaborazione delle 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 che ricevono non null, in quanto il nuovo analizzatore ha la possibilità di aggregarli con un controllo nullo. Tieni presente che questo non ha alcun impatto 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 era possibile utilizzare i caratteri di escape per le parole chiave SQLite nei nomi delle colonne. (Idbed4b/197133152)

Versione 2.4.0-beta01

13 ottobre 2021

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

Correzioni di bug

  • È stato risolto un problema relativo 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 PagingSource generata da room-paging ora utilizza l'elemento queryExecutor trasmesso tramite RoomDatabase.Builder, quindi è possibile eseguirne l'override, 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 i dettagli, consulta la documentazione 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 Stanza. (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

Viene rilasciato androidx.room:room-*:2.4.0-alpha04. 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 multimappe supportati sono Map insieme a ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap di Guava.

    Di seguito sono riportati alcuni esempi di query a mappa multipla:

    Mappa relazione one-to-one

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

    Mappa 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 come la posizione di scorrimento dell'utente e gli elementi vengono caricati sia prima che dopo la chiave.

  • L'artifact è 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 la funzionalità Room con la funzionalità di paginazione 3.0. Per l'attivazione, aggiungi il nuovo artefatto di impaginazione delle stanze al tuo classpath. Se utilizzi Gradle, puoi aggiungere il seguente snippet al file build.gradle:

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

Correzioni di bug

  • È stato risolto un problema 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

  • Risolto un problema per cui la stanza virtuale non generava un errore quando il tipo restituito di una funzione @Transaction era un flusso (I56ddd, b/190075899)

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

Aggiornamenti delle dipendenze

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

Versione 2.4.0-alpha02

5 maggio 2021

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

Modifiche alle API

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

Correzioni di bug

  • È stato risolto un problema relativo alle migrazioni automatiche in cui i @DatabaseView non venivano ricreati correttamente.

Contributo esterno

  • Risolvi un problema in JournalMode.TRUNCATE della stanza virtuale per cui il callback InvalidationTracker a volte veniva richiamato in modo non valido, troppo tardi o non veniva affatto chiamato. 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: Room ora 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 enum integrato: la stanza ora utilizzerà per impostazione predefinita un convertitore enum in stringa e viceversa, se non viene fornito alcun convertitore di tipo Enum. Se esiste già un convertitore 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 callback può essere impostato tramite RoomDatabase.Builder#setQueryCallback().
  • Miglioramento predefinito: ora Room dispone di API per la creazione di un database utilizzando un database predefinito 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 RxJava3: la stanza virtuale ora 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 artefatto 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à

  • Aggiunto il supporto della compilazione incrementale per i punti di forza principali. (I031c1, b/176453350)

Correzioni di bug

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

Contributo esterno

  • Consenti a Room di accettare un tipo 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

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

Nuove funzionalità

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

    KSP sostituisce KAPT, in modo da eseguire i processori di annotazione in modo nativo sul compilatore Kotlin, riducendo notevolmente i tempi di compilazione.

    Per utilizzare Room 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 punto di forza principale.

    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: la stanza virtuale ora può chiudere i database a cui non si accede dopo un determinato periodo di tempo. Questa è una funzionalità sperimentale e può essere attivata chiamando il numero RoomDatabase.Builder#setAutoCloseTimeout(). Questa funzionalità è utile per le applicazioni con più database.

Correzioni di bug

  • È 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 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. (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 tipi che verrà fornito alla stanza virtuale, utilizza la nuova annotazione @ProvidedTypeConverter. Grazie a "mzgreen yairobbe@gmail.com". (Ie4fa5, b/121067210)

  • Room ora dispone di API per la creazione di un database utilizzando un database 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)

  • Aggiorna la documentazione sui metodi di aggiunta/rimozione osserva per chiarire i thread (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 la copia di un database predefinito. (I1ba74, b/148934423)

Versione 2.3.0-alpha02

22 luglio 2020

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

Nuove funzionalità

  • Supporto 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 artefatto androidx.room:room-rxjava3 per supportare RxJava3. (b/152427884)

Modifiche alle API

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

Versione 2.3.0-alpha01

10 giugno 2020

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

Nuove funzionalità

  • 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 di conflitto di colonne room.expandProjection offerta per quanto riguarda i tipi 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

Viene rilasciato androidx.room:room-*:2.2.6. 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

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

Modifiche importanti dalla versione 2.1.0

  • Database predefinito: in RoomDatabase.Builder sono ora disponibili due nuove API per la creazione di un RoomDatabase in base a 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 modifica il comportamento delle migrazioni distruttive, pertanto durante una migrazione di riserva, Room proverà a ricopiare il database precompilato, se disponibile, altrimenti scaricherà e ricrea tutte le tabelle. b/62185732
  • Valori predefiniti dello schema: @ColumnInfo ora ha una nuova proprietà defaultValue che può essere utilizzata per specificare il valore predefinito di una colonna. I valori predefiniti fanno parte dello schema di un database e, se specificati, verranno convalidati durante le migrazioni. b/64088772
  • Relazioni più richieste: ora @Relation ha una nuova proprietà associateBy, che accetta una nuova annotazione @Junction, utilizzata per dichiarare una relazione che deve essere soddisfatta tramite una tabella di giunzione (nota anche come tabella di join). b/69201917
  • Relazioni one-to-one: la limitazione nei campi POJO annotati con @Relation come di tipo List o Set è stata rimossa, consentendo di fatto la rappresentazione delle relazioni a un singolo valore. b/62905145
  • Entità target: le annotazioni DAO @Insert, @Update e @Delete ora hanno una nuova proprietà targetEntity, che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. 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: @Query i metodi DAO ora possono essere di tipo restituito 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 restituito Channel<T> è un errore. Room ti incoraggia invece a utilizzare Flow e a usare le funzioni di vicinanza 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. Sostanzialmente, elimina l'avviso CURSOR_MISMATCH che viene presentato quando la query restituisce colonne aggiuntive che non corrispondono a nessun campo nel tipo POJO che restituisce.

Versione 2.2.0-rc01

5 settembre 2019

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: @Query i metodi DAO ora possono essere di tipo restituito 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 correlata è di tipo BLOB per utilizzare un ByteBuffer paragonabile. b/137881998
  • È stato corretto un bug per cui la stanza virtuale si lamentava della mancanza di setter su POJO utilizzati come parametri di entità parziali di @Insert, @Update e @Delete. B/138664463
  • È stato corretto un bug per cui Room 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 predefinito: in RoomDatabase.Builder sono ora disponibili due nuove API per la creazione di un RoomDatabase in base a 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 di essere di tipo List o Set è stata rimossa, consentendo così di rappresentare le relazioni con un solo valore. b/62905145
  • Entità target: le annnotazioni DAO @Insert, @Update e @Delete ora hanno una nuova proprietà targetEntity, che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. 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: la stanza virtuale ora supporta le entità con una tabella FTS3 o FTS4 di mappatura. 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 una classe 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'artefatto ktx fornisce anche la funzione di estensione RoomDatabase.withTransaction per eseguire le transazioni del 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 asincrono aggiuntivo: i metodi DAO annotati con @Insert, @Delete o @Update, insieme alle istruzioni @Query contenenti istruzioni INSERT, DELETE o UPDATE, ora supportano i tipi restituiti Rx Completable, Single, Maybe e il tipo restituito di Guava ListenableFuture. 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 poteva verificarsi a causa di una configurazione temp_store già impostata. b/132602198
  • È stato corretto un avviso relativo all'utilizzo delle virgolette doppie per gli utenti con SQLite 3.27.0 e versioni successive. b/131712640
  • È 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 prendere più un blocco funzione con un CoroutineScope come ricevitore. Questo impedisce di saltare il wrapper coroutineScope { } aggiuntivo necessario per eseguire contemporaneamente gli elementi nel blocco delle transazioni.

Correzioni di bug

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

Versione 2.1.0-alpha06

22 marzo 2019

Modifiche 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 di configurare l'esecutore da utilizzare per le transazioni.
  • RoomDatabase.runInTransaction(Callable) non aggrega più le eccezioni selezionate in RuntimeEccezioni. b/128623748

Correzioni di bug

  • È stato corretto un bug per cui il tracker di invalidazione smetteva di osservare una tabella 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 costituito da una classe interna. b/123767877
  • È stato corretto un bug in 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 per cui Room generava un codice errato per alcune funzioni di sospensione. b/123466702 e b/123457323
  • È stato corretto un bug per cui l'utilizzo deprecato dei metodi non veniva correttamente eliminato nel codice generato. b/117602586
  • È 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 al comportamento / API

  • 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 restituito se il metodo DAO era una funzione di sospensione. b/122988159
  • È stato corretto un bug per cui la stanza virtuale identificava erroneamente le funzioni di sospensione ereditate come non in sospeso. b/122902595
  • È stato corretto un bug per cui Room generava un codice errato quando un campo @Embedded era in una classe padre e veniva utilizzato in più classi figlio. b/121099048
  • Risolto un problema per cui il database si bloccava durante la chiamata a funzioni di sospensione DAO tra beginTransaction() e endTransaction(). b/120854786

Versione 2.1.0-alpha03

4 dicembre 2018

Modifiche all'API

  • L'FTS tokenizer in @Fts3/@Fts4 ora prende una stringa anziché un'enum. In questo modo, Room può utilizzare tokenizzatori personalizzati. I tokenizzatori integrati sono comunque definiti in FtsOptions come costanti 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 artefatto, 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
  • Il blocco di RoomDatabase è stato aggiornato per ridurne il conflitto. b/117900450

Versione 2.1.0-alpha02

30 ottobre 2018

Nuove funzionalità

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

Correzioni di bug

  • È stato corretto un bug per cui Room eseguiva I/O disco nel thread principale durante l'iscrizione e lo smaltimento da un tipo di ritorno Rx. b/117201279
  • È stato corretto un bug per cui la stanza virtuale non riusciva a trovare un convertitore dei tipi appropriato per un campo in una classe di entità Kotlin. b/111404868
  • È stato corretto un bug per cui Room generava codice errato per un'implementazione dell'interfaccia DAO contenente un metodo predefinito Kotlin senza argomenti. b/117527454
  • È 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: la stanza virtuale ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, mediante 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 dal codice @CopyAnnotations affinché la stanza virtuale possa comprenderle correttamente. b/62408420
  • Supporto aggiuntivo per i tipi di reso Rx: i metodi DAO annotati con @Insert, @Delete o @Update ora supportano i tipi di reso Rx Completable, Single<T> e Maybe<T>. b/63317956
  • Tipi immutabili con @Relation: in precedenza, la stanza virtuale richiedeva che i campi annotati @Relation fossero configurabili, ma ora possono essere parametri del costruttore.
  • enableMultiInstanceInvalidation: è una nuova API in RoomDatabase.Builder che consente di attivare l'invalidazione in più istanze di RoomDatabase che utilizzano lo stesso file di database. Questo meccanismo di invalidazione di più istanze funziona anche su più processi. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: è una nuova API in RoomDatabase.Builder per ricreare automaticamente il database in caso di downgrade. b/110416954
  • ignoredColumns: è una nuova API nell'annotazione @Entity che può essere utilizzata per elencare i campi ignorati per nome. Utile per ignorare i campi ereditati su 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 nelle classi di dati, evitando di dichiarare i campi come vars. b/105769985

Versione 2.0.0

Versione 2.0.0

1° ottobre 2018

androidx.room 2.0.0 viene rilasciato senza modifiche dalla versione 2.0.0-rc01.

Versione 2.0.0-rc01

20 settembre 2018

androidx.room 2.0.0-rc01 viene rilasciato senza modifiche 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

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

Versione 1.1.0-beta2

5 aprile 2018

Correzioni di bug

  • È stato corretto un bug critico nelle implementazioni 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 usare [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (vedi [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] per creare facilmente un'istanza di [SupportSQLiteQuery][ref-SupportSQLiteQuery] con supporto per argomenti).
  • Il metodo [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] di RoomDatabase.Builder ora accetta vararg int anziché vararg Integer.

Correzioni di bug

  • 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