Zimmer
Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpharelease |
---|---|---|---|---|
16. Juli 2025 | 2.7.2 | - | - | 2.8.0-alpha01 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Room hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Zu den Abhängigkeiten für Room gehören Room-Migrationen testen und Room RxJava.
Fügen Sie der Datei build.gradle
für Ihre App oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Kotlin
dependencies { val room_version = "2.7.2" implementation("androidx.room:room-runtime:$room_version") // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See Add the KSP plugin to your project ksp("androidx.room:room-compiler:$room_version") // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor("androidx.room:room-compiler:$room_version") // optional - Kotlin Extensions and Coroutines support for Room implementation("androidx.room:room-ktx:$room_version") // optional - RxJava2 support for Room implementation("androidx.room:room-rxjava2:$room_version") // optional - RxJava3 support for Room implementation("androidx.room:room-rxjava3:$room_version") // optional - Guava support for Room, including Optional and ListenableFuture implementation("androidx.room:room-guava:$room_version") // optional - Test helpers testImplementation("androidx.room:room-testing:$room_version") // optional - Paging 3 Integration implementation("androidx.room:room-paging:$room_version") }
Groovy
dependencies { def room_version = "2.7.2" implementation "androidx.room:room-runtime:$room_version" // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See KSP Quickstart to add KSP to your build ksp "androidx.room:room-compiler:$room_version" // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor "androidx.room:room-compiler:$room_version" // optional - RxJava2 support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - RxJava3 support for Room implementation "androidx.room:room-rxjava3:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" // optional - Paging 3 Integration implementation "androidx.room:room-paging:$room_version" }
Informationen zur Verwendung des KAPT-Plug-ins finden Sie in der KAPT-Dokumentation.
Informationen zur Verwendung des KSP-Plug-ins finden Sie in der KSP-Schnellstartdokumentation.
Informationen zur Verwendung von Kotlin-Erweiterungen finden Sie in der KTX-Dokumentation.
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Optional können Sie für Nicht-Android-Bibliotheken (d.h. Gradle-Module nur für Java oder Kotlin) von androidx.room:room-common
abhängig sein, um Room-Annotationen zu verwenden.
Compileroptionen konfigurieren
Room bietet die folgenden Optionen für die Annotationsverarbeitung.
room.schemaLocation |
directory
Ermöglicht den Export von Datenbankschemas in JSON-Dateien im angegebenen Verzeichnis. Weitere Informationen finden Sie unter Room-Migrationen. |
room.incremental |
boolean
Aktiviert den inkrementellen Annotationsprozessor von Gradle. Der Standardwert ist true .
|
room.generateKotlin |
boolean
Kotlin-Quelldateien anstelle von Java generieren. Erfordert KSP. Der Standardwert ist ab Version 2.7.0 true .
Weitere Informationen finden Sie in den Versionshinweisen zu Version 2.6.0, als die Funktion eingeführt wurde.
|
Room-Gradle-Plug-in verwenden
Ab Room-Version 2.6.0 können Sie das Room-Gradle-Plug-in verwenden, um Optionen für den Room-Compiler zu konfigurieren. Das Plug-in konfiguriert das Projekt so, dass generierte Schemas (die eine Ausgabe der Kompilierungsaufgaben sind und für automatische Migrationen verwendet werden) korrekt konfiguriert sind, um reproduzierbare und cachefähige Builds zu ermöglichen.
Wenn Sie das Plug-in hinzufügen möchten, definieren Sie es und seine Version in der Gradle-Build-Datei der obersten Ebene.
Groovy
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
Wenden Sie das Plug-in in der Gradle-Build-Datei auf Modulebene an und verwenden Sie die Erweiterung room
.
Groovy
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
Die Festlegung von schemaDirectory
ist erforderlich, wenn das Room-Gradle-Plug-in verwendet wird. Dadurch werden der Room-Compiler und die verschiedenen Kompilierungsaufgaben und ihre Backends (javac, KAPT, KSP) so konfiguriert, dass Schemadateien in Ordner mit dem jeweiligen Build-Variantennamen ausgegeben werden, z. B. schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Diese Dateien sollten in das Repository eingecheckt werden, damit sie für die Validierung und automatische Migrationen verwendet werden können.
Einige Optionen können nicht in allen Versionen des Room Gradle-Plug-ins konfiguriert werden, obwohl sie vom Room-Compiler unterstützt werden. In der folgenden Tabelle sind die einzelnen Optionen aufgeführt. Außerdem wird die Version des Room Gradle-Plug-ins angegeben, in der die Unterstützung für die Konfiguration dieser Option mit der Erweiterung room
hinzugefügt wurde. Wenn Ihre Version niedriger ist oder die Option noch nicht unterstützt wird, können Sie stattdessen Optionen für die Annotationsverarbeitung verwenden.
Option | Ab Version |
---|---|
room.schemaLocation (erforderlich) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
Annotation Processor-Optionen verwenden
Wenn Sie das Room Gradle-Plug-in nicht verwenden oder die gewünschte Option von Ihrer Version des Plug-ins nicht unterstützt wird, können Sie Room mit Optionen für den Annotationsprozessor konfigurieren, wie unter Build-Abhängigkeiten hinzufügen beschrieben. Wie Sie Annotationsoptionen angeben, hängt davon ab, ob Sie KSP oder KAPT für Room verwenden.
Groovy
// For KSP ksp { arg("option_name", "option_value") // other otions... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "option_name":"option_value", // other options... ] } } } }
Kotlin
// For KSP ksp { arg("option_name", "option_value") // other options... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "option_name" to "option_value", // other options... ) } } } }
Da room.schemaLocation
ein Verzeichnis und kein primitiver Typ ist, muss beim Hinzufügen dieser Option ein CommandLineArgumentsProvider
verwendet werden, damit Gradle dieses Verzeichnis bei der Durchführung von Aktualitätsprüfungen kennt.
Unter Room-Datenbank migrieren finden Sie eine vollständige Implementierung von CommandLineArgumentsProvider
, die den Schemaspeicherort angibt.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Lassen Sie es uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können für ein vorhandenes Problem abstimmen, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.
Version 2.8
Version 2.8.0-alpha01
16. Juli 2025
androidx.room:room-*:2.8.0-alpha01
wird veröffentlicht. Version 2.8.0-alpha01 enthält diese Commits.
Neue Funktionen
- Es wurde ein neues Artefakt
androidx.room:room-sqlite-wrapper
hinzugefügt, das APIs enthält, um einenSupportSQLiteDatabase
-Wrapper vonRoomDatabase
mit einer konfiguriertenSQLiteDriver
abzurufen. Verwenden Sie die neue ErweiterungsfunktionRoomDatabase.getSupportWrapper()
, um den Wrapper abzurufen. Dies ist ein Kompatibilitätsartefakt, um die Verwendung vonSupportSQLiteDatabase
, die normalerweise vonRoomDatabase.openHelper.writableDatabase
abgerufen wird, auch dann beizubehalten, wenn die Room-Datenbank mit einemSQLiteDriver
konfiguriert ist. Dieser Wrapper ist nützlich für die inkrementelle Migration von Codebases, dieSQLiteDriver
einführen möchten, aber dieSupportSQLite
-APIs in großem Umfang verwenden und trotzdem die Vorteile vonBundledSQLiteDriver
nutzen möchten. (Icf6ac) - KMP-Ziele für Watch OS und TV OS hinzufügen (I228f6, b/394238801)
Fehlerkorrekturen
- Ein Deadlock wurde behoben, der gelegentlich bei der Verwendung von ausgesetzten Transaktionen und dem
AndroidSQLiteDriver
auftreten konnte. (b/415006268)
Version 2.7
Version 2.7.2
18. Juni 2025
androidx.room:room-*:2.7.2
wird veröffentlicht. Version 2.7.2 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Annotationswerte beim Verarbeiten nativer Quellen mit KSP fälschlicherweise gelesen wurden und manchmal Schemaexporte fehlten. (b/416549580)
- Ein Fehler wurde behoben, bei dem führende Kommentare in einer SQL-Anweisung dazu führten, dass Anweisungen so ausgeführt wurden, als wären sie keine Leseabfragen. (b/413061402)
- Ein Problem wurde behoben, bei dem das Gradle-Plugin von Room aufgrund eines leeren Schemas nicht konfiguriert werden konnte. (b/417823384)
- Es wird kein
SQLiteException
mehr ausgelöst, wenn das Herstellen einer Verbindung zu lange dauert. Stattdessen wird eine Log-Nachricht von der Bibliothek gesendet. Durch das Protokollieren anstelle des Auslösens von Ausnahmen wird verhindert, dass iOS Looper unterbricht. Dadurch wird das Zeitlimit, das beim Abrufen der Verbindung in der Kotlin-Coroutine auftritt, von Room falsch interpretiert. So wird verhindert, dass die Ausnahme ausgelöst wird, wenn eine iOS-App in den Hintergrund verschoben und später während eines Datenbankvorgangs fortgesetzt wird. (b/422448815)
Version 2.7.1
23. April 2025
androidx.room:room-*:2.7.1
wird veröffentlicht. Version 2.7.1 enthält diese Commits.
Fehlerkorrekturen
IndexOutOfBoundsException
-Fehler bei der Validierung des bereitgestellten Typkonverters beheben. (b/409804755).- Unterstützung von
RoomDatabase.runInTransaction()
, wenn einSQLiteDriver
mit Room konfiguriert ist. (b/408364828).
Version 2.7.0
9. April 2025
androidx.room:room-*:2.7.0
wird veröffentlicht. Version 2.7.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.6.0
- Unterstützung von Kotlin Multiplatform (KMP):In dieser Version wurde Room als KMP-Bibliothek (Kotlin Multiplatform) neu strukturiert. Derzeit werden die Plattformen Android, iOS, JVM (Desktop), natives Mac und natives Linux unterstützt. Weitere Informationen zum Einstieg in Room KMP finden Sie in der offiziellen Room KMP-Dokumentation. Im Rahmen der KMP-Unterstützung kann Room auch mit einem
SQLiteDriver
konfiguriert werden. Informationen zur Migration einer vorhandenen App zu den Driver APIs und zu Room KMP finden Sie in der Migrationsdokumentation. - Die Kotlin-Codegenerierung für KSP ist standardmäßig aktiviert, wenn die Verarbeitung über KSP erfolgt. Bei Projekten, die nur KAPT oder Java verwenden, generiert Room weiterhin Java-Quellen.
- Kotlin 2.0 und KSP2:Room ist jetzt auf die Kotlin-Sprache 2.0 ausgerichtet und erfordert, dass Projekte auch mit Kotlin 2.0 und einer entsprechenden oder höheren Sprachversion kompiliert werden. Außerdem wird KSP2 unterstützt. Das ist empfehlenswert, wenn Sie Room mit Kotlin 2.0 oder höher verwenden.
Version 2.7.0-rc03
26. März 2025
androidx.room:room-*:2.7.0-rc03
wird veröffentlicht. Version 2.7.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Es wird nicht mehr
InterruptedException
ausgegeben, wenn ein Thread während der Ausführung von Room-Blockierungs-APIs unterbrochen wird, einschließlich blockierender DAO-Funktionen (b/400584611). - Der Room-Verbindungspool wurde neu implementiert, um
SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection.
und ähnliche Probleme (b/380088809) zu beheben.
Version 2.7.0-rc02
12. März 2025
androidx.room:room-*:2.7.0-rc02
wird veröffentlicht. Version 2.7.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Beheben Sie, dass bei automatischen Migrationen eine neue Spalte in einer FTS-Tabelle falsch behandelt wird. (b/348227770, Ic53f3)
- Behebt einen Absturz des Raum-Compilers aufgrund eines
NullPointerException
bei der Verarbeitung von Nicht-JVM-Quellen über KSP. (b/396607230, I693c9) - Ein Problem wurde behoben, bei dem Tabellen am Ende der Verwendung der Writer-Verbindung nicht ungültig gemacht wurden. (b/340606803, I73ef6)
Version 2.7.0-rc01
26. Februar 2025
androidx.room:room-*:2.7.0-rc01
wird veröffentlicht. Version 2.7.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem in Room die
busy_timeout
in der ersten Datenbankverbindung nicht festgelegt wurde, was zuSQLException: Error code: 5, message: database is locked
-Problemen führte (I93208, b/380088809). - Ein Problem im Room-Compiler wurde behoben, das dazu führte, dass der KSP-Prozessor beim Verarbeiten nativer Quellsets (z. B. iOS) unter Kotlin 2.1.x und KSP1 abstürzte (I883b8, b/396607230).
Version 2.7.0-beta01
12. Februar 2025
androidx.room:room-*:2.7.0-beta01
wird veröffentlicht. Version 2.7.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem
RoomDatabase.inTransaction()
eine geschlossene Datenbank geöffnet hat, obwohl dies nicht der Fall sein sollte. Außerdem sollte schnell „false“ zurückgegeben werden, wenn die Datenbank geschlossen ist (b/325432967). - Ein Absturz (
IllegalArgumentException: not a valid name
) im Room-Compiler wurde behoben, der beim Verarbeiten von DAO-Funktionen mit Kotlin-Inline-/Wertklassen (b/388299754) auftrat. - Fügen Sie dem JVM-Artefakt von
room-runtime
Proguard-Regeln hinzu, damit der Standardkonstruktor der generierten Datenbankimplementierung nicht entfernt wird, da er von der Standardinitialisierung von Room verwendet wird, bei der Reflection zum Einsatz kommt (b/392657750).
Version 2.7.0-alpha13
29. Januar 2025
androidx.room:room-*:2.7.0-alpha13
wird veröffentlicht. Version 2.7.0-alpha13 enthält diese Commits.
API-Änderungen
- Room ist jetzt auf Kotlin 2.0 ausgerichtet. Projekte müssen daher auch mit Kotlin 2.0 und einer entsprechenden oder höheren Sprachversion kompiliert werden. (I8efb0, b/315461431, b/384600605)
Fehlerkorrekturen
- Ein Problem im Room KMP-Datenbank-Builder wurde behoben, das auftrat, wenn in Android anstelle eines Pfads ein einfacher Name verwendet wurde und der aufgelöste Pfad der Datenbankdatei sich nicht im Datenverzeichnis der App befand. (I83315, b/377830104)
- Problem mit dem Room Gradle-Plug-in behoben, bei dem die Konfiguration der Schemaeingaben und -ausgabe in Android-Projekten zu einem Problem geführt hat:
property 'inputDirectory' is final and cannot be changed any further.
(1dbb4c, b/376071291) - Unterstützung für KSP2 im Room-Gradle-Plug-in hinzugefügt. Dadurch wird ein Problem behoben, bei dem das Schemabeziehnis nicht richtig vom Plug-in eingerichtet wurde. (Iec3c4, b/379159770)
Externe Beiträge
- Ein Problem mit der
Room
-Paginierung wurde behoben, das zu UI-Sprüngen geführt hat, wenn der erste Schlüssel zum Aktualisieren zu nah am Ende der Liste lag. Vielen Dank, Eva! (I2abbe, b/389729367)
Version 2.7.0-alpha12
11. Dezember 2024
androidx.room:room-*:2.7.0-alpha12
wird veröffentlicht. Version 2.7.0-alpha12 enthält diese Commits.
API-Änderungen
- Fügen Sie die experimentelle API
RoomDatabase.Builder.setInMemoryTrackingMode()
hinzu, um zu konfigurieren, ob Room eine In-Memory-Tabelle für das Invalidation-Tracking verwenden soll. (I2a9b2, b/185414040)
Fehlerkorrekturen
- Bei destruktiven Migrationen werden Ansichten jetzt gelöscht, damit sie neu erstellt werden. Das Verhalten, wenn
allowDestructiveMigrationForAllTables
aktiviert ist (KMP-Standard), wird an das vorhandene Verhalten angepasst, wenn es deaktiviert ist. (0a3e83, b/381518941)
Version 2.7.0-alpha11
30. Oktober 2024
androidx.room:room-*:2.7.0-alpha11
wird veröffentlicht. Version 2.7.0-alpha11 enthält diese Commits.
API-Änderungen
- Die neu hinzugefügte
convertRows()
-Methodensignatur ist jetzt eine suspend-Funktion, die einRawRoomQuery
für das Paging von Räumen empfängt. (Ie57b5, b/369136627)
Fehlerkorrekturen
- Das Problem beim Paging in Räumen wurde behoben. Bei der Verwendung von
@Relation
in Verbindung mitPagingSource
wurde ungültiger Code generiert.
Version 2.7.0-alpha10
16. Oktober 2024
androidx.room:room-*:2.7.0-alpha10
wird veröffentlicht. Version 2.7.0-alpha10 enthält diese Commits.
API-Änderungen
- Erstellen Sie eine interne
ByteArrayWrapper
-Klasse, um Beziehungen mitByteBuffer
auf Nicht-Android- und Nicht-JVM-Plattformen zu unterstützen. (I75543, b/367205685) - Fügen Sie
SQLiteStatement.getColumnType()
zusammen mit den verschiedenenSQLITE_DATA_*
-Ergebniskonstanten hinzu, um den Datentyp einer Spalte abzurufen. (I1985c, b/369636251)
Version 2.7.0-alpha09
2. Oktober 2024
androidx.room:room-*:2.7.0-alpha09
wird veröffentlicht. Version 2.7.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem mit der KMP-Implementierung von
room-paging
wurde behoben, das zu einemError code: 8, message: attempt to write a readonly database
geführt hat, weil eine Schreibtransaktion über eine Leseverbindung gestartet wurde. (b/368380988)
Version 2.7.0-alpha08
18. September 2024
androidx.room:room-*:2.7.0-alpha08
wird veröffentlicht. Version 2.7.0-alpha08 enthält diese Commits.
Neue Funktionen
- Die
room-paging
-Artefakte wurden migriert, um KMP-kompatibel zu sein. (Ib8756, b/339934824) - Die API
invalidationTrackerFlow()
wurde als First-Party-APIInvalidationTracker.createFlow()
vereinheitlicht und ist jetzt für Nicht-Android-Quellsets in KMP-Projekten verfügbar. (I1fbfa, (I8fb29), b/329291639, b/329315924)
API-Änderungen
- Alle Warnungen und Fehlermeldungen in Room, in denen das Wort
Cursor
verwendet wird, wurden entfernt oder ersetzt, daCursor
in der KMP-Version von Room kein geeigneter allgemeiner Begriff mehr ist. (Id8cd9, b/334087492)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Room KMP versucht hat, Code mit
UUID
für Nicht-JVM-Plattformen auszugeben. (b/362994709) - Ein Problem mit dem Room Gradle-Plug-in wurde behoben, das bei Verwendung in einem KMP-Projekt mit Compose Multiplatform einen Fehler wie „Cannot change attributes of configuration … after it has been locked for mutation“ (Attribute der Konfiguration … können nicht geändert werden, nachdem sie für die Mutation gesperrt wurde) verursachte. (b/343408758)
Version 2.7.0-alpha07
21. August 2024
androidx.room:room-*:2.7.0-alpha07
wird veröffentlicht. Version 2.7.0-alpha07 enthält diese Commits.
Neue Funktionen
- Das Room Gradle-Plug-in fügt die exportierten Schemas jetzt automatisch den Ressourcenquellen für Android-Instrumentierungstests hinzu, damit sie von
MigrationTestHelper
verwendet werden können.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem der generierte „actual“-Wert von
RoomDatabaseConstructor
den „actual“-Modifikator in der Funktioninitialize
nicht enthielt, wenn diese Funktion auch in der „expect“-Deklaration überschrieben wurde. (359631627) - Ein Problem wurde behoben, bei dem der generierte „actual“-Wert von
RoomDatabaseConstructor
nicht mit der Sichtbarkeit der „expect“-Deklaration übereinstimmte. (358138953)
Version 2.7.0-alpha06
7. August 2024
androidx.room:room-*:2.7.0-alpha06
wird veröffentlicht. Version 2.7.0-alpha06 enthält diese Commits.
API-Änderungen
- Ändern Sie die Einrichtung der Instanziierung für ein
RoomDatabase
in einem KMP-Projekt.
Aufgrund des Kotlin 2.0-Kompilierungsmodells ist die Strategie, auf eine zu generierende Funktion mit dem Namen instantiateImpl()
zu verweisen, nicht mehr praktikabel. Es werden zwei neue APIs eingeführt: @ConstructedBy
und RoomDatabaseConstructor
. Sie ersetzen die instantiateImpl()
-Strategie. Die neue Strategie sieht so aus:
Definieren Sie ein „expect“-Objekt, das
RoomDatabaseConstructor
implementiert.expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
Objekt mit der
@Database
-Deklaration verknüpfen mit@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
Neue Datenbankinstanz erstellen, ohne ein Factory-Argument zu übergeben
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Fehlerkorrekturen für b/316978491, b/338446862 und b/342905180
- Unterstützung für
@RawQuery
in Room KMP durch Hinzufügen einer neuen API namensRoomRawQuery
, die in Bezug auf die Aufnahme des Roh-SQL-Strings und einer Funktion zum Binden von Argumenten in eine Anweisung ähnlich wieSupportSQLiteQuery
ist.@RawQuery
-annotierte Funktionen können jetztRoomRawQuery
als einzigen Parameter akzeptieren. (Iea844, b/330586815) - Fügen Sie eine Überladung von
setQueryCallback()
hinzu, die einCoroutineContext
akzeptiert. (Id66ff, b/309996304) - Unterstützung für
linuxArm64
Kotlin Multiplatform-Ziele hinzugefügt (I139d3, b/338268719)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Room fälschlicherweise einen Aufruf von
recursiveFetchArrayMap
in Nicht-Android-Zielen generierte. (710c36, b/352482325) - Ein Problem wurde behoben, bei dem Room in einem KMP-Projekt manchmal eine Ausnahme für „Zeitüberschreitung beim Verbindungsversuch“ auslöste. (fa72d0, b/347737870)
- Ein Problem bei automatischen Migrationen wurde behoben, bei dem zu früh nach Fremdschlüsseln gesucht wurde, bevor andere Tabellen ihre Schemas an die neuen Fremdschlüssel angepasst hatten. (7672c0, b/352085724)
Version 2.7.0-alpha05
10. Juli 2024
androidx.room:room-*:2.7.0-alpha05
wird veröffentlicht. Version 2.7.0-alpha05 enthält diese Commits.
API-Änderungen
SQLiteKt
wurde inSQLite
undBundledSQLiteKt
inBundledSQLite
umbenannt. (I8b501)
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem eine
RoomDatabase
bei Verwendung derAndroidSQLiteDriver
in einer Endlosschleife hängen blieb oder ein Verbindungszeitlimit-Fehler auftrat.
Version 2.7.0-alpha04
12. Juni 2024
androidx.room:room-*:2.7.0-alpha04
wird veröffentlicht. Version 2.7.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem der Annotationsprozessor von Room inkompatiblen KMP-Code generierte, wenn in einem DAO ein Rückgabetyp mit mehreren Maps definiert wurde. (b/340983093)
- Ein Problem wurde behoben, bei dem Room die generierte Datenbankimplementierung nicht finden konnte, wenn die mit
@Database
annotierte Klasse kein Paket hatte. (b/342097292) - Ein Problem wurde behoben, bei dem das Aktivieren von automatischem Schließen und Multi-Instanz-Invalidierung manchmal zu einem
ConcurrentModificationException
führte, wenn die Datenbank aufgrund von Inaktivität automatisch geschlossen wurde.
Version 2.7.0-alpha03
29. Mai 2024
androidx.room:room-*:2.7.0-alpha03
wird veröffentlicht. Version 2.7.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Verschiedene Probleme im Zusammenhang mit Kotlin 2.0 und KSP 2.0 wurden behoben. Die Unterstützung von Kotlin 2.0 mit KSP 2 ist noch nicht vollständig. Das Team arbeitet an den verschiedenen APIs und Verhaltensänderungen im neuen Compiler. (b/314151707)
Version 2.7.0-alpha02
14. Mai 2024
androidx.room:room-*:2.7.0-alpha02
wird veröffentlicht. Version 2.7.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
- Verschiedene KSP-Probleme behoben.
Version 2.7.0-alpha01
1. Mai 2024
androidx.room:room-*:2.7.0-alpha01
wird veröffentlicht. Version 2.7.0-alpha01 enthält diese Commits.
Neue Funktionen
- Unterstützung für Kotlin Multiplatform (KMP): In dieser Version wurde Room so umgestaltet, dass es eine KMP-Bibliothek (Kotlin Multiplatform) ist. Es gibt zwar noch einiges zu tun, aber mit dieser Version wird eine neue Version von Room eingeführt, in der die meisten Funktionen plattformübergreifend sind. Derzeit werden die Plattformen Android, iOS, JVM (Desktop), natives Mac und natives Linux unterstützt. Alle fehlenden Funktionen auf den neu unterstützten Plattformen werden in zukünftigen Room-Versionen ergänzt.
Weitere Informationen zum Einstieg in Room KMP finden Sie in der offiziellen Room KMP-Dokumentation.
- Die Kotlin-Codegenerierung für KSP ist standardmäßig aktiviert, wenn die Verarbeitung über KSP erfolgt. Bei Projekten, die nur KAPT oder Java verwenden, generiert Room weiterhin Java-Quellen.
API-Änderungen
- Es wurde eine Überladung von
Room.databaseBuilder()
hinzugefügt, die einen Lambda-Parameter akzeptiert, der mit einer von Room generierten Funktion verwendet werden soll, um die Verwendung von Reflection beim Instanziieren der generiertenRoomDatabase
-Implementierung zu vermeiden. Beispiel:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Dem Builder wurde eine API zum Konfigurieren eines Raums mit einem
CoroutineContext
hinzugefügt:RoomDatabase.Builder.setQueryCoroutineContext
. Beachten Sie, dass einRoomDatabase
entweder mit Executors mitsetQueryExecutor
oder mit einem Coroutine-Kontext konfiguriert werden kann, aber nicht mit beidem. - Es wurde eine API zum Konfigurieren von Room mit einem
SQLite
-Treiber hinzugefügt:RoomDatabase.Builder.setDriver()
. Weitere Informationen zurSQLite
Driver API finden Sie in der SQLite KMP-Dokumentation. - Es wurden APIs für den Zugriff auf die zugrunde liegende
SQLiteConnection
über Treiber-APIs hinzugefügt:RoomDatabase.useReaderConnection
undRoomDatabase.useWriterConnection
. - Für verschiedene Room-bezogene Callbacks gibt es jetzt eine überladene Version, die
SQLiteConnection
anstelle vonSupportSQLiteDatabase
empfängt. Diese sollen bei der Migration zu einem KMP-Projekt überschrieben werden. Weitere Informationen zur Migration von Room-Verwendungen in einer Android-App zu einem gemeinsamen KMP-Modul finden Sie im Migrationsleitfaden. Die Callbacks sind:Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- Das KTX-Artefakt
androidx.room:room-ktx
wurde mit allen zugehörigen APIs inandroidx.room:room-runtime
zusammengeführt. Das Artefakt ist jetzt leer. Bitte entfernen Sie es aus Ihrer Abhängigkeitsliste.
Version 2.6
Version 2.6.1
29. November 2023
androidx.room:room-*:2.6.1
wird veröffentlicht. Version 2.6.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem im generierten Code wurde behoben, bei dem der Standardwert für Double-Spalten in
EntityCursorConverter
auf 0 anstelle von 0,0 festgelegt wurde. Eine mögliche Korrektur für einen ähnlichen Grenzfall für Spalten vom Typ „Float“ wurde ebenfalls aufgenommen. (Id75f5, b/304584179) - Ausnahmen, die von
PagingSource
-Ladevorgängen ausgelöst werden, werden jetzt alsLoadStateUpdate
vonLoadResult.Error
mit dem Throwable weitergegeben. Dieser Fehlerstatus ist überPagingDataAdapter.loadStateFlow(Views)
oderLazyPagingItems.loadState(Compose)
zu sehen. Beachten Sie, dass dies eine Verhaltensänderung darstellt. In der Vergangenheit wurden Ladefehler als Ausnahme gemeldet, die von der DAO-Methode ausgelöst wurde, die den Ladevorgang ausgelöst hat. (I93887, b/302708983)
Version 2.6.0
18. Oktober 2023
androidx.room:room-*:2.6.0
wird veröffentlicht. Version 2.6.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.5.0
- Die Option zum Aktivieren der Kotlin-Codegenerierung („Kotlin CodeGen“) ist jetzt in Room KSP verfügbar. (4297ec0). Wenn Sie Kotlin CodeGen in Room aktivieren möchten, fügen Sie den Optionsnamen
room.generateKotlin
zu den Prozessoroptionen für KSP hinzu. Weitere Informationen zum Übergeben von Prozessoroptionen für KSP finden Sie in der KSP-Dokumentation.
Hinweis:Bei der Verwendung von Kotlin CodeGen sind zusätzliche Einschränkungen zu beachten. Abstrakte Properties als DAO-Getter oder DAO-Abfragen in Kotlin CodeGen sind nicht zulässig. Stattdessen müssen sie als Funktionen neu geschrieben werden, um den falschen Eindruck zu vermeiden, dass der Property-Wert unveränderlich ist und ein festes gespeichertes Ergebnis hat. Eine weitere Einschränkung ist, dass in Room für Kotlin CodeGen keine Nullable-Sammlungsrückgabetypen mehr zulässig sind.
Warnung:Bei Verwendung von Kotlin CodeGen sind Ihre Projekte möglicherweise strenger in Bezug auf die Nullable-Eigenschaft. In Kotlin CodeGen ist die Null-Zulässigkeit von Typargumenten wichtig, während sie in Java größtenteils ignoriert wird. Angenommen, Sie haben den Rückgabetyp „Flow<foo\>“ und die Tabelle ist leer. In Java CodeGen führt dies zu keinen Problemen, in Kotlin CodeGen erhalten Sie jedoch einen Fehler. Um dies zu vermeiden, müssen Sie `Flow<foo?\>` verwenden, sofern ein Nullwert ausgegeben wird. </foo?\></foo\>
- Das neue Artefakt für das Room-Gradle-Plugin wurde Room mit der ID
androidx.room
hinzugefügt. Damit werden verschiedene bestehende Probleme in Room behoben, die sich auf die Ein- und Ausgaben von Schemas über Gradle-Annotationsprozessoroptionen beziehen. Weitere Informationen finden Sie in den Versionshinweisen zu Room Version 2.6.0-alpha02. - Wertklassen in Room-Entitäten werden jetzt für KSP unterstützt. (4194095)
- Verschachtelte Map-Rückgabetypen in DAO-Funktionen werden jetzt in Room unterstützt. (I13f48, 203008711)
Version 2.6.0-rc01
20. September 2023
androidx.room:room-*:2.6.0-rc01
wird veröffentlicht. Version 2.6.0-rc01 enthält diese Commits.
Version 2.6.0-beta01
23. August 2023
androidx.room:room-*:2.6.0-beta01
wird veröffentlicht. Version 2.6.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Behandlung des Sonderfalls
SQLite
-Ausnahme während des Upsert-Vorgangs: Wenn die2067 SQLITE_CONSTRAINT_UNIQUE
-Ausnahme während eines Upsert-Vorgangs ausgelöst wird, sollte ein Update durchgeführt werden. (If2849, b/243039555)
Version 2.6.0-alpha03
9. August 2023
androidx.room:room-*:2.6.0-alpha03
wird veröffentlicht. Version 2.6.0-alpha03 enthält diese Commits.
Neue Funktionen
- Verschachtelte Map-Rückgabetypen in DAO-Funktionen werden jetzt in Room unterstützt. (I13f48, 203008711)
API-Änderungen
- Es wurde eine neue Typanmerkung namens
@MapColumn
erstellt, um@MapInfo
zu ersetzen, die jetzt eingestellt ist. Für jeden Spaltennamen (keyColumnName
,valueColumnName
oder beide), der in einer@MapInfo
-Annotation angegeben ist, müssen Sie eine@MapColumn
-Annotation nur mitcolumnName
deklarieren und die Annotation für das spezifische Typargument verwenden, auf das verwiesen wird (der Schlüssel oder Wert der Map) im Rückgabetyp der DAO-Funktion. Das liegt daran, dass die Annotation@MapColumn
direkt für das Typargument innerhalb des Rückgabetyps einer DAO-Funktion verwendet wird, anstatt für die Funktion selbst wie@MapInfo
. Weitere Informationen finden Sie in der@MapColumn
-Dokumentation. (Ib0305, b/203008711) - Aktualisierte API-Dateien zum Annotieren der Kompatibilitätsunterdrückung (I8e87a, b/287516207)
- Die Room Gradle-Plugin-APIs wurden aktualisiert, sodass nicht immer Konfigurationen pro Variante erforderlich sind. Das bedeutet, dass das Plug-in einen globalen Speicherort für alle Varianten akzeptieren kann, ohne dass mehrere Verzeichnisse erstellt werden müssen. Das ermöglicht reibungslose Migrationen. Es ist aber auch flexibel genug, um Schemas für Produktvarianten oder Build-Typen manuell zu konfigurieren und gleichzeitig die Vorteile des Plug-ins (reproduzierbare und cachefähige Builds) beizubehalten. (I09d6f, b/278266663)
Fehlerkorrekturen
- Eine potenzielle Sicherheitslücke durch Speicherlecks in
QueryInterceptorStatement
wurde behoben. (I193d1) - Es wurde ein Fehler im Verhalten der Funktion
QueryInterceptorDatabase execSQL()
behoben. (Iefdc8)
Version 2.6.0-alpha02
21. Juni 2023
androidx.room:room-*:2.6.0-alpha02
wird veröffentlicht. Version 2.6.0-alpha02 enthält diese Commits.
Room-Gradle-Plug-in
Diese neue Version enthält ein neues Artefakt für das Room Gradle-Plug-in mit der ID androidx.room
, das verschiedene bestehende Probleme in Room behebt, die sich auf die Ein- und Ausgaben von Schemas über Gradle-Annotationsprozessoroptionen beziehen. Das Room Gradle-Plug-in konfiguriert das Projekt so, dass generierte Schemas, die für automatische Migrationen verwendet werden und die Ausgabe der Kompilierungsaufgaben sind, korrekt konfiguriert sind, um reproduzierbare und cachefähige Builds zu ermöglichen. Das Plug-in bietet eine DSL zum Konfigurieren des Speicherorts des Basisschemas:
room {
schemaDirectory("$projectDir/schemas/")
}
Das Plug-in konfiguriert dann den Room-Compiler und die verschiedenen Kompilierungsaufgaben sowie die Back-Ends (javac, KAPT, KSP), um Schemadateien in Ordner mit dem entsprechenden Build-Variantennamen auszugeben, z.B. schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Wie gewohnt werden diese Dateien im Repository eingecheckt, um für die Validierung und automatische Migrationen verwendet zu werden. Bei der Migration zur Verwendung des Plug-ins anstelle der Optionen des Annotationsprozessors müssen die vorhandenen Schemadateien in die vom Plug-in erstellten generierten Flavor-Verzeichnisse kopiert werden. Dies ist ein einmaliger Migrationsvorgang, der manuell durchgeführt werden muss. Die Schemadokumentation auf developers.android.com wird in Zukunft aktualisiert, sobald das Feedback berücksichtigt wurde und das Plug-in die stabile Version erreicht hat. Probieren Sie es also aus.
API-Änderungen
RoomDatabase.QueryCallback
wurde als funktionales Interface definiert, um die SAM-Konvertierung zu ermöglichen. (Iab8ea, b/281008549)
Fehlerkorrekturen
- Behebung eines Problems, das beim Instanziieren der Datenbank in Robolectric nach der Migration von Room-Quellen von Java zu Kotlin auftritt. (Ic053c, b/274924903)
Version 2.6.0-alpha01
22. März 2023
androidx.room:room-*:2.6.0-alpha01
wird veröffentlicht. Version 2.6.0-alpha01 enthält diese Commits.
Neue Funktionen
- Unterstützung von Wertklassen in Room für KSP. Room kann jetzt Wertklassen in Entitäten unterstützen. (4194095)
- Die Kotlin-Codegenerierung(oder „Kotlin CodeGen“) kann jetzt in Room aktiviert werden (4297ec0). Wenn Sie Kotlin CodeGen in Room aktivieren möchten, fügen Sie den Optionsnamen
room.generateKotlin
zu den Prozessoroptionen für KSP hinzu. Weitere Informationen zum Übergeben von Prozessoroptionen für KSP finden Sie in der KSP-Dokumentation.
Hinweis:Bei der Verwendung von Kotlin CodeGen sind zusätzliche Einschränkungen zu beachten. Abstrakte Properties als DAO-Getter oder DAO-Abfragen in Kotlin CodeGen sind nicht zulässig. Stattdessen müssen sie als Funktionen neu geschrieben werden, um den falschen Eindruck zu vermeiden, dass der Property-Wert unveränderlich ist und ein festes gespeichertes Ergebnis hat. Eine weitere Einschränkung ist, dass in Room für Kotlin CodeGen keine Nullable-Sammlungsrückgabetypen mehr zulässig sind.
Warnung:Bei Verwendung von Kotlin CodeGen sind Ihre Projekte möglicherweise strenger in Bezug auf die Nullable-Eigenschaft. In Kotlin CodeGen ist die Null-Zulässigkeit von Typargumenten wichtig, während sie in Java größtenteils ignoriert wird. Angenommen, Sie haben den Rückgabetyp „Flow<foo\>“ und die Tabelle ist leer. In Java CodeGen führt dies zu keinen Problemen, in Kotlin CodeGen erhalten Sie jedoch einen Fehler. Um dies zu vermeiden, müssen Sie `Flow<foo?\>` verwenden, sofern ein Nullwert ausgegeben wird. </foo?\></foo\>
API-Änderungen
- Schutz vor sinnloser Verwendung von Nullable-Sammlungen in DAO-Methodenrückgabetypen. (I777dc, b/253271782, b/259426907)
- Eine API zum Erstellen eines Flows wurde hinzugefügt, der Änderungen am Invalidation Tracker ausgibt. Die API ist nützlich, um Streams zu erstellen, die auf Datenbankänderungen reagieren müssen. (I8c790, b/252899305)
Fehlerkorrekturen
- Abstrakte Eigenschaften als DAO-Getter oder DAO-Abfragen im Kotlin-Codegen sind nicht zulässig. Stattdessen sollten sie als Funktionen neu geschrieben werden, um den falschen Eindruck zu vermeiden, dass der Eigenschaftswert unveränderlich ist und ein festes gespeichertes Ergebnis hat. (If6a13, b/127483380, b/257967987)
Version 2.5.2
Version 2.5.2
21. Juni 2023
androidx.room:room-*:2.5.2
wird veröffentlicht. Version 2.5.2 enthält diese Commits.
Fehlerkorrekturen
- Behebt ein Inkompatibilitätsproblem mit kotlinx-metadata-jvm. (386d5c)
- Ein Problem wurde behoben, das dazu führte, dass Room bei Verwendung in einem Robolectric-Test einen Fehler ausgab. (f79bea, b/274924903)
Version 2.5.1
Version 2.5.1
22. März 2023
androidx.room:room-*:2.5.1
wird veröffentlicht. Version 2.5.1 enthält diese Commits.
Fehlerkorrekturen
- Vermeiden Sie es, das übergeordnete Verzeichnis der Datenbank in
FrameworkSQLiteHelper
zu prüfen, wenn die Datenbank bereits geöffnet ist. (5de86b8) - Verwenden Sie eine
isOpenInternal
-Prüfung, um zu prüfen, ob die Datenbank bereits geöffnet ist. (e91fb35) - Der Reentrant-Fall in
acquireTransactionThread()
vonRoom
wird jetzt besser verarbeitet. (219f98b). Während einer unterbrechenden Transaktion verwendet Room einen Thread aus dem Transaktions-Executor, startet darin eine Ereignisschleife und sendet unterbrechende Datenbankvorgänge an ihn, sodass sie alle in der Transaktions-Coroutine gekapselt sind. Normalerweise wird erwartet, dass der Transaktions-Thread sich von dem Thread unterscheidet, der die Transaktion startet. In einigen Fällen sind sie jedoch identisch. Um solche reentranten Fälle zu verarbeiten, wurdewithTransaction()
umgestaltet. Es wird nicht mehr auf einen Steuerungsjob angewiesen, sondern führt den unterbrechenden Transaktionsblock im Transaktions-Thread ausrunBlocking
aus.
Version 2.5.0
Version 2.5.0
22. Februar 2023
androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
und androidx.room:room-paging-rxjava3:2.5.0
sind veröffentlicht. Version 2.5.0 enthält diese Commits.
Version 2.5.0
11. Januar 2023
androidx.room:room-*:2.5.0
wird veröffentlicht. Version 2.5.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.4.0
- Alle
room-runtime
-Quellen wurden von Java in Kotlin konvertiert. Wenn Ihr Code in Kotlin geschrieben ist, können aufgrund der Bibliothekskonvertierung in Kotlin Inkompatibilitätsprobleme auftreten. Eine bekannte inkompatible Änderung ist beispielsweise, dass Sie inInvalidationTracker
jetztonInvalidate()
inObserver
deklarieren müssen, um einen Parameter vom TypSet
und nichtMutableSet
zu haben. Außerdem wurden bestimmte Getter-Methoden in Properties umgewandelt, für die in Kotlin-Dateien die Property-Zugriffssyntax erforderlich ist. Bitte melden Sie einen Fehler, wenn es erhebliche Inkompatibilitäten gibt. - Es wurde eine neue Shortcut-Anmerkung,
@Upsert
, hinzugefügt, mit der versucht wird, eine Entität einzufügen, wenn kein Eindeutigkeitskonflikt vorliegt, oder die Entität zu aktualisieren, wenn ein Konflikt vorliegt. (I7aaab, b/241964353) - Es wurden neue Artefakte für das Paging von Räumen hinzugefügt:
room-paging-rxjava2
,room-paging-rxjava3
undroom-paging-guava
. - Es wurden APIs zum Bereitstellen von Schlüssel- und Werttabellennamen zur Mehrdeutigkeitsauflösung in
@MapInfo
hinzugefügt (Icc4b5).
Version 2.5.0-rc01
7. Dezember 2022
androidx.room:room-*:2.5.0-rc01
wird veröffentlicht. Version 2.5.0-rc01 enthält diese Commits.
- Dieser Release ist mit
2.5.0-beta02
identisch.
Version 2.5.0-beta02
9. November 2022
androidx.room:room-*:2.5.0-beta02
wird veröffentlicht. Version 2.5.0-beta02 enthält diese Commits.
API-Änderungen
- Es wurden verschiedene APIs korrigiert, die Abfrageargumente von invariant (
Array<Any?>
) zu kontravariant (Array<out Any?>
) übernehmen, um dem Arrayverhalten von Java zu entsprechen. (b/253531073)
Version 2.5.0-beta01
5. Oktober 2022
androidx.room:room-*:2.5.0-beta01
wird veröffentlicht. Version 2.5.0-beta01 enthält diese Commits.
API-Änderungen
- Die Mindestversion, die
@Upsert
unterstützt, muss API 16 sein. Das liegt daran, dass in älteren APIs kein Konflikt mit einer Primärschlüsseleinschränkung erkannt werden kann. (I5f67f, b/243039555)
Fehlerkorrekturen
- Schatten-Tabellen wurden fälschlicherweise in die
.json
-Dateien des Schemas exportiert, wodurch diese beschädigt wurden. Das Problem wurde behoben. (I4f83b, b/246751839)
Version 2.5.0-alpha03
24. August 2022
androidx.room:room-*:2.5.0-alpha03
wird veröffentlicht. Version 2.5.0-alpha03 enthält diese Commits.
Neue Funktionen
- Es wurde eine neue Shortcut-Anmerkung,
@Upsert
, hinzugefügt, mit der versucht wird, eine Entität einzufügen, wenn kein Eindeutigkeitskonflikt vorliegt, oder die Entität zu aktualisieren, wenn ein Konflikt vorliegt. (I7aaab, b/241964353)
Fehlerkorrekturen
- Room gibt jetzt bei der Überprüfung von Fremdschlüsselbeschränkungen bei der automatischen Migration eine
SQLiteConstraintException
anstelle einerIllegalStateException
aus. (I328dd) - Es wurde ein inkompatibler Quellcode für Getter / Properties von
getOpenHelper
,getQueryExecutor
undgetTransactionExecutor
in Kotlin behoben. (Iad0ac)
Version 2.5.0-alpha02
1. Juni 2022
androidx.room:room-*:2.5.0-alpha02
wird veröffentlicht. Version 2.5.0-alpha02 enthält diese Commits.
Neue Funktionen
- Neue
room-paging
-Artefakteroom-paging-rxjava2
,room-paging-rxjava3
undroom-paging-guava
wurden für die Unterstützung bei der Raumaufteilung hinzugefügt.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)
API-Änderungen
room-runtime
wurde vollständig von Java zu Kotlin konvertiert. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)Hinweis:Aufgrund der Bibliothekskonvertierung zu Kotlin können Probleme mit der Quellinkompatibilität auftreten. Wenn Ihr Code in Kotlin geschrieben wurde und die alte Version von Room aufgerufen hat, muss die neue Version diese Fälle verarbeiten. Eine bekannte inkompatible Änderung ist beispielsweise, dass Sie in
InvalidationTracker
jetztonInvalidate()
inObserver
deklarieren müssen, um einen Parameter vom TypSet
und nichtMutableSet
zu haben.- Es wurden APIs zum Bereitstellen von Schlüssel- und Werttabellennamen zur Mehrdeutigkeitsauflösung in
@MapInfo
hinzugefügt (Icc4b5). - Beheben Sie ein Problem mit der Quellkompatibilität, um
@Ignore
in Property-Gettern wieder zuzulassen. (Ifc2fb)
Fehlerkorrekturen
- Heuristischer Algorithmus zur Auflösung doppelter Spalten. Room versucht jetzt, mehrdeutige Spalten in einer Multimap-Abfrage aufzulösen. So können JOINs mit Tabellen, die Tabellen mit demselben Namen enthalten, korrekt einem Ergebnisdatenobjekt zugeordnet werden. (I4b444, b/201306012, b/212279118)
Version 2.5.0-alpha01
23. Februar 2022
androidx.room:room-*:2.5.0-alpha01
wird veröffentlicht. Version 2.5.0-alpha01 enthält diese Commits.
API-Änderungen
- Ein Problem wurde behoben, bei dem die Verwendung von Room
@IntDef
in Kotlin-Quellen nicht erzwungen wurde. (I75f41, b/217951311) - Ein Problem mit der Quellkompatibilität wurde behoben, sodass
@Query
in Property-Gettern wieder zulässig ist. (I0a09b) - Der Raum-Common wurde von Java zu Kotlin konvertiert. (I69c48, b/206858235)
Hinweis:Bei der Umstellung der Bibliothek auf Kotlin wurden einige Eigenschaften in Companion-Objekte verschoben. Dadurch kann es zu Inkompatibilitätsproblemen mit der Quelle kommen. Wenn Ihr Code in Kotlin geschrieben wurde und die alte Version von Room aufgerufen hat, benötigt die neue Version das Suffix „.Companion“, wenn auf diese Attribute zugegriffen wird.
- Die Migration von Room wurde von Java zu Kotlin konvertiert. (I2724b, b/206858622)
- Die zu
paging
gehörenden Dateien inroom-runtime
wurden von Java zu Kotlin konvertiert. (I82fc8, b/206859668) - Es wurde eine API für die Sperrung und Verwendung von mehreren Prozessen auf FrameworkSQLite*-Ebene hinzugefügt, um die erstmalige Datenbankerstellung und Migrationen in mehreren Prozessen zu schützen. (Ied267, b/193182592)
Fehlerkorrekturen
- Unterstützung für interne Eigenschaften in Kotlin-Quellen hinzugefügt.
Dies ist eine geringfügige Verhaltensänderung in Room. Dabei wird der Quellname von Funktionen verwendet, wenn sie mit Eigenschaften als Getter/Setter abgeglichen werden. Zuvor wurde der JVM-Name der Funktion verwendet, der sich für interne Funktionen/Eigenschaften unterscheidet.
Wenn Sie benutzerdefinierte
@JvmName
-Annotationen verwenden, um Getter/Setter mit privaten Eigenschaften abzugleichen, überprüfen Sie den generierten Code nach dem Update noch einmal (If6531, b/205289020).
Version 2.4.3
Version 2.4.3
27. Juli 2022
androidx.room:room-*:2.4.3
wird veröffentlicht. Version 2.4.3 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das Room suspend-Funktionen in Kotlin 1.7 nicht erkannt hat (b/236612358).
Version 2.4.2
Version 2.4.2
23. Februar 2022
androidx.room:room-*:2.4.2
wird veröffentlicht. Version 2.4.2 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem beim Generieren von Code für eine Dao-Suspend-Funktion
@Transaction
mit einem Body, der aufgrund der Kompilierung mit-Xjvm-default=all
oder einer entsprechenden Funktion eine Standard-Interfacemethode generiert, wurde behoben. (Ia4ce5) - Ein Fehler wurde behoben, bei dem Room Code für eine Abfragemethode mit dem Rückgabetyp
Array<ByteArray>
generiert hat. (If086e, b/213789489)
Version 2.4.1
Version 2.4.1
12. Januar 2022
androidx.room:room-*:2.4.1
wird veröffentlicht. Version 2.4.1 enthält diese Commits.
Fehlerkorrekturen
- Unterstützung für interne Eigenschaften in Kotlin-Quellen hinzugefügt.
Dies ist eine geringfügige Verhaltensänderung in Room. Dabei wird der Quellname von Funktionen verwendet, wenn sie mit Eigenschaften als Getter/Setter abgeglichen werden. Zuvor wurde der JVM-Name der Funktion verwendet, der sich für interne Funktionen/Eigenschaften unterscheidet.
Wenn Sie benutzerdefinierte
@JvmName
-Annotationen verwenden, um Getter/Setter mit privaten Eigenschaften abzugleichen, überprüfen Sie den generierten Code nach dem Update noch einmal (If6531, b/205289020).
Version 2.4.0
Version 2.4.0
15. Dezember 2021
androidx.room:room-*:2.4.0
wird veröffentlicht. Version 2.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.3.0
- Automatische Migrationen: Room bietet jetzt eine API zum automatischen Generieren von Migrationen, sofern Schemas exportiert werden. Damit Room weiß, dass eine automatische Migration generiert werden soll, kann eine neue Property
@Database#autoMigrations
verwendet werden, um die Versionen anzugeben, von denen und zu denen automatisch migriert werden soll. Wenn Room zusätzliche Informationen zu Tabellen und Spaltenumbenennungen oder ‑löschungen benötigt, kann mit der Annotation@AutoMigration
eine Spezifikationsklasse deklariert werden, die solche Eingaben enthält.@AutoMigration
Weitere Informationen finden Sie in der Dokumentation. - Dependency Injection in Auto Migrations:
@ProvidedAutoMigrationSpec
ist eine neue API zum Deklarieren, dass einAutoMigrationSpec
zur Laufzeit überRoomDatabase.Builder#addAutoMigrationSpec()
bereitgestellt wird. So kann ein Framework für die Abhängigkeitsinjektion solche Spezifikationen bereitstellen, wenn sie komplexe Abhängigkeiten benötigen. - Unterstützung für automatische Migrationen im Migration Test Helper:
MigrationTestHelper
von Room wurde aktualisiert, um automatische Migrationen zu unterstützen. Dazu wurde eine neue Konstruktor-API bereitgestellt, die die zu testende Datenbankklasse empfängt. So kann der Helfer währendrunMigrationsAndValidate
automatisch Migrationen hinzufügen. - Unterstützung für Room-Paging:
androidx.room:room-paging
wurde veröffentlicht und bietet native Paging 3.0-Unterstützung für Room-Abfragen, dieandroidx.paging.PagingSource
zurückgeben. - Methoden für relationale Abfragen: Room unterstützt jetzt Multimap-Rückgabetypen für
@Dao
-Methoden, die für JOIN-Anweisungen nützlich sind. Die unterstützten Typen von Multimaps sindMap
,SparseArray
,LongSparseArray
sowieImmutableMap
,ImmutableSetMultimap
undImmutableListMultimap
von Guava.
Version 2.4.0-rc01
1. Dezember 2021
androidx.room:room-*:2.4.0-rc01
wird veröffentlicht. Version 2.4.0-rc01 enthält diese Commits.
Neue Funktionen
- Room-Abhängigkeit von KSP auf
1.6.0-1.0.1
aktualisieren, um Kotlin 1.6 zu unterstützen
Version 2.4.0-beta02
17. November 2021
androidx.room:room-*:2.4.0-beta02
wird veröffentlicht. Version 2.4.0-beta02 enthält diese Commits.
Neue Funktionen
- Wir haben Unterstützung für SparseArray und LongSparseArray in @MapInfo hinzugefügt. (Ic91a2b/138910317)
Fehlerkorrekturen
- Wir haben einen neuen TypeConverter-Analyzer hinzugefügt, der Nullable-Informationen in Typen berücksichtigt. Da diese Informationen nur in KSP verfügbar sind, ist die Funktion standardmäßig nur in KSP aktiviert. Wenn dadurch Probleme auftreten, können Sie die Funktion deaktivieren, indem Sie room.useNullAwareTypeAnalysis=false an den Annotationsprozessor übergeben. Sollte das passieren, melden Sie bitte den Fehler, da dieses Flag in Zukunft entfernt wird. Mit diesem neuen TypeConverter-Analyzer wird empfohlen, nur TypeConverter-Objekte zu verwenden, die nicht null sind, da der neue Analyzer sie mit einer Nullprüfung umschließen kann. Das hat keine Auswirkungen auf Nutzer, die KAPT oder Java verwenden, da die Annotation Processors (im Gegensatz zu KSP) keine Informationen zur Nullable-Eigenschaft in Typen haben. (Ia88f9, b/193437407)
- Ein Fehler wurde behoben, durch den die Kompilierung von Room mit einem SQL-Fehler fehlschlug, wenn für eine FTS-Entität die Verwendung des ICU-Tokenizers deklariert wurde. (I00db9, b/201753224)
- Ein Problem bei automatischen Migrationen wurde behoben, das auftrat, wenn zwischen Versionen eine neue Spalte in eine eingebettete Entität eingefügt wurde. (I5fcb1b/193798291)
- Wir haben ein Problem mit den Rückgabetypen der relationalen Abfragemethode in LEFT JOIN-Abfragen behoben. Bei diesen Änderungen wird die für einen Schlüssel zurückgegebene Sammlung im Fall einer 1-zu-viele-Zuordnung nicht das ungültige Wertobjekt enthalten, wenn es nicht im Cursor gefunden wird. Wenn keine gültigen Werte gefunden werden, wird ein Schlüssel einer leeren Sammlung zugeordnet. (Id5552b/201946438)
- Das Problem bei der automatischen Migration, bei dem SQLite-Schlüsselwörter in Spaltennamen nicht maskiert wurden, wurde behoben. (Idbed4b/197133152)
Version 2.4.0-beta01
13. Oktober 2021
androidx.room:room-*:2.4.0-beta01
wird veröffentlicht. Version 2.4.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem bei automatischen Migrationen keine neuen Spalten hinzugefügt wurden, wenn eine andere Tabelle in derselben automatischen Migration auch eine neue Spalte mit demselben Namen enthielt. (Ia5db5, b/200818663)
- Die von „room-paging“ generierte PagingSource-Implementierung verwendet jetzt
queryExecutor
, das überRoomDatabase.Builder
übergeben wird. Sie kann also überschrieben werden. Bisher wurdeDispatchers.IO
verwendet. (Iae259)
Version 2.4.0-alpha05
29. September 2021
androidx.room:room-*:2.4.0-alpha05
wird veröffentlicht. Version 2.4.0-alpha05 enthält diese Commits.
Neue Funktionen
- Ein integrierter Typkonverter für UUID wurde hinzugefügt. (I671e8, b/73132006)
API-Änderungen
Der TypeConverters-Annotation wurde eine neue Property hinzugefügt, mit der Entwickler integrierte Enum- und UUID-Converter deaktivieren können. Standardmäßig sind diese Konverter aktiviert. Sie können sie jedoch für einen bestimmten Bereich oder für die gesamte Datenbank deaktivieren. Weitere Informationen finden Sie in der Dokumentation zu TypeConverters. (36ae9e, b/195413406)
Unterstützung von Nicht-POJO-Schlüsseln/Werten für Multimap-Rückgabetypen in DAOs über die Annotation
@MapInfo
. (I4d704)
@MapInfo
ist erforderlich, wenn die Schlüssel- oder Wertspalte der Zuordnung aus einer einzelnen Spalte stammt. Beispiel:
@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>
- Machen Sie
room-paging
zu einem erforderlichen Artefakt, wenn Sie Paging3 mit Room verwenden. (Ieaffe)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem die Ergebnisse von Multimap-Abfragen nicht richtig sortiert wurden, wenn die Abfrage eine ORDER BY-Klausel für eine Spalte aus dem Schlüssel der Karte enthielt. (I6b887)
Externe Beiträge
- Es wurde eine neue API hinzugefügt, mit der die Indexreihenfolge in @Index angegeben werden kann. Vielen Dank an Nikita Zhelonkin. (I033fc)
Version 2.4.0-alpha04
21. Juli 2021
androidx.room:room-*:2.4.0-alpha04
wird veröffentlicht. Version 2.4.0-alpha04 enthält diese Commits.
Neue Funktionen
Room unterstützt jetzt Multimap-Rückgabetypen für
@Dao
-Methoden, was für JOIN-Anweisungen nützlich ist. Die unterstützten Typen von Multimaps sindMap
sowieImmutableMap
,ImmutableSetMultimap
undImmutableListMultimap
von Guava.Im Folgenden finden Sie Beispiele für Multimap-Abfragen:
1:1-Beziehungskarte
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
Beziehungskarte vom Typ „Eins-zu-N“ (Standard-Multimap)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
Das Multimap-Ergebnis kann auch in die unterstützten asynchronen Rückgabetypen wie
LiveData
, Rx’sObservable
oder CoroutinesFlow
eingebunden werden.
Room-Paging
androidx.room:room-paging
wurde veröffentlicht und bietet native Paging 3.0-Unterstützung für Room-Abfragen, dieandroidx.paging.PagingSource
zurückgeben.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
Dieses Artefakt ersetzt die von Room generierte
androidx.paging.PagingSource
-Implementierung durch eine, die auf Paging 3.0-APIs basiert. Bei der neuen PagingSource-Implementierung werden Schlüssel anders geparst. Daher muss bei jedem Schlüssel, der manuell an die PagingSource von Room übergeben wird, diese Verhaltensänderung berücksichtigt werden, einschließlich des initialKey, der über den Konstruktor von Pager übergeben wird. Die Seiten werden abKey
geladen, wobeiKey
das erste geladene Element ist. Das weicht vom bisherigen Verhalten ab, bei demLoadParams.Refresh.Key
als Scrollposition des Nutzers behandelt wird und Elemente sowohl vor als auch nach dem Schlüssel geladen werden.Das Artefakt ist optional. Wenn Sie es nicht verwenden, wird auf die vorhandene Unterstützung für Paging 3.0 zurückgegriffen, die in Room 2.3 eingeführt wurde. Dieses Artefakt wird jedoch in zukünftigen Releases für Nutzer von Room mit Paging 3.0 nicht mehr optional sein. Fügen Sie das neue Room-Paging-Artefakt zu Ihrem Klassenpfad hinzu, um die Funktion zu aktivieren. Wenn Sie Gradle verwenden, können Sie das folgende Snippet in Ihre build.gradle-Datei einfügen:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Fehlerkorrekturen
- Ein Problem bei automatischen Migrationen im Zusammenhang mit der Verarbeitung von Fremdschlüsselverstößen wurde behoben. (b/190113935)
Version 2.4.0-alpha03
16. Juni 2021
androidx.room:room-*:2.4.0-alpha03
wird veröffentlicht. Version 2.4.0-alpha03 enthält diese Commits.
API-Änderungen
- Aktualisieren Sie
MigrationTestHelper
von Room, um automatische Migrationen zu unterstützen. Dazu stellen Sie eine neue Konstruktor-API bereit, die die zu testende Datenbankklasse empfängt. So kann der Helfer währendrunMigrationsAndValidate
automatisch Migrationen hinzufügen.
Fehlerkorrekturen
Ein Problem mit der nativen SQLite-Bibliothek von Room wurde behoben, um die M1-Chips von Apple zu unterstützen. (b/174695268
Ein Problem wurde behoben, bei dem Room keinen Fehler ausgegeben hat, wenn der Rückgabetyp einer @Transaction-Funktion ein Flow war (I56ddd, b/190075899).
Ein Problem bei automatischen Migrationen in Bezug auf Indexe wurde behoben. b/177673291
Abhängigkeitsupdates
- Die Unterstützung von wichtigen Verkaufsargumenten in Room hängt jetzt von KSP
1.5.10-1.0.0-beta01
ab. (1ecb11, b/160322705)
Version 2.4.0-alpha02
5. Mai 2021
androidx.room:room-*:2.4.0-alpha02
wird veröffentlicht. Version 2.4.0-alpha02 enthält diese Commits.
API-Änderungen
@ProvidedAutoMigrationSpec
ist eine neue API, mit der deklariert wird, dass einAutoMigrationSpec
zur Laufzeit überRoomDatabase.Builder#addAutoMigrationSpec()
bereitgestellt wird. So kann ein Framework für die Abhängigkeitsinjektion solche Spezifikationen bereitstellen, wenn sie komplexe Abhängigkeiten benötigen.
Fehlerkorrekturen
- Ein Problem mit automatischen Migrationen wurde behoben, bei dem
@DatabaseView
nicht richtig neu erstellt wurden.
Externe Beiträge
- Ein Problem in
JournalMode.TRUNCATE
von Room wurde behoben, bei dem derInvalidationTracker
-Callback manchmal ungültig, zu spät oder gar nicht aufgerufen wurde. Vielen Dank anUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
Version 2.4.0-alpha01
21. April 2021
androidx.room:room-*:2.4.0-alpha01
wird veröffentlicht. Version 2.4.0-alpha01 enthält diese Commits.
Neue Funktionen
- Automatische Migrationen: Room bietet jetzt eine API zum automatischen Generieren von Migrationen, sofern Schemas exportiert werden. Damit Room weiß, dass eine automatische Migration generiert werden soll, kann eine neue Property
@Database#autoMigrations
verwendet werden, um die Versionen anzugeben, von denen und zu denen automatisch migriert werden soll. Wenn Room zusätzliche Informationen zu Tabellen und Spaltenumbenennungen oder ‑löschungen benötigt, kann mit der Annotation@AutoMigration
eine Spezifikationsklasse deklariert werden, die solche Eingaben enthält. Weitere Informationen finden Sie in der Dokumentation zu@AutoMigration
.
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das
defaultValue
mit zusätzlichen Klammern fälschlicherweise von der Schemavalidierung von Room validiert wurden. b/182284899
Version 2.3.0
Version 2.3.0
21. April 2021
androidx.room:room-*:2.3.0
wird veröffentlicht. Version 2.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.2.0
- Integrierte Unterstützung für Enums: Für Räume wird jetzt standardmäßig ein Typkonverter vom Typ „Enum zu String“ und umgekehrt verwendet, wenn keiner angegeben ist. Wenn bereits ein Typkonverter für ein Enum vorhanden ist, wird er von Room gegenüber dem Standardkonverter bevorzugt.
- Query Callback: Room bietet jetzt eine allgemeine Callback-API RoomDatabase.QueryCallback für den Fall, dass Abfragen ausgeführt werden. Dies kann für das Logging in Debug-Builds nützlich sein. Der Rückruf kann über
RoomDatabase.Builder#setQueryCallback()
festgelegt werden. - Vorkonfigurierte Verbesserung: Room bietet jetzt APIs zum Erstellen einer Datenbank mithilfe einer vorkonfigurierten Datenbank, die aus einem Eingabestream gelesen wird. Dies ist beispielsweise dann nützlich, wenn die Datenbank des vorab gepackten Pakets mit gzip komprimiert wurde.
- Bereitgestellte Typkonverter: Room bietet jetzt APIs zum Bereitstellen von Instanzen von Typkonvertern, sodass die Initialisierung von der App gesteuert werden kann. Verwenden Sie die neue Annotation @ProvidedTypeConverter, um einen Typkonverter zu markieren, der für Room bereitgestellt wird.
- RxJava3-Unterstützung: Room unterstützt jetzt RxJava3-Typen. Ähnlich wie bei RxJava2 können Sie DAO-Methoden deklarieren, deren Rückgabetyp Flowable, Single, Maybe und Completable ist. Außerdem ist ein neues Artefakt
androidx.room:room-rxjava3
verfügbar, um RxJava3 zu unterstützen. - Unterstützung für Paging 3.0: Room unterstützt jetzt das Generieren von Implementierungen für Methoden mit der Annotation
@Query
, deren Rückgabetypandroidx.paging.PagingSource
ist.
Version 2.3.0-rc01
24. März 2021
androidx.room:room-*:2.3.0-rc01
wird veröffentlicht. Version 2.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, das verhinderte, dass von Room erstellte Coroutine Flow-Abfragen in einem suspendierenden
withTransaction
-Block verwendet werden konnten. (I797bf)
Version 2.3.0-beta03
10. März 2021
androidx.room:room-*:2.3.0-beta03
wird veröffentlicht. Version 2.3.0-beta03 enthält diese Commits.
Neue Funktionen
- Unterstützung für die inkrementelle Kompilierung für KSP hinzugefügt. (I031c1, b/176453350)
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem das Erstellen von PagingSource im Hauptthread einen ANR-Fehler auslösen konnte. (I42b74, b/181221318)
- Die Sichtbarkeit von
@ExperimentalRoomApi
wurde von „package private“ zu „public“ geändert. (b/181356119)
Externe Beiträge
- Room soll einen POJO-Rückgabetyp in einer mit
@Query
annotierten DAO-Methode akzeptieren, wenn sie auch mit@SkipQueryVerification
annotiert ist. Room versucht, das Ergebnis der Abfrage in den POJO-Rückgabetyp zu konvertieren, so wie es für eine DAO-Methode mit der Annotation@RawQuery
erfolgt. Vielen Dank an Markus Riegel (hey@marcorei.com). (I45acb)
Version 2.3.0-beta02
18. Februar 2021
androidx.room:room-*:2.3.0-beta02
wird veröffentlicht. Version 2.3.0-beta02 enthält diese Commits.
Neue Funktionen
Room bietet jetzt experimentelle Unterstützung für die Kotlin Symbol Processing API (KSP).
KSP ist ein Ersatz für KAPT, um Annotationsprozessoren nativ im Kotlin-Compiler auszuführen und so die Build-Zeiten erheblich zu verkürzen.
Wenn Sie Room mit KSP verwenden möchten, können Sie das KSP-Gradle-Plug-in anwenden und die
kapt
-Konfiguration in Ihrer Build-Datei durchksp
ersetzen. Verwenden Sie beispielsweiseksp 'androidx.room:room-compiler:2.3.0-beta02'
anstelle vonkapt 'androidx.room:room-compiler:2.3.0-beta02'
. Weitere Informationen finden Sie in der KSP-Dokumentation.Da KSP experimentell ist, wird empfohlen, KAPT weiterhin für Produktionscode zu verwenden. Die Verkürzung der Build-Zeiten ist nur möglich, wenn keine anderen Prozessoren KAPT verwenden. Bekannte Probleme finden Sie unter b/160322705.
Version 2.3.0-beta01
27. Januar 2021
androidx.room:room-*:2.3.0-beta01
wird veröffentlicht. Version 2.3.0-beta01 enthält diese Commits.
Neue Funktionen
- Automatisch schließbare Datenbanken: Room kann jetzt Datenbanken schließen, auf die nach einem bestimmten Zeitraum nicht mehr zugegriffen wird. Dies ist eine experimentelle Funktion, die durch Aufrufen von
RoomDatabase.Builder#setAutoCloseTimeout()
aktiviert werden kann. Diese Funktion ist nützlich für Anwendungen mit mehreren Datenbanken.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem für Dao-Methoden mit mehreren
@Update
- oder@Delete
-Methoden mit unterschiedlichen Konfliktstrategien Code mit nur einer der Strategien generiert wurde, wodurch die definierte Strategie ignoriert wurde. (/I0b90d, b/176138543)
Version 2.3.0-alpha04
16. Dezember 2020
androidx.room:room-*:2.3.0-alpha04
wird veröffentlicht. Version 2.3.0-alpha04 enthält diese Commits.
Neue Funktionen
- Room bietet jetzt eine allgemeine Callback-API
RoomDatabase.QueryCallback
für den Fall, dass Abfragen ausgeführt werden. Dies kann für das Logging in Debug-Builds nützlich sein. Der Rückruf kann überRoomDatabase.Builder#setQueryCallback()
festgelegt werden. (Iaa513, b/174478034, b/74877608) - Für Chatrooms wird jetzt standardmäßig ein Typkonverter vom Typ „Enum“ zu „String“ und umgekehrt verwendet, wenn keiner angegeben ist. Wenn bereits ein Typkonverter für ein Enum vorhanden ist, wird er von Room gegenüber dem Standardkonverter bevorzugt. (b/73132006)
Bekanntes Problem
- Wenn bereits ein unidirektionaler Typkonverter zum Lesen für das Enum vorhanden ist, verwendet Room möglicherweise versehentlich den integrierten String-zu-Enum-Konverter, was nicht gewünscht ist. Dies ist ein bekanntes Problem, das behoben werden kann, indem der Konverter bidirektional gemacht wird. Siehe b/175707691.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Room die inkrementelle Verarbeitung von Anmerkungen in neueren JDK-Versionen fälschlicherweise deaktiviert hat. (b/171387388)
- Ein Problem wurde behoben, bei dem Room die generierte Klasse nicht gefunden hat, wenn mehrere Klassenlader verwendet wurden. Vielen Dank für die Korrektur „Serendipity | 892449346@qq.com“! (b/170141113)
- Ein Problem wurde behoben, bei dem Room falschen Code generiert hat, wenn eine Kotlin-
@Dao
eine Basisklasse mit Generics hatte, die Primitiven in der JVM entsprechen. (b/160258066)
Externe Beiträge
- Room verwendet jetzt standardmäßig
beginTransactionNonExclusive
, wenn der WAL-Modus aktiviert ist und die API-Version 16 oder höher ist. Vielen Dank an Ahmed I. Khalil | ahmedibrahimkhali@gmail.com“! (b/126258791)
Version 2.3.0-alpha03
14. Oktober 2020
androidx.room:room-*:2.3.0-alpha03
wird veröffentlicht. Version 2.3.0-alpha03 enthält diese Commits.
Neue Funktionen
Room bietet jetzt APIs zum Bereitstellen von Instanzen von Typkonvertern, sodass die App deren Initialisierung steuern kann. Verwenden Sie die neue Annotation
@ProvidedTypeConverter
, um einen Typkonverter zu markieren, der für Room bereitgestellt wird. Vielen Dank an „mzgreen yairobbe@gmail.com“. (Ie4fa5, b/121067210)Room bietet jetzt APIs zum Erstellen einer Datenbank mit einer vorgefertigten Datenbank, die aus einem Eingabestream gelesen wird. Dies ist beispielsweise dann nützlich, wenn die Datenbank des vorab gepackten Pakets mit gzip komprimiert wurde. Vielen Dank an Ahmed El-Helw ahmedre@gmail.com (3e6792, b/146911060)
API-Änderungen
Fehlendes Ziel zur Annotation
@ForeignKey
hinzugefügt, um die Verwendung außerhalb der Annotation@Entity
zu verhindern. (Iced1e)Das Feld
mCallbacks
inRoomDatabase.java
ist jetzt ausgeblendet. (d576cb, b/76109329)
Fehlerkorrekturen
Die TypeConverters-Dokumentation wurde aktualisiert, um zu verdeutlichen, dass TypeConverters nur zum Konvertieren von Spalten / Feldern und nicht von Zeilen verwendet werden können. (I07c56, b/77307836)
Der DaoProcessor wurde aktualisiert, um einen Compilerfehler bei Dao mit einem generischen Supertyp mit Kotlin-„Primitiven“ zu beheben. (Ice6bb, b/160258066)
Dokumentation zu Methoden zum Hinzufügen/Entfernen von Beobachtern aktualisiert, um die Threading-Funktion zu verdeutlichen (Ifd1d9, b/153948821)
Ein Problem wurde behoben, bei dem Room FTS-Tabellen, in denen die rowid-Spalte deklariert wurde, fälschlicherweise validiert hat. (d62ebc, b/145858914)
Externe Beiträge
Probleme mit der Groß-/Kleinschreibung bei der türkischen Sprache behoben (5746e3), b/68159494
Ersetzen Sie
ConcurrentHashMap
inRoomDatabase
durchCollections.synchronizedMap()
, um Probleme unter Android Lollipop (d1cfc7, b/162431855) zu vermeiden.Fügen Sie einen onOpenPrepackagedDatabase-Callback hinzu, wenn eine vorab verpackte Datenbank kopiert wird. (I1ba74, b/148934423)
Version 2.3.0-alpha02
22. Juli 2020
androidx.room:room-*:2.3.0-alpha02
wird veröffentlicht. Version 2.3.0-alpha02 enthält diese Commits.
Neue Funktionen
- RxJava3-Unterstützung: Room unterstützt jetzt RxJava3-Typen. Ähnlich wie bei RxJava2 können Sie DAO-Methoden deklarieren, deren Rückgabetyp Flowable, Single, Maybe und Completable ist. Außerdem ist ein neues Artefakt
androidx.room:room-rxjava3
verfügbar, um RxJava3 zu unterstützen. (b/152427884)
API-Änderungen
- Die Deklaration von
@TypeConverter
in der Kotlin-Objektklasse wird jetzt unterstützt. (b/151110764) - Die Option
Room
für die inkrementelle Verarbeitung von Anmerkungen ist jetzt standardmäßig aktiviert. (b/112110217)
Version 2.3.0-alpha01
10. Juni 2020
androidx.room:room-*:2.3.0-alpha01
wird veröffentlicht. Version 2.3.0-alpha01 enthält diese Commits.
Neue Funktionen
Unterstützung von Paging 3.0: Room unterstützt jetzt das Generieren von Implementierungen für Methoden mit der Annotation
@Query
, deren Rückgabetypandroidx.paging.PagingSource
ist.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
API-Änderungen
@RewriteQueriesToDropUnusedColumns
ist eine neue praktische Anmerkung, mit der Room die „*“-Projektion in einer Abfrage so umschreibt, dass nicht verwendete Spalten im Ergebnis entfernt werden.- Die Prozessoroption
room.expandProjection
wurde verworfen. Verwenden Sie@RewriteQueriesToDropUnusedColumns
als Ersatz für Abfragen zur Raumoptimierung mit Sternprojektionen.@RewriteQueriesToDropUnusedColumns
ersetzt nicht die Lösung für Spaltenkonflikteroom.expandProjection
, die in Bezug auf Rückgabetypen mit@Embedded
-Feldern angeboten wird.
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem Room die JDK-Version, die zum Aktivieren des inkrementellen Annotationsprozessors verwendet wurde, nicht richtig erkannt hat. Vielen Dank an Blaz Solar (me@blaz.solar) (b/155215201)
- Room bettet jetzt die ANTLR-Abhängigkeit mit dem Annotationsprozessor ein, um Versionskonflikte mit anderen Prozessoren zu vermeiden, die ebenfalls ANTLR verwenden. (b/150106190)
Version 2.2.6
Version 2.2.6
16. Dezember 2020
androidx.room:room-*:2.2.6
wird veröffentlicht. Version 2.2.6 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Room die inkrementelle Verarbeitung von Anmerkungen in neueren JDK-Versionen fälschlicherweise deaktiviert hat. (b/171387388)
Version 2.2.5
Version 2.2.5
18. März 2020
androidx.room:room-*:2.2.5
wird veröffentlicht. Version 2.2.5 enthält diese Commits.
Fehlerkorrekturen
- Machen Sie
MultiInstanceInvalidationService
directBootAware. Vielen Dank an „Mygod contact-git@mygod.be“ (b/148240967) - Ein Fehler wurde behoben, der zum Absturz führte, wenn die Multi-Instance-Invalidierung aktiviert war und die Datenbank eine FTS-Entität enthielt. (b/148969394)
- Ein Problem beim Laden der nativen SQLite-Bibliotheken im Room-Annotationsprozessor wurde behoben, das aufgrund paralleler Kompilierungen zum Absturz des Compilers führte. (b/146217083)
Version 2.2.4
Version 2.2.4
19. Februar 2020
androidx.room:room-common:2.2.4
, androidx.room:room-compiler:2.2.4
, androidx.room:room-guava:2.2.4
, androidx.room:room-ktx:2.2.4
, androidx.room:room-migration:2.2.4
, androidx.room:room-runtime:2.2.4
, androidx.room:room-rxjava2:2.2.4
und androidx.room:room-testing:2.2.4
werden veröffentlicht. Version 2.2.4 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem beim Anhalten von Transaktionen wurde behoben. Es konnte zu einem Deadlock kommen, wenn die Coroutine schnell abgebrochen wurde, bevor die Transaktion tatsächlich gestartet wurde. (b/148181325)
- Ein Problem wurde behoben, durch das die Annotation @Generated beim Erstellen mit JDK 9 fälschlicherweise verwendet wurde. (b/146538330)
- Ein Problem wurde behoben, bei dem Room falschen Code generierte, wenn eine DAO-Schnittstelle in Kotlin eine konkrete Funktion hatte. (b/146825845)
Version 2.2.3
Version 2.2.3
18. Dezember 2019
androidx.room:room-*:2.2.3
wird veröffentlicht. Version 2.2.3 enthält diese Commits.
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem Room eine Datenbank nicht validieren konnte, die noch nicht migriert wurde und einen Legacy-Hash mit Indexen in ihrem Schema enthielt. (b/139306173)
Version 2.2.2
Version 2.2.2
20. November 2019
androidx.room:room-*:2.2.2
wird veröffentlicht. Version 2.2.2 enthält diese Commits.
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem das Erfassen einer 1-zu-1-Beziehung mit mehr als 999 Zeilen dazu führte, dass Room zugehörige Elemente als „null“ zurückgab. (b/143105450)
Version 2.2.1
Version 2.2.1
23. Oktober 2019
androidx.room:room-*:2.2.1
wird veröffentlicht. Version 2.2.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem Room fälschlicherweise eine Warnung zu
CURSOR_MISMATCH
ausgegeben hat, wenn die CompileroptionexpandProjection
aktiviert war. (b/140759491) - Es wurde ein Mechanismus für Wiederholungsversuche hinzugefügt, um die fehlende native Bibliothek zu verarbeiten, die zum Überprüfen von Abfragen zur Kompilierzeit verwendet wird.
Version 2.2.0
Version 2.2.0
9. Oktober 2019
androidx.room:room-*:2.2.0
wird veröffentlicht. Version 2.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.1.0
- Vorkonfigurierte Datenbank: Zwei neue APIs in
RoomDatabase.Builder
sind jetzt verfügbar, um eineRoomDatabase
aus einer bereits gefüllten Datenbankdatei zu erstellen.createFromAsset()
wird verwendet, wenn sich die vorab ausgefüllte Datenbankdatei im Assets-Ordner des APK befindet, währendcreateFromFile()
verwendet wird, wenn sich die Datei an einem beliebigen Speicherort befindet. Die Verwendung dieser API ändert das Verhalten von destruktiven Migrationen. Bei einer Fallback-Migration versucht Room, die vorab gefüllte Datenbank neu zu kopieren, sofern sie verfügbar ist. Andernfalls werden alle Tabellen gelöscht und neu erstellt. b/62185732 - Schema-Standardwerte:
@ColumnInfo
hat jetzt das neue AttributdefaultValue
, mit dem der Standardwert einer Spalte angegeben werden kann. Standardwerte sind Teil eines Datenbankschemas und werden bei Migrationen validiert, sofern angegeben. b/64088772 - N-zu-N-Beziehungen:
@Relation
hat jetzt eine neue EigenschaftassociateBy
, die eine neue Anmerkung@Junction
enthält. Damit wird eine Beziehung deklariert, die über eine Verknüpfungstabelle (auch als Join-Tabelle bezeichnet) erfüllt werden muss. b/69201917 - 1:1-Beziehungen: Die Einschränkung, dass POJO-Felder, die mit
@Relation
annotiert sind, vom TypList
oderSet
sein müssen, wurde aufgehoben. Dadurch können jetzt auch Beziehungen mit einem einzelnen Wert dargestellt werden. b/62905145 - Zielentität: Die DAO-Anmerkungen
@Insert
,@Update
und@Delete
haben jetzt ein neues AttributtargetEntity
, mit dem die Zieltabelle angegeben werden kann, auf die sich die DAO-Methode beziehen soll. So können die Parameter dieser DAO-Methoden beliebige POJOs sein, die als partielle Entitäten interpretiert werden. In der Praxis sind dadurch teilweise Einfüge-, Lösch- und Aktualisierungsvorgänge möglich. b/127549506 - Coroutines Flow:
@Query
DAO-Methoden können jetzt den RückgabetypFlow<T>
haben. Der zurückgegebene Flow gibt einen neuen Satz von Werten aus, wenn die beobachteten Tabellen in der Abfrage ungültig werden. Die Deklaration einer DAO-Funktion mit dem RückgabetypChannel<T>
ist ein Fehler. Stattdessen sollten SieFlow
verwenden und dann die benachbarten Funktionen nutzen, umFlow
inChannel
zu konvertieren. b/130428884 - Inkrementeller Gradle-Annotationsprozessor: Room ist jetzt ein isolierender Gradle-Annotationsprozessor und die Inkrementierbarkeit kann über die Prozessoroption
room.incremental
aktiviert werden. Weitere Informationen finden Sie unter Room Compiler Options. Falls Probleme auftreten, melden Sie sie bitte hier. Wir planen, die Steigerungsfähigkeit in einer zukünftigen stabilen Version standardmäßig zu aktivieren. b/112110217 - Erweitern von Projektionen: Es wurde eine neue experimentelle Compileroption
room.expandProjection
hinzugefügt, die bewirkt, dass Room eine Abfrage mit einer Sternprojektion so umschreibt, dass sie nur die Spalten im zurückgegebenen Typ-POJO enthält. Beispiel: Für eine DAO-Methode mit@Query("SELECT * FROM Song")
, die ein POJO mit dem NamenSongIdAndTitle
mit nur zwei Feldern zurückgibt. Room schreibt die Abfrage dann inSELECT id, title FROM Song
um, sodass die Mindestanzahl an Spalten zum Erfüllen des Rückgabetyps abgerufen wird. Dadurch wird dieCURSOR_MISMATCH
-Warnung im Wesentlichen eliminiert, die angezeigt wird, wenn die Abfrage zusätzliche Spalten zurückgibt, die keinem Feld im zurückgegebenen POJO-Typ entsprechen.
Version 2.2.0-rc01
5. September 2019
androidx.room:room:2.2.0-rc01
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Seit dem Chatroom 2.2.0-beta01
gab es keine öffentlichen Änderungen.
Version 2.2.0-beta01
22. August 2019
androidx.room:room-*:2.2.0-beta01
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem eine Coroutine Flow-Abfrage nach einer bestimmten Zeit keine neuen Werte mehr ausgab. (b/139175786)
- Es wurde ein Fehler behoben, bei dem Room beim Öffnen einer Datenbank, die seit Room 1.0 nicht migriert wurde, keinen Legacy-Schema-Hashcode akzeptierte. Dies führte zu einem Laufzeitabsturz aufgrund eines ungültigen Schemas. (b/139306173)
Version 2.2.0-alpha02
7. August 2019
androidx.room:room-*:2.2.0-alpha02
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Coroutines Flow:
@Query
DAO-Methoden können jetzt den RückgabetypFlow<T>
haben. Der zurückgegebene Flow gibt einen neuen Satz von Werten aus, wenn die beobachteten Tabellen in der Abfrage ungültig werden. Die Deklaration einer DAO-Funktion mit dem RückgabetypChannel<T>
ist ein Fehler. Stattdessen sollten SieFlow
verwenden und dann die benachbarten Funktionen nutzen, umFlow
inChannel
zu konvertieren. b/130428884 - Erweitern von Projektionen: Es wurde eine neue experimentelle Compileroption
room.expandProjection
hinzugefügt, die bewirkt, dass Room eine Abfrage mit einer Sternprojektion so umschreibt, dass sie nur die Spalten im zurückgegebenen Typ-POJO enthält. Beispiel: Für eine DAO-Methode mit@Query("SELECT * FROM Song")
, die ein POJO mit dem NamenSongIdAndTitle
mit nur zwei Feldern zurückgibt. Room schreibt die Abfrage dann inSELECT id, title FROM Song
um, sodass die Mindestanzahl an Spalten zum Erfüllen des Rückgabetyps abgerufen wird. Dadurch wird dieCURSOR_MISMATCH
-Warnung im Wesentlichen eliminiert, die angezeigt wird, wenn die Abfrage zusätzliche Spalten zurückgibt, die keinem Feld im zurückgegebenen POJO-Typ entsprechen. onDestructiveMigrate
ist eine neue Callback-API, dieRoomDatabase.Callback
hinzugefügt wurde, wenn Room eine Datenbank destruktiv migriert. b/79962330
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem Room falschen Code generiert hat, wenn eine Methode als Feld-Setter verwendet wurde und das Feld geschützt war.b/136194628
- Ein Fehler wurde behoben, der dazu führte, dass der InvalidationTracker in einem zweiten Prozess eine NPE auslöste, wenn die Multi-Instance-Invalidierung aktiviert und der Invalidierungsdienst beendet wurde. b/137454915
- Ein Fehler wurde behoben, bei dem der Rückgabetyp einer geerbten suspend-Funktion, die mit
@RawQuery
annotiert ist, von Room nicht richtig erkannt wurde. b/137878827 - Der generierte Code für
@Relation
wurde aktualisiert, wenn der zugehörige Schlüssel vom Typ BLOB ist, um einen vergleichbarenByteBuffer
zu verwenden. b/137881998 - Ein Fehler wurde behoben, durch den Room fehlende Setter für POJOs gemeldet hat, die als partielle Entitätsparameter von
@Insert
,@Update
und@Delete
verwendet wurden. b/138664463 - Ein Fehler wurde behoben, durch den Room über fehlende Getter und Setter für eine ignorierte Spalte über
@Entity
geklagt hat, wenn die Entitätsklasse in bestimmten DAO-Methoden verwendet wurde. b/138238182 - Ein Fehler wurde behoben, bei dem benannte Bindungsargumente in Room nicht korrekt in Positionsargumente konvertiert wurden. Dies führte zu einer Laufzeit-Exception beim Ausführen einer Abfrage mit wiederverwendeten Parametern. b/137254857
Version 2.2.0-alpha01
10. Juli 2019
Neue Funktionen
- Vorkonfigurierte Datenbank: Zwei neue APIs in
RoomDatabase.Builder
sind jetzt verfügbar, um eineRoomDatabase
aus einer bereits gefüllten Datenbankdatei zu erstellen.createFromAsset()
wird verwendet, wenn sich die vorab ausgefüllte Datenbankdatei im Assets-Ordner des APK befindet, währendcreateFromFile()
verwendet wird, wenn sich die Datei an einem beliebigen Speicherort befindet. Die Verwendung dieser API ändert das Verhalten von destruktiven Migrationen. Bei einer Fallback-Migration versucht Room, die vorab gefüllte Datenbank neu zu kopieren, sofern sie verfügbar ist. Andernfalls werden alle Tabellen gelöscht und neu erstellt. b/62185732 - Schema-Standardwerte:
@ColumnInfo
hat jetzt das neue AttributdefaultValue
, mit dem der Standardwert einer Spalte angegeben werden kann. Standardwerte sind Teil eines Datenbankschemas und werden bei Migrationen validiert, sofern angegeben. b/64088772Hinweis:Wenn Ihr Datenbankschema bereits Standardwerte enthält, z. B. solche, die über
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
hinzugefügt wurden, und Sie sich entscheiden, Standardwerte über@ColumnInfo
für dieselben Spalten zu definieren, müssen Sie möglicherweise eine Migration bereitstellen, um die nicht berücksichtigten Standardwerte zu validieren. Weitere Informationen finden Sie unter Raummigrationen. - N-zu-N-Beziehungen:
@Relation
hat jetzt eine neue EigenschaftassociateBy
, die eine neue Anmerkung@Junction
enthält. Damit wird eine Beziehung deklariert, die über eine Verknüpfungstabelle (auch als Join-Tabelle bezeichnet) erfüllt werden muss. b/69201917 - 1:1-Beziehungen: Die Einschränkung, dass POJO-Felder, die mit
@Relation
annotiert sind, vom TypList
oderSet
sein müssen, wurde aufgehoben. Dadurch können jetzt auch Beziehungen mit einem einzelnen Wert dargestellt werden. b/62905145 - Zielentität: Die DAO-Anmerkungen
@Insert
,@Update
und@Delete
haben jetzt ein neues AttributtargetEntity
, mit dem die Zieltabelle angegeben werden kann, auf die sich die DAO-Methode beziehen soll. So können die Parameter dieser DAO-Methoden beliebige POJOs sein, die als partielle Entitäten interpretiert werden. In der Praxis sind dadurch teilweise Einfüge-, Lösch- und Aktualisierungsvorgänge möglich. b/127549506 - Inkrementeller Gradle-Annotationsprozessor: Room ist jetzt ein isolierender Gradle-Annotationsprozessor und die Inkrementierbarkeit kann über die Prozessoroption
room.incremental
aktiviert werden. Weitere Informationen finden Sie unter Room Compiler Options. Falls Probleme auftreten, melden Sie sie bitte hier. Wir planen, die Steigerungsfähigkeit in einer zukünftigen stabilen Version standardmäßig zu aktivieren. b/112110217
Fehlerkorrekturen
- Room gibt
EmptySetResultException
nicht mehr an den globalen Fehler-Handler weiter, wenn der Rx-Stream einer Abfrage vor Abschluss der Abfrage verworfen wurde. b/130257475 - Es wurde ein Fehler behoben, bei dem Room eine falsche Fehlermeldung angezeigt hat, wenn eine mit
@RawQuery
annotierte DAO-Funktion vom Typ „suspend“ keinen Rückgabetyp hatte. b/134303897 - Im Raum werden keine DAO-Adapter mit Rohdatentypen mehr generiert. b/135747255
Version 2.1.0
Version 2.1.0
13. Juni 2019
Room 2.1.0 wurde ohne Änderungen gegenüber 2.1.0-rc01
veröffentlicht. Die in der Version enthaltenen Commits finden Sie hier.
Wichtige Änderungen seit Version 2.0.0
- FTS: Room unterstützt jetzt Entitäten mit einer Zuordnungstabelle für FTS3 oder FTS4. Klassen, die mit
@Entity
annotiert sind, können jetzt zusätzlich mit@Fts3
oder@Fts4
annotiert werden, um eine Klasse mit einer Volltextsuchtabelle für die Zuordnung zu deklarieren. FTS-Optionen für die weitere Anpassung sind über die Methoden der Annotation verfügbar. - Ansichten: Mit der Annotation
@DatabaseView
kann jetzt eine Klasse als gespeicherte Abfrage deklariert werden, auch als Ansicht bezeichnet. - Coroutinen: DAO-Methoden können jetzt suspend-Funktionen sein. Fügen Sie
room-ktx
in Ihre Abhängigkeiten ein, um diese Funktion zu nutzen. Das ktx-Artefakt bietet auch die ErweiterungsfunktionRoomDatabase.withTransaction
zum Ausführen von Datenbanktransaktionen in einer Coroutine. - AutoValue: In Room können jetzt Klassen, die mit AutoValue annotiert sind, als Entitäten und POJOs deklariert werden. Die Room-Annotationen
@PrimaryKey
,@ColumnInfo
,@Embedded
und@Relation
können jetzt in den abstrakten Methoden einer mit AutoValue annotierten Klasse deklariert werden. Diese Anmerkungen müssen auch von@CopyAnnotations
begleitet werden, damit Room sie richtig interpretieren kann. - Zusätzliche Unterstützung für asynchrone Vorgänge: DAO-Methoden, die mit
@Insert
,@Delete
oder@Update
annotiert sind, sowie@Query
mitINSERT
-,DELETE
- oderUPDATE
-Anweisungen unterstützen jetzt die Rx-RückgabetypenCompletable
,Single
,Maybe
und den Guava-RückgabetypListenableFuture
. Außerdem können sie suspend-Funktionen sein. enableMultiInstanceInvalidation
ist eine neue API inRoomDatabase.Builder
, mit der die Ungültigmachung über mehrere Instanzen von RoomDatabase hinweg mit derselben Datenbankdatei möglich ist.fallbackToDestructiveMigrationOnDowngrade
ist eine neue API inRoomDatabase.Builder
, mit der die Datenbank bei einem Downgrade automatisch neu erstellt wird.ignoredColumns
ist eine neue API in der@Entity
-Annotation, mit der ignorierte Felder nach Namen aufgelistet werden können.- Room verwendet jetzt den primären Konstruktor von Kotlin in Datenklassen, sodass die Properties nicht als
vars
deklariert werden müssen.
Version 2.1.0-rc01
29. Mai 2019
Fehlerkorrekturen
- Es wurde ein Fehler bei der Initialisierung von Räumen behoben, der aufgrund einer bereits eingerichteten temp_store-Konfiguration auftreten konnte. b/132602198
- Es wurde eine Warnung zur Verwendung von doppelten Anführungszeichen für Nutzer mit SQLite 3.27.0 und höher behoben. b/131712640
- Ein Fehler wurde behoben, durch den der InvalidationTracker einen Absturz verursachte, wenn mehrere Validierungsprüfungen parallel ausgeführt wurden. b/133457594
Version 2.1.0-beta01
7. Mai 2019
androidx.room 2.1.0-beta01
wird ohne Änderungen gegenüber Version 2.1.0-alpha07 veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Version 2.1.0-alpha07
25. April 2019
API- und Verhaltensänderungen
- Die Erweiterungsfunktion
RoomDatabase.withTransaction
wurde so geändert, dass sie keinen Funktionsblock mit einemCoroutineScope
als Empfänger mehr akzeptiert. Dadurch wird verhindert, dass der zusätzlichecoroutineScope { }
-Wrapper übersprungen wird, der erforderlich ist, um Vorgänge im Transaktionsblock gleichzeitig auszuführen.
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem Room keinen TypeConverter für eine Kotlin-DAO-Funktion mit einem Parameter vom Typ „Collection“ finden konnte. b/122066791
Version 2.1.0-alpha06
22. März 2019
API- und Verhaltensänderungen
- Asynchrone Transaktionsabfragen werden jetzt serialisiert, sodass Room nicht mehr als einen Thread für die Ausführung von Datenbanktransaktionen verwendet.
RoomDatabase.Builder.setTransactionExecutor(Executor)
wurde hinzugefügt, um die Konfiguration des für Transaktionen zu verwendenden Executors zu ermöglichen. RoomDatabase.runInTransaction(Callable)
umschließt geprüfte Ausnahmen nicht mehr in RuntimeExceptions. b/128623748
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem der Invalidation Tracker die Beobachtung einer Inhaltstabelle beendete, wenn Beobachter sowohl für die Inhaltstabelle als auch für eine externe FTS-Inhaltstabelle hinzugefügt wurden. b/128508917
- Die
Room
-SQLite-Grammatik wurde an SQLite 3.24.0 angepasst. b/110883668
Version 2.1.0-alpha05
13. März 2019
Neue Funktionen
- Mit der Erweiterungsfunktion
RoomDatabase.withTransaction
können Sie Datenbanktransaktionen sicher in einer Coroutine ausführen. Die Funktionen für Raumerweiterungen sowie die Unterstützung für Coroutinen sind imroom-ktx
-Artefakt verfügbar. - Nicht abstrakte DAO-Methoden, die mit
@Transaction
annotiert sind, können jetzt suspend-Funktionen sein. b/120241587
API- und Verhaltensänderungen
- Das Artefakt
room-coroutines
wurde inroom-ktx
umbenannt. Die Benennung entspricht der anderer androidx-Artefakte. beginTransaction
,setTransactionSuccessful
undendTransaction
inRoomDatabase
wurden zugunsten vonrunInTransaction
und der Erweiterungsfunktionroom-ktx
withTransaction
eingestellt.
Fehlerkorrekturen
- Ein Fehler wurde behoben, durch den Tokenizer-Argumente verworfen wurden, wenn der verwendete Tokenizer SIMPLE war. b/125427014
- Ein Fehler wurde behoben, bei dem Room suspend-Funktionen mit Parametern, deren Typ eine innere Klasse war, nicht richtig identifizieren konnte. b/123767877
- Ein Fehler wurde behoben, bei dem die Abfrage für die verzögerte
@Query
-DAO-Methode mitINSERT
-,UPDATE
- oderDELETE
-Anweisungen im Hauptthread vorzeitig vorbereitet wurde. b/123695593 - Es wurden verschiedene Fehler behoben, bei denen Room falschen Code für bestimmte suspend-Funktionen generiert hat. b/123466702 und b/123457323
- Ein Fehler wurde behoben, durch den die Verwendung von eingestellten Methoden im generierten Code nicht richtig unterdrückt wurde. b/117602586
- Die Room-Abhängigkeit von androidx.sqlite wurde auf Version 1.0.2 aktualisiert. Diese Version enthält Korrekturen für die korrekte Verarbeitung beschädigter Datenbanken. b/124476912
Bekannte Probleme
- Room 2.1.0-alpha05 hängt vom
kotlinx-metadata-jvm
-Artefakt ab, das derzeit nicht in Maven Central verfügbar ist (KT-27991). Diese Abhängigkeit kann aufgelöst werden, indem Siemaven { url "https://kotlin.bintray.com/kotlinx/" }
zu Ihren Projektrepositories hinzufügen.
Version 2.1.0-alpha04
25. Januar 2019
Neue Funktionen
- DAO-Methoden, die mit
@Query
annotiert sind undINSERT
-,UPDATE
- oderDELETE
-Anweisungen enthalten, können jetzt die asynchronen TypenSingle
,Mayble
,Completable
undListenableFuture
zurückgeben. Außerdem können sie auch suspend-Funktionen sein. b/120227284
API- und Verhaltensänderungen
- Room gibt jetzt einen Fehler aus, wenn eine nicht abstrakte DAO-Methode, die mit
@Transaction
annotiert ist, einen asynchronen Typ wieSingle
,Mayble
,Completable
,LiveData
oderListenableFuture
zurückgibt. Da Transaktionen auf Threads beschränkt sind, ist es derzeit nicht möglich, dass Room eine Transaktion um eine Funktion herum startet und beendet, die möglicherweise Abfragen in verschiedenen Threads ausführt. b/120109336 OnConflictStrategy.FAIL
undOnConflictStrategy.ROLLBACK
wurden@Deprecated
, da sie sich mit den aktuellen SQLite-Bindungen von Android nicht wie vorgesehen verhalten. b/117266738
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem Room den TypeConverter eines Rückgabetyps nicht richtig verwendet hat, wenn die DAO-Methode eine suspend-Funktion war. b/122988159
- Ein Fehler wurde behoben, bei dem Room fälschlicherweise geerbte Suspend-Funktionen als nicht suspendierend identifiziert hat. b/122902595
- Ein Fehler wurde behoben, bei dem Room falschen Code generierte, wenn sich ein
@Embedded
-Feld in einer übergeordneten Klasse befand und in mehreren untergeordneten Klassen verwendet wurde. b/121099048 - Ein Problem wurde behoben, bei dem die Datenbank bei Aufruf von DAO-Suspend-Funktionen zwischen einem
beginTransaction()
und einemendTransaction()
in einen Deadlock geriet. b/120854786
Version 2.1.0-alpha03
4. Dezember 2018
API-Änderungen
- Für den FTS
tokenizer
in@Fts3
/@Fts4
wird jetzt ein String anstelle eines Enums verwendet. So können benutzerdefinierte Tokenizer von Room verwendet werden. Integrierte Tokenizer sind weiterhin inFtsOptions
als Stringkonstanten definiert. b/119234881
Neue Funktionen
- Coroutinen: DAO-Methoden können jetzt suspend-Funktionen sein. Zur Unterstützung von Suspend-Funktionen in Room wurde ein neues Artefakt veröffentlicht:
room-coroutines
. b/69474692 - DAO-Methoden, die mit
@Insert
,@Delete
oder@Update
annotiert sind, unterstützen jetztListenableFuture
als Rückgabetyp. b/119418331
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem Room fälschlicherweise versucht hat, einen Konstruktor mit Spalten in der
ignoredColumns
-Eigenschaft von@Entity
zu finden. b/119830714 - Ein Fehler wurde behoben, bei dem Room DAO-Methodenparameter in der generierten Implementierung nicht als „final“ markiert hat. b/118015483
- Ein Fehler wurde behoben, durch den der
Room
-Prozessor abstürzte, wenn ein Fehler bei einer Anfrage mit Sonderzeichen gemeldet wurde. b/119520136 - Ein Fehler wurde behoben, bei dem Room verschiedene andere
Collection
-Implementierungen als Argumente einesIN
-Ausdrucks abgelehnt hat. b/119884035 - Es wurde ein Fehler behoben, bei dem von Room zurückgegebene LiveData-Objekte bereinigt wurden, wenn sie dauerhaft beobachtet wurden. Dadurch wurden keine neuen Daten mehr ausgegeben. b/74477406
- Die Schließsperre von
RoomDatabase
wurde aktualisiert, um Sperrkonflikte zu reduzieren. b/117900450
Version 2.1.0-alpha02
30. Oktober 2018
Neue Funktionen
- Unterstützung für das Verweisen auf ein
@DatabaseView
in einem@Relation
hinzugefügt. b/117680932
Fehlerkorrekturen
- Ein Fehler wurde behoben, bei dem Room bei der Registrierung und Freigabe eines Rx-Rückgabetyps Festplatten-E/A-Vorgänge im Hauptthread ausgeführt hat. b/117201279
- Ein Fehler wurde behoben, bei dem Room keinen geeigneten Typkonverter für ein Feld in einer Kotlin-Entitätsklasse finden konnte. b/111404868
- Ein Fehler wurde behoben, bei dem Room falschen Code für eine
DAO
-Schnittstellenimplementierung mit einer Kotlin-Standardmethode ohne Argumente generierte. b/117527454 - Der
Room
-SQLite-Grammatikparser wurde aktualisiert. Dadurch wurde ein Leistungsproblem behoben, das zu langen Build-Zeiten geführt hat. b/117401230
Version 2.1.0-alpha01
8. Oktober 2018
Neue Funktionen
- FTS: Room unterstützt jetzt Entitäten mit einer Zuordnung zu einer FTS3- oder FTS4-Tabelle. Klassen, die mit
@Entity
annotiert sind, können jetzt zusätzlich mit@Fts3
oder@Fts4
annotiert werden, um eine Klasse mit einer Volltextsuchtabelle für die Zuordnung zu deklarieren. FTS-Optionen für weitere Anpassungen sind über die Methoden der Anmerkung verfügbar. b/62356416 - Ansichten: In Room kann jetzt mit der Annotation @DatabaseView eine Klasse als gespeicherte Abfrage deklariert werden, auch Ansicht genannt. b/67033276
- AutoValue: In Room können jetzt Klassen, die mit AutoValue annotiert sind, als Entitäten und POJOs deklariert werden. Die Raum-Annotationen
@PrimaryKey
,@ColumnInfo
,@Embedded
und@Relation
können jetzt in den abstrakten Methoden einer mit „AutoValue“ annotierten Klasse deklariert werden. Diese Anmerkungen müssen auch von@CopyAnnotations
begleitet werden, damit Room sie richtig interpretieren kann. b/62408420 - Unterstützung für zusätzliche Rx-Rückgabetypen: DAO-Methoden, die mit
@Insert
,@Delete
oder@Update
annotiert sind, unterstützen jetzt die Rx-RückgabetypenCompletable
,Single<T>
undMaybe<T>
. b/63317956 - Unveränderliche Typen mit
@Relation
: Bisher mussten Felder mit der Annotation@Relation
in Room festlegbar sein. Jetzt können sie auch Konstruktorparameter sein. enableMultiInstanceInvalidation
: Eine neue API inRoomDatabase.Builder
, mit der die Ungültigmachung über mehrere Instanzen von RoomDatabase hinweg mit derselben Datenbankdatei möglich ist. Dieser Mechanismus zur Inaktivierung mehrerer Instanzen funktioniert auch über mehrere Prozesse hinweg. b/62334005fallbackToDestructiveMigrationOnDowngrade
: Eine neue API inRoomDatabase.Builder
, mit der die Datenbank bei einem Downgrade automatisch neu erstellt wird. b/110416954ignoredColumns
: Eine neue API in der@Entity
-Annotation, mit der ignorierte Felder nach Namen aufgelistet werden können. Nützlich, um geerbte Felder für eine Entität zu ignorieren. b/63522075
API- und Verhaltensänderungen
mCallback
undmDatabase
inRoomDatabase
sind jetzt@Deprecated
und werden in der nächsten Hauptversion von Room entfernt. b/76109329
Fehlerkorrekturen
- Es wurden zwei Probleme behoben, bei denen Room bei der Initialisierung nicht richtig von einer beschädigten Datenbank oder einer fehlerhaften Migration wiederhergestellt wurde. b/111504749 und b/111519144
- Room verwendet jetzt den primären Kotlin-Konstruktor in Datenklassen, sodass die Felder nicht als
vars
deklariert werden müssen. b/105769985
Version 2.0.0
Version 2.0.0
1. Oktober 2018
androidx.room 2.0.0
wird ohne Änderungen gegenüber Version 2.0.0-rc01 veröffentlicht.
Version 2.0.0-rc01
20. September 2018
androidx.room 2.0.0-rc01
wird ohne Änderungen gegenüber Version 2.0.0-beta01 veröffentlicht.
Version 2.0.0-beta01
2. Juli 2018
API- und Verhaltensänderungen
RoomDatabase.Builder.setQueryExecutor()
wurde hinzugefügt, um anzupassen, wo Abfragen ausgeführt werden- RxJava2-Unterstützung
Observable
hinzugefügt - Generierte DAO- und Datenbankimplementierungen sind jetzt final
Fehlerkorrekturen
- Klassen-/Feldname im Fehler „cannot find getter for field“ angeben b/73334503
- Die Abwärtskompatibilität von RoomOpenHelper mit älteren Versionen von Room wurde korrigiert. b/110197391
Abhängigkeiten vor AndroidX
Für die Vor-AndroidX-Versionen von Room müssen Sie diese Abhängigkeiten einfügen:
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"
}
Version 1.1.1
Version 1.1.1
19. Juni 2018
Raum 1.1.1
ist identisch mit Raum 1.1.1-rc1
.
Version 1.1.1-rc1
16. Mai 2018
Wir empfehlen dringend, bei Migrationen Room 1.1.1-rc1
anstelle von 1.1.0
zu verwenden.
Ein Fehler wurde behoben, durch den die Initialisierung nach der Migration in Room nicht richtig verarbeitet wurde. b/79362399
Version 1.1.0
Version 1.1.0-beta3
19. April 2018
Fehlerkorrekturen
- Korrektur des Kompilierungsfehlers, wenn ein Kotlin-POJO auf ein Beziehungsobjekt verweist, das in Java definiert wurde b/78199923
Version 1.1.0-beta2
5. April 2018
Fehlerkorrekturen
Ein kritischer Fehler in den Implementierungen von
Room
RxSingle
undMaybe
wurde behoben. Dabei wurde die Abfrage vorzeitig wiederverwendet, was zu Problemen führte, wenn Sie den zurückgegebenenSingle
- oderMaybe
-Instanzen mehr als einen Beobachter hinzugefügt haben. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables]
VACUUM
die Datenbank nicht, wenn sie innerhalb einer Transaktion aufgerufen wird. b/77235565
Version 1.1.0-beta1
21. März 2018
API-Änderungen
- Aufgrund des API-Überprüfungsfeedbacks wird
@RawQuery
nicht mehr akzeptiert, wennString
als Suchparameter übergeben wird. Sie müssen [SupportSQLiteQuery][ref-SupportSQLiteQuery] verwenden. Mit [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] können Sie ganz einfach eine Instanz von [SupportSQLiteQuery][ref-SupportSQLiteQuery] mit Argumentunterstützung erstellen. - Die Methode [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] von RoomDatabase.Builder akzeptiert jetzt
vararg int
anstelle vonvararg Integer
.
Fehlerkorrekturen
- [RoomDatabase.clearAllTables][ref-clearAllTables] versucht jetzt, Speicherplatz an das Betriebssystem zurückzugeben, indem ein WAL-Checkpoint festgelegt und die Datenbank
VACUUM
wird. - [
@RawQuery
][ref-RawQuery] akzeptiert jetzt jedes Pojo für das AttributobservedEntities
, solange das Pojo über seine FelderEmbedded
oderRelation
auf eine oder mehrere Entitäten verweist. b/74041772 - Paging: Die DataSource-Implementierung von Room verarbeitet jetzt korrekt Abhängigkeiten von mehreren Tabellen (z. B. Beziehungen und Joins). Bisher wurden dadurch keine neuen Ergebnisse ausgelöst oder die Kompilierung schlug fehl. b/74128314
Version 1.1.0-alpha1
22. Januar 2018
Neue Funktionen
RawQuery
: Mit dieser neuen API kann die SQL-Anweisung als Abfrageparameter an@Dao
-Methoden übergeben werden. b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: Diese neue API inRoomDatabase.Builder
ermöglicht eine genauere Steuerung der Startschemaversionen, für die destruktive Migrationen zulässig sind (im Vergleich zu „fallbackToDestructiveMigration“). b/64989640- Room unterstützt jetzt nur noch neuere Paging APIs (Alpha 4+). Die Unterstützung für die eingestellte
LivePagedListProvider
wurde eingestellt. Wenn Sie die neue Room-Alphaphase nutzen möchten, müssen Sie die Paging-Versionalpha-4
oder höher verwenden und vonLivePagedListProvider
zuLivePagedListBuilder
wechseln, sofern Sie das noch nicht getan haben.
Fehlerkorrekturen
- Verbesserte Unterstützung für Kotlin-Kapt-Typen. b/69164099
- Die Reihenfolge der Felder macht das Schema nicht mehr ungültig. b/64290754