Zimmer

Die Room-Persistenzbibliothek bietet eine Abstraktionsschicht für SQLite, die einen robusteren Datenbankzugriff ermöglicht und gleichzeitig die volle Leistungsfähigkeit von SQLite nutzt.
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.

Neues Problem erstellen

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 einen SupportSQLiteDatabase-Wrapper von RoomDatabase mit einer konfigurierten SQLiteDriver abzurufen. Verwenden Sie die neue Erweiterungsfunktion RoomDatabase.getSupportWrapper(), um den Wrapper abzurufen. Dies ist ein Kompatibilitätsartefakt, um die Verwendung von SupportSQLiteDatabase, die normalerweise von RoomDatabase.openHelper.writableDatabase abgerufen wird, auch dann beizubehalten, wenn die Room-Datenbank mit einem SQLiteDriver konfiguriert ist. Dieser Wrapper ist nützlich für die inkrementelle Migration von Codebases, die SQLiteDriver einführen möchten, aber die SupportSQLite-APIs in großem Umfang verwenden und trotzdem die Vorteile von BundledSQLiteDriver 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 ein SQLiteDriver 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 zu SQLException: 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 ein RawRoomQuery 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 mit PagingSource 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 mit ByteBuffer auf Nicht-Android- und Nicht-JVM-Plattformen zu unterstützen. (I75543, b/367205685)
  • Fügen Sie SQLiteStatement.getColumnType() zusammen mit den verschiedenen SQLITE_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 einem Error 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-API InvalidationTracker.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, da Cursor 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 Funktion initialize 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:

  1. Definieren Sie ein „expect“-Objekt, das RoomDatabaseConstructor implementiert.

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. Objekt mit der @Database-Deklaration verknüpfen mit @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. 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 namens RoomRawQuery, die in Bezug auf die Aufnahme des Roh-SQL-Strings und einer Funktion zum Binden von Argumenten in eine Anweisung ähnlich wie SupportSQLiteQuery ist. @RawQuery-annotierte Funktionen können jetzt RoomRawQuery als einzigen Parameter akzeptieren. (Iea844, b/330586815)
  • Fügen Sie eine Überladung von setQueryCallback() hinzu, die ein CoroutineContext 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 in SQLite und BundledSQLiteKt in BundledSQLite umbenannt. (I8b501)

Fehlerkorrekturen

  • Ein Fehler wurde behoben, bei dem eine RoomDatabase bei Verwendung der AndroidSQLiteDriver 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 generierten RoomDatabase-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 ein RoomDatabase entweder mit Executors mit setQueryExecutor 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 zur SQLite 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 und RoomDatabase.useWriterConnection.
  • Für verschiedene Room-bezogene Callbacks gibt es jetzt eine überladene Version, die SQLiteConnection anstelle von SupportSQLiteDatabase 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 in androidx.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 als LoadStateUpdate von LoadResult.Error mit dem Throwable weitergegeben. Dieser Fehlerstatus ist über PagingDataAdapter.loadStateFlow(Views) oder LazyPagingItems.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 die 2067 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 mit columnName 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() von Room 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, wurde withTransaction() umgestaltet. Es wird nicht mehr auf einen Steuerungsjob angewiesen, sondern führt den unterbrechenden Transaktionsblock im Transaktions-Thread aus runBlocking 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 in InvalidationTracker jetzt onInvalidate() in Observer deklarieren müssen, um einen Parameter vom Typ Set und nicht MutableSet 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 und room-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 einer IllegalStateException aus. (I328dd)
  • Es wurde ein inkompatibler Quellcode für Getter / Properties von getOpenHelper, getQueryExecutor und getTransactionExecutor 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

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 jetzt onInvalidate() in Observer deklarieren müssen, um einen Parameter vom Typ Set und nicht MutableSet 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 in room-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. @AutoMigrationWeitere Informationen finden Sie in der Dokumentation.
  • Dependency Injection in Auto Migrations: @ProvidedAutoMigrationSpec ist eine neue API zum Deklarieren, dass ein AutoMigrationSpec zur Laufzeit über RoomDatabase.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ährend runMigrationsAndValidate 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, die androidx.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 sind Map, SparseArray, LongSparseArray sowie ImmutableMap, ImmutableSetMultimap und ImmutableListMultimap 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 über RoomDatabase.Builder übergeben wird. Sie kann also überschrieben werden. Bisher wurde Dispatchers.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

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 sind Map sowie ImmutableMap, ImmutableSetMultimap und ImmutableListMultimap 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’s Observable oder Coroutines Flow eingebunden werden.

Room-Paging

  • androidx.room:room-paging wurde veröffentlicht und bietet native Paging 3.0-Unterstützung für Room-Abfragen, die androidx.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 ab Key geladen, wobei Key das erste geladene Element ist. Das weicht vom bisherigen Verhalten ab, bei dem LoadParams.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ährend runMigrationsAndValidate 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 ein AutoMigrationSpec zur Laufzeit über RoomDatabase.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 der InvalidationTracker-Callback manchmal ungültig, zu spät oder gar nicht aufgerufen wurde. Vielen Dank an Uli 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ückgabetyp androidx.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 durch ksp ersetzen. Verwenden Sie beispielsweise ksp 'androidx.room:room-compiler:2.3.0-beta02' anstelle von kapt '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 über RoomDatabase.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 in RoomDatabase.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 in RoomDatabase durch Collections.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ückgabetyp androidx.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 Spaltenkonflikte room.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 Compileroption expandProjection 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 eine RoomDatabase 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ährend createFromFile() 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 Attribut defaultValue, 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 Eigenschaft associateBy, 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 Typ List oder Set 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 Attribut targetEntity, 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ückgabetyp Flow<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ückgabetyp Channel<T> ist ein Fehler. Stattdessen sollten Sie Flow verwenden und dann die benachbarten Funktionen nutzen, um Flow in Channel 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 Namen SongIdAndTitle mit nur zwei Feldern zurückgibt. Room schreibt die Abfrage dann in SELECT id, title FROM Song um, sodass die Mindestanzahl an Spalten zum Erfüllen des Rückgabetyps abgerufen wird. Dadurch wird die CURSOR_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ückgabetyp Flow<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ückgabetyp Channel<T> ist ein Fehler. Stattdessen sollten Sie Flow verwenden und dann die benachbarten Funktionen nutzen, um Flow in Channel 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 Namen SongIdAndTitle mit nur zwei Feldern zurückgibt. Room schreibt die Abfrage dann in SELECT id, title FROM Song um, sodass die Mindestanzahl an Spalten zum Erfüllen des Rückgabetyps abgerufen wird. Dadurch wird die CURSOR_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, die RoomDatabase.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 vergleichbaren ByteBuffer 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 eine RoomDatabase 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ährend createFromFile() 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 Attribut defaultValue, mit dem der Standardwert einer Spalte angegeben werden kann. Standardwerte sind Teil eines Datenbankschemas und werden bei Migrationen validiert, sofern angegeben. b/64088772

    Hinweis: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 Eigenschaft associateBy, 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 Typ List oder Set 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 Attribut targetEntity, 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 Erweiterungsfunktion RoomDatabase.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 mit INSERT-, DELETE- oder UPDATE-Anweisungen unterstützen jetzt die Rx-Rückgabetypen Completable, Single, Maybe und den Guava-Rückgabetyp ListenableFuture. Außerdem können sie suspend-Funktionen sein.
  • enableMultiInstanceInvalidation ist eine neue API in RoomDatabase.Builder, mit der die Ungültigmachung über mehrere Instanzen von RoomDatabase hinweg mit derselben Datenbankdatei möglich ist.
  • fallbackToDestructiveMigrationOnDowngrade ist eine neue API in RoomDatabase.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 einem CoroutineScope als Empfänger mehr akzeptiert. Dadurch wird verhindert, dass der zusätzliche coroutineScope { }-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 im room-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 in room-ktx umbenannt. Die Benennung entspricht der anderer androidx-Artefakte.
  • beginTransaction, setTransactionSuccessful und endTransaction in RoomDatabase wurden zugunsten von runInTransaction und der Erweiterungsfunktion room-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 mit INSERT-, UPDATE- oder DELETE-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 Sie maven { 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 und INSERT-, UPDATE- oder DELETE-Anweisungen enthalten, können jetzt die asynchronen Typen Single, Mayble, Completable und ListenableFuture 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 wie Single, Mayble, Completable, LiveData oder ListenableFuture 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 und OnConflictStrategy.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 einem endTransaction() 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 in FtsOptions 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 jetzt ListenableFuture 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 eines IN-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ückgabetypen Completable, Single<T> und Maybe<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 in RoomDatabase.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/62334005
  • fallbackToDestructiveMigrationOnDowngrade: Eine neue API in RoomDatabase.Builder, mit der die Datenbank bei einem Downgrade automatisch neu erstellt wird. b/110416954
  • ignoredColumns: 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 und mDatabase in RoomDatabase 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 Rx Single und Maybe wurde behoben. Dabei wurde die Abfrage vorzeitig wiederverwendet, was zu Problemen führte, wenn Sie den zurückgegebenen Single- oder Maybe-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, wenn String 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 von vararg 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 Attribut observedEntities, solange das Pojo über seine Felder Embedded oder Relation 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/71458963
  • fallBackToDestructiveMigrationsFrom: Diese neue API in RoomDatabase.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-Version alpha-4 oder höher verwenden und von LivePagedListProvider zu LivePagedListBuilder 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