Zimmer

Die Room Persistence Library bietet eine Abstraktionsebene über SQLite, die einen robusteren Datenbankzugriff ermöglicht und gleichzeitig die volle Leistung von SQLite nutzt.
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpharelease
29. November 2023 2.6.1 - - -

Abhängigkeiten deklarieren

Zum Hinzufügen einer Abhängigkeit von Room müssen Sie Ihrem Projekt das Maven-Repository von Google hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

Zu den Abhängigkeiten für Room gehören das Testen von Raummigrationen und Room RxJava

Fügen Sie der Datei build.gradle für Ihre Anwendung oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:

Groovig

dependencies {
    def room_version = "2.6.1"

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

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

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

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

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

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

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

Kotlin

dependencies {
    val room_version = "2.6.1"

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

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

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

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

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

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

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

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

Informationen zur Verwendung des KAPT-Plug-ins finden Sie in der KAPT-Dokumentation.

Informationen zur Verwendung des KSP-Plug-ins finden Sie in der Kurzanleitung für KSP.

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.

Bei Bibliotheken, die nicht unter Android laufen (z.B. Gradle-Modulen, die nur Java oder Kotlin verwenden) können Sie androidx.room:room-common verwenden, um Raumanmerkungen zu verwenden.

Compiler-Optionen konfigurieren

Für den Chatroom gibt es die folgenden Optionen für den Annotationsprozessor.

room.schemaLocation directory
Ermöglicht den Export von Datenbankschemas in JSON-Dateien im angegebenen Verzeichnis. Weitere Informationen finden Sie unter Raummigrationen.
room.incremental boolean
Aktiviert den inkrementellen Annotationsprozess von Gradle. Der Standardwert ist true.
room.generateKotlin boolean
Erstellen Sie Kotlin-Quelldateien anstelle von Java. Wichtige Verkaufsargumente erforderlich. Der Standardwert ist false. Weitere Informationen finden Sie in den Hinweisen zu Version 2.6.0.

Room Gradle-Plug-in verwenden

Ab Room-Version 2.6.0 können Sie mit dem Room Gradle-Plug-in Optionen für den Room-Compiler 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 im Cache speicherbare Builds zu haben.

Definieren Sie das Plug-in und seine Version in der Gradle-Build-Datei auf oberster Ebene, um das Plug-in hinzuzufügen.

Groovig

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.

Groovig

plugins {
    id 'androidx.room'
}

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

Kotlin

plugins {
    id("androidx.room")
}

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

Wenn du das Room Gradle-Plug-in verwendest, musst du eine schemaDirectory festlegen. Dadurch werden der Room-Compiler und die verschiedenen Kompilierungsaufgaben und seine Back-Ends (Javac, KAPT, KSP) so konfiguriert, dass Schemadateien in Ordner mit bestimmten Geschmacksrichtungen ausgegeben werden, z. B. schemas/flavorOneDebug/com.package.MyDatabase/1.json. Diese Dateien sollten in das Repository eingecheckt werden, das für die Validierung und automatische Migration verwendet werden soll.

Einige Optionen können nicht in allen Versionen des Room Gradle-Plug-ins konfiguriert werden, auch wenn sie vom Room-Compiler unterstützt werden. In der folgenden Tabelle sind die einzelnen Optionen und die Version des Room Gradle-Plug-ins aufgeführt, das Unterstützung zum Konfigurieren dieser Option mit der Erweiterung room bietet. Wenn Ihre Version niedriger ist oder die Option noch nicht unterstützt wird, können Sie stattdessen Anmerkungsprozessoroptionen verwenden.

Option Seit Version
room.schemaLocation (erforderlich) 2.6.0
room.incremental -
room.generateKotlin -

Optionen für den Annotationsprozessor 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 Annotationsprozessoroptionen konfigurieren. Eine Beschreibung hierzu finden Sie unter Build-Abhängigkeiten hinzufügen. Wie Sie Annotationsoptionen angeben, hängt davon ab, ob Sie KSP oder KAPT für Zimmer verwenden.

Groovig

// 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, müssen Sie beim Hinzufügen dieser Option ein CommandLineArgumentsProvider verwenden, damit Gradle das Verzeichnis bei der Durchführung aktueller Prüfungen erkennt. Unter Raumdatenbank migrieren wird eine vollständige Implementierung von CommandLineArgumentsProvider angezeigt, die den Schemaspeicherort angibt.

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Lassen Sie 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 eine neue erstellen. Durch Klicken auf die Stern-Schaltfläche können Sie zu einem vorhandenen Problem abstimmen.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 2.6

Version 2.6.1

29. November 2023

androidx.room:room-*:2.6.1 wird freigegeben. Version 2.6.1 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem im generierten Code wurde behoben, bei dem der Standardwert für Spalten vom Typ „Double“ in EntityCursorConverter auf 0 statt auf 0,0 festgelegt wurde. Eine mögliche Korrektur für einen ähnlichen Grenzfall für Spalten vom Typ Float wurde ebenfalls enthalten. (Id75f5, b/304584179)
  • Ausnahmen, die von PagingSource-Ladevorgängen ausgelöst werden, werden jetzt als LoadStateUpdate von LoadResult.Error weitergegeben, das das Throwable enthält. Dieser Fehlerstatus kann über PagingDataAdapter.loadStateFlow(Views) oder LazyPagingItems.loadState(Compose) beobachtet werden. Beachten Sie, dass dies eine Verhaltensänderung darstellt, bei der in der Vergangenheit Ladefehler als Ausnahme von der dao-Methode ausgelöst wurden, die die Last ausgelöst hat. (I93887, b/302708983)

Version 2.6.0

18. Oktober 2023

androidx.room:room-*:2.6.0 wird freigegeben. Version 2.6.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.5.0

  • Die Option zum Aktivieren der Kotlin-Codegenerierung (oder „Kotlin CodeGen“) ist jetzt in Room KSP verfügbar. (4297ec0) Wenn Sie die Kotlin-CodeGen in Room aktivieren möchten, fügen Sie den Prozessoroptionen für KSP den Optionsnamen room.generateKotlin hinzu. Weitere Informationen zum Bestehen der Prozessoroptionen für KSP finden Sie in der Dokumentation zu wichtigen Verkaufsargumenten.

Hinweis:Bei der Verwendung der Kotlin-CodeGen wurden zusätzliche Einschränkungen eingeführt. Abstrakte Attribute als DAO-Getter oder DAO-Abfragen in Kotlin CodeGen sind nicht zulässig. Stattdessen wird erwartet, dass sie in Funktionen umgeschrieben werden, um die falsche Annahme zu vermeiden, dass der Attributwert unveränderlich ist und ein festes gespeichertes Ergebnis hat. Eine weitere Einschränkung besteht darin, dass Rückgabetypen für die Nullable-Sammlung in Room für die Kotlin-CodeGen nicht mehr zulässig sind.

Warnung:Wenn Sie die Kotlin-CodeGen verwenden, gelten für Ihre Projekte möglicherweise strengere Null-Zulässigkeiten. In Kotlin CodeGen ist die Null-Zulässigkeit von Typargumenten wichtig, während dies in Java größtenteils ignoriert wird. Angenommen, Sie haben den Rückgabetyp „Flow<foo\>“ und die Tabelle ist leer. In Java CodeGen verursacht dies keine Probleme, in Kotlin CodeGen jedoch eine Fehlermeldung. Um dies zu vermeiden, müssen Sie `Flow<foo?\>` verwenden, vorausgesetzt, ein NULL-Wert wird ausgegeben. </foo?\></foo\>

  • Das neue Artefakt für das Room Gradle-Plug-in wurde dem Room mit der ID androidx.room hinzugefügt. Damit werden verschiedene Probleme in Room beseitigt, die die Ein- und Ausgaben von Schemas über die Gradle-Annotationsoptionen des Prozessors betreffen. Weitere Informationen finden Sie in den Versionshinweisen für Raumversion 2.6.0-alpha02.
  • Wertklassen in Zimmerentitäten werden jetzt für KSP unterstützt. (4194095)
  • Verschachtelte Karten-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 freigegeben. 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 freigegeben. Version 2.6.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Wenn die Sonderfall-Ausnahme SQLite während des Upsert-Vorgangs verarbeitet wird, wenn die Ausnahme 2067 SQLITE_CONSTRAINT_UNIQUE während eines Upsert-Vorgangs ausgelöst wird, sollte mit Upsert eine Aktualisierung durchgeführt werden. (If2849, b/243039555)

Version 2.6.0-alpha03

9. August 2023

androidx.room:room-*:2.6.0-alpha03 wird freigegeben. Version 2.6.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Verschachtelte Karten-Rückgabetypen in DAO-Funktionen werden jetzt in Room unterstützt. (I13f48, 203008711)

API-Änderungen

  • Die neue Typanmerkung @MapColumn wurde erstellt, um @MapInfo zu ersetzen, das mittlerweile verworfen wurde. Für jeden Spaltennamen (keyColumnName, valueColumnName oder beides), 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 im Rückgabetyp der DAO-Funktion verwiesen wird (den Schlüssel oder Wert der Map). Das liegt daran, dass die Annotation @MapColumn direkt für das Typargument innerhalb des Rückgabetyps einer DAO-Funktion und nicht für die Funktion selbst wie @MapInfo verwendet wird. Weitere Informationen finden Sie in der @MapColumn-Dokumentation. (Ib0305, b/203008711)
  • Aktualisierte API-Dateien, um die Kompatibilitätsunterdrückung zu erklären (I8e87a, b/287516207)
  • Die APIs für das Room Gradle-Plug-in wurden aktualisiert. Es sind jetzt nicht mehr variantenspezifische Konfigurationen erforderlich. Das bedeutet, dass das Plug-in einen globalen Speicherort für alle Varianten akzeptieren kann, ohne mehrere Verzeichnisse zu erstellen. Das ermöglicht reibungslosere Migrationen. Gleichzeitig ist es aber auch flexibel genug, um Varianten manuell zu konfigurieren oder Typschemas zu erstellen, ohne dabei die Vorteile des Plug-ins (reproduzierbare und im Cache speicherbare Builds) zu nutzen. (I09d6f, b/278266663)

Fehlerkorrekturen

  • Potenzielle Sicherheitslücke bezüglich Speicherlecks in QueryInterceptorStatement wurde behoben. (I193d1)
  • Fehlerhaftes Verhalten in der Funktion QueryInterceptorDatabase execSQL() wurde behoben. Iefdc8

Version 2.6.0-alpha02

21. Juni 2023

androidx.room:room-*:2.6.0-alpha02 wird freigegeben. Version 2.6.0-alpha02 enthält diese Commits.

Room Gradle-Plug-in

Dieser neue Release enthält ein neues Artefakt für das Room Gradle-Plug-in mit der ID androidx.room, das verschiedene Probleme in Room in Bezug auf die Ein- und Ausgabe von Schemas über Gradle-Annotationsprozessoroptionen löst. 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 so konfiguriert sind, dass sie reproduzierbare und im Cache speicherbare Builds enthalten. Das Plug-in bietet eine DSL zum Konfigurieren des Basisschemas des Schemas:

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

Das Plug-in konfiguriert dann den Room-Compiler und die verschiedenen Kompilierungsaufgaben und seine Back-Ends (Javac, KAPT, KSP) so, dass Schemadateien in Ordner mit bestimmten Geschmacksrichtungen ausgegeben werden, z.B. schemas/flavorOneDebug/com.package.MyDatabase/1.json. Wie immer werden diese Dateien für die Validierung und automatische Migration im Repository eingecheckt. Bei der Migration zum Plug-in anstelle der Optionen des Annotationsprozessors müssen die vorhandenen Schemadateien in die generierten Flavor-Verzeichnisse kopiert werden, die vom Plug-in erstellt wurden. Dies ist ein einmaliger Migrationsvorgang, der manuell ausgeführt werden muss. Die Schemadokumentation unter developers.android.com wird in Zukunft aktualisiert, sobald Feedback vorliegt und das Plug-in stabil ist. Probieren Sie es also am besten gleich aus.

API-Änderungen

  • RoomDatabase.QueryCallback wurde als funktionierende Schnittstelle definiert, die SAM-Conversion-Nutzungen ermöglicht. (Iab8ea, b/281008549)

Fehlerkorrekturen

  • Behebung des Problems, das bei der Instanziierung 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 freigegeben. Version 2.6.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Unterstützung von Mehrwertklassen 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 (4297ec0) aktiviert werden. Wenn Sie die Kotlin-CodeGen in Room aktivieren möchten, fügen Sie den Prozessoroptionen für KSP den Optionsnamen room.generateKotlin hinzu. Weitere Informationen zum Bestehen der Prozessoroptionen für KSP finden Sie in der Dokumentation zu wichtigen Verkaufsargumenten.

Hinweis:Bei der Verwendung der Kotlin-CodeGen wurden zusätzliche Einschränkungen eingeführt. Abstrakte Attribute als DAO-Getter oder DAO-Abfragen in Kotlin CodeGen sind nicht zulässig. Stattdessen wird erwartet, dass sie in Funktionen umgeschrieben werden, um die falsche Annahme zu vermeiden, dass der Attributwert unveränderlich ist und ein festes gespeichertes Ergebnis hat. Eine weitere Einschränkung besteht darin, dass Rückgabetypen für die Nullable-Sammlung in Room für die Kotlin-CodeGen nicht mehr zulässig sind.

Warnung:Wenn Sie die Kotlin-CodeGen verwenden, gelten für Ihre Projekte möglicherweise strengere Null-Zulässigkeiten. In Kotlin CodeGen ist die Null-Zulässigkeit von Typargumenten wichtig, während dies in Java größtenteils ignoriert wird. Angenommen, Sie haben den Rückgabetyp „Flow<foo\>“ und die Tabelle ist leer. In Java CodeGen verursacht dies keine Probleme, in Kotlin CodeGen jedoch eine Fehlermeldung. Um dies zu vermeiden, müssen Sie `Flow<foo?\>` verwenden, vorausgesetzt, ein NULL-Wert wird ausgegeben. </foo?\></foo\>

API-Änderungen

  • Schutz vor bedeutungsloser Nutzung von Sammlungen, die Nullwerte zulassen, in DAO-Methodenrückgabetypen. (I777dc, b/253271782, b/259426907)
  • Fügen Sie eine API zum Erstellen eines Ablaufs hinzu, der Änderungen des Entwertungs-Trackers ausgibt. Die API ist nützlich, um Streams zu erstellen, die auf Datenbankänderungen reagieren müssen. (I8c790, b/252899305)

Fehlerkorrekturen

  • Abstrakte Attribute als DAO-Getter oder DAO-Abfragen in der Kotlin-Codegenerierung nicht zulassen. Stattdessen sollten sie als Funktionen umgeschrieben werden, um die falsche Annahme zu vermeiden, dass der Attributwert 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 freigegeben. Version 2.5.2 enthält diese Commits.

Fehlerkorrekturen

  • Inkompatibilitätsproblem mit „kotlinx-metadata-jvm“ behoben 386d5c
  • Behebe ein Problem, bei dem Room einen Fehler ausgibt, wenn er in einem Robolectric-Test verwendet wird. (f79bea, b/274924903)

Version 2.5.1

Version 2.5.1

22. März 2023

androidx.room:room-*:2.5.1 wird freigegeben. Version 2.5.1 enthält diese Commits.

Fehlerkorrekturen

  • Prüfen Sie das übergeordnete Verzeichnis der Datenbank in FrameworkSQLiteHelper nicht, wenn die Datenbank bereits geöffnet ist. (5de86b8)
  • Prüfen Sie mit einer isOpenInternal-Prüfung, ob die Datenbank bereits geöffnet ist. e91fb35:
  • Die Bearbeitung von nicht eintretenden Anfragen in acquireTransactionThread() von Room wurde jetzt verbessert. (219f98b) Während einer angehaltenen Transaktion verwendet Room einen Thread des Transaktions-Executors, startet eine Ereignisschleife und sendet an den Datenbank-Vorgang eine Ereignisschleife, damit alle Datenbankvorgänge in der Transaktionskoroutine gekapselt werden. Es wird normalerweise erwartet, dass sich der Transaktionsthread von dem Thread unterscheidet, der die Transaktion startet, aber in einigen Fällen sind sie identisch. Um solche wiederauftretenden Fälle zu verarbeiten, wurde die withTransaction() so umgestaltet, dass sie nicht mehr von einem Kontrolljob abhängig ist. Stattdessen führt sie den sperrenden Transaktionsblock aus dem runBlocking im Transaktionsthread 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 wurden veröffentlicht. Version 2.5.0 enthält diese Commits.

Version 2.5.0

11. Januar 2023

androidx.room:room-*:2.5.0 wird freigegeben. Version 2.5.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.4.0

  • Alle room-runtime-Quellen wurden von Java zu Kotlin konvertiert. Wenn sich Ihr Code in Kotlin befindet, kann es aufgrund der Konvertierung der Bibliothek zu Kotlin zu Problemen mit der Kompatibilität mit Quellen kommen. Eine bekannte, mit der Quelle nicht kompatible Änderung besteht beispielsweise darin, dass Sie in InvalidationTracker jetzt onInvalidate() in Observer deklarieren müssen, damit ein Parameter vom Typ Set und nicht MutableSet verwendet wird. Außerdem wurden bestimmte Getter-Methoden in Eigenschaften konvertiert, für die die Syntax für den Attributzugriff bei Kotlin-Dateien erforderlich ist. Bitte melde den Fehler, falls erhebliche Inkompatibilitäten vorliegen.
  • Eine neue Anmerkung für Verknüpfungen wurde hinzugefügt: @Upsert. Diese versucht, eine Entität einzufügen, wenn kein Eindeutigkeitskonflikt besteht, oder die Entität zu aktualisieren, wenn es einen Konflikt gibt. (I7aaab, b/241964353)
  • Die neuen Artefakte room-paging-rxjava2, room-paging-rxjava3 und room-paging-guava wurden zur Unterstützung von Raumseiten hinzugefügt.
  • Es wurden APIs zur Bereitstellung von Schlüssel- und Werttabellennamen zur Unterscheidung in @MapInfo (Icc4b5) hinzugefügt.

Version 2.5.0-rc01

7. Dezember 2022

androidx.room:room-*:2.5.0-rc01 wird freigegeben. 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 freigegeben. Version 2.5.0-beta02 enthält diese Commits.

API-Änderungen

  • Korrigieren Sie verschiedene APIs, die Abfrageargumente von Invariant (Array<Any?>) bis Kontravariante (Array<out Any?>) verwenden, um dem Java-Arrayverhalten zu entsprechen. (b/253531073)

Version 2.5.0-beta01

5. Oktober 2022

androidx.room:room-*:2.5.0-beta01 wird freigegeben. Version 2.5.0-beta01 enthält diese Commits.

API-Änderungen

  • Beschränken Sie die Mindestversion, die @Upsert unterstützt, auf API 16. Das liegt daran, dass ein Primärschlüssel-Einschränkungskonflikt in älteren APIs nicht identifiziert werden kann. (I5f67f, b/243039555)

Fehlerkorrekturen

  • Schattentabellen wurden behoben, die fälschlicherweise in die .json-Schemadateien exportiert wurden und dadurch beschädigt wurden. (I4f83b, b/246751839)

Version 2.5.0-alpha03

24. August 2022

androidx.room:room-*:2.5.0-alpha03 wird freigegeben. Version 2.5.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Eine neue Anmerkung für Verknüpfungen wurde hinzugefügt: @Upsert. Diese versucht, eine Entität einzufügen, wenn kein Eindeutigkeitskonflikt besteht, oder die Entität zu aktualisieren, wenn es einen Konflikt gibt. (I7aaab, b/241964353)

Fehlerkorrekturen

  • Bei der automatischen Migrationsprüfung für den Fremdschlüssel wird jetzt ein SQLiteConstraintException anstelle eines IllegalStateException ausgegeben. (I328dd)
  • Eine inkompatible Änderung der Kotlin-Quelle für Getter / Attribute von getOpenHelper, getQueryExecutor und getTransactionExecutor wurde korrigiert. (Iad0ac)

Version 2.5.0-alpha02

1. Juni 2022

androidx.room:room-*:2.5.0-alpha02 wird freigegeben. 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/64}

    Hinweis:Aufgrund der Konvertierung der Bibliothek zu Kotlin kann es zu Kompatibilitätsproblemen mit Quellen kommen. Wenn sich Ihr Code in Kotlin befand und die alte Version von Room aufgerufen wurde, muss die neue Version diese Fälle bewältigen. Eine bekannte, mit der Quelle nicht kompatible Änderung besteht beispielsweise darin, dass Sie in InvalidationTracker jetzt onInvalidate() in Observer deklarieren müssen, damit ein Parameter vom Typ Set und nicht MutableSet verwendet wird.

  • Es wurden APIs zur Bereitstellung von Schlüssel- und Werttabellennamen zur Unterscheidung in @MapInfo (Icc4b5) hinzugefügt.
  • Ein Problem mit der Quellkompatibilität wurde behoben, damit @Ignore in Attribut-Getter wieder zugelassen werden kann. Ifc2fb

Fehlerkorrekturen

  • Heuristischer Algorithmus zur Spaltenauflösung doppelt vorhanden. Room versucht jetzt, mehrdeutige Spalten in einer Mehrfachkartenabfrage aufzulösen. Dadurch können JOINs mit Tabellen, die Tabellen mit demselben Namen enthalten, einem Ergebnisdatenobjekt korrekt zugeordnet werden. (I4b444, b/201306012, b/212279118)

Version 2.5.0-alpha01

23. Februar 2022

androidx.room:room-*:2.5.0-alpha01 wird freigegeben. Version 2.5.0-alpha01 enthält diese Commits.

API-Änderungen

  • Die Nutzung von Raum @IntDef wurde in Kotlin-Quellen nicht erzwungen. (I75f41, b/217951311)
  • Ein Problem mit der Quellkompatibilität wurde behoben, durch das @Query in Attribut-Getter wieder zugelassen werden konnte. (I0a09b)
  • Umwandlung von „room-common“ von Java zu Kotlin. (I69c48, b/206858235)

    Hinweis:Es können Probleme mit Inkompatibilität der Quellen auftreten, da einige Eigenschaften während der Konvertierung der Bibliothek zu Kotlin in Companion-Objekte verschoben wurden. Wenn sich Ihr Code in Kotlin befand und die alte Version von Room aufgerufen wurde, benötigt die neue Version beim Zugriff auf diese Eigenschaften das Suffix „.Companion“.

  • Raummigration von Java zu Kotlin wurde umgestellt. (I2724b, b/206858622)
  • paging-bezogene Dateien in room-runtime von Java in Kotlin konvertiert. (I82fc8, b/206859668)
  • Es wurde eine API für die Sperre und Nutzung mehrerer Prozesse auf FrameworkSQLite*-Ebene hinzugefügt, um die Ersterstellung und Migration von Multi-Prozess-Datenbanken zu schützen. (Ied267, b/193182592)

Fehlerkorrekturen

  • Interne Attribute in Kotlin-Quellen werden jetzt unterstützt. Dies ist eine kleine Verhaltensänderung in Room: Hier wird der Name der Quelle von Funktionen verwendet, während sie mit Attributen als Getter/Setter abgeglichen werden. Zuvor wurde der JVM-Name der Funktion verwendet, der sich bei internen Funktionen/Eigenschaften unterscheidet. Wenn Sie benutzerdefinierte @JvmName-Annotationen verwenden, um Getter/Setter privaten Attributen zuzuordnen, prüfen Sie den generierten Code nach der Aktualisierung (If6531, b/205289020).

Version 2.4.3

Version 2.4.3

27. Juli 2022

androidx.room:room-*:2.4.3 wird freigegeben. Version 2.4.3 enthält diese Commits.

Fehlerkorrekturen

  • Behebung eines Problems, bei dem Room in Kotlin 1.7 keine Sperrfunktionen erkannte (b/236612358)

Version 2.4.2

Version 2.4.2

23. Februar 2022

androidx.room:room-*:2.4.2 wird freigegeben. Version 2.4.2 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem beim Generieren von Code für eine Dao-@Transaction-Sperrfunktion mit einem Text behoben, der aufgrund der Kompilierung mit -Xjvm-default=all oder einer vergleichbaren Methode eine Standardschnittstellenmethode generiert. (Ia4ce5)
  • Ein Fehler wurde behoben, bei dem Room Code für die Abfragemethode Array<ByteArray> des Rückgabetyps generiert. (If086e, b/213789489)

Version 2.4.1

Version 2.4.1

12. Januar 2022

androidx.room:room-*:2.4.1 wird freigegeben. Version 2.4.1 enthält diese Commits.

Fehlerkorrekturen

  • Interne Attribute in Kotlin-Quellen werden jetzt unterstützt. Dies ist eine kleine Verhaltensänderung in Room: Hier wird der Name der Quelle von Funktionen verwendet, während sie mit Attributen als Getter/Setter abgeglichen werden. Zuvor wurde der JVM-Name der Funktion verwendet, der sich bei internen Funktionen/Eigenschaften unterscheidet. Wenn Sie benutzerdefinierte @JvmName-Annotationen verwenden, um Getter/Setter privaten Attributen zuzuordnen, prüfen Sie den generierten Code nach der Aktualisierung (If6531, b/205289020).

Version 2.4.0

Version 2.4.0

15. Dezember 2021

androidx.room:room-*:2.4.0 wird freigegeben. 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. Um Room mitzuteilen, dass eine automatische Migration generiert werden soll, können Sie mit @Database#autoMigrations die Versionen deklarieren, von und zu denen automatisch migriert werden soll. Wenn Room zusätzliche Informationen zum Umbenennen oder Löschen von Tabellen und Spalten benötigt, kann die Annotation @AutoMigration eine Spezifikationsklasse deklarieren, die solche Eingaben enthält. Weitere Informationen finden Sie in der @AutoMigration-Dokumentation.
  • Abhängigkeitsinjektion in automatischen Migrationen: @ProvidedAutoMigrationSpec ist eine neue API, mit der deklariert wird, dass ein AutoMigrationSpec zur Laufzeit über RoomDatabase.Builder#addAutoMigrationSpec() bereitgestellt wird. Auf diese Weise kann ein Abhängigkeitsinjektions-Framework solche Spezifikationen bereitstellen, wenn komplexe Abhängigkeiten erforderlich sind.
  • Unterstützung des Migrationstest-Hilfs für automatische Migrationen: MigrationTestHelper des Room-Elements wurde aktualisiert, um automatische Migrationen zu unterstützen. Dazu wurde eine neue Konstruktor-API bereitgestellt, die die zu testende Datenbankklasse empfängt. Dadurch kann das Hilfsprogramm automatische Migrationen auf dieselbe Weise während runMigrationsAndValidate automatisch hinzufügen.
  • Room-Paging-Unterstützung: androidx.room:room-paging wird veröffentlicht und bietet native Paging 3.0-Unterstützung für Raumanfragen, die androidx.paging.PagingSource zurückgeben.
  • Relationale Abfragemethoden: Room unterstützt jetzt die @Dao-Methoden für Multimap-Rückgabetypen, die für JOIN-Anweisungen nützlich sind. Die unterstützten Typen von Mehrfachkarten 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 freigegeben. Version 2.4.0-rc01 enthält diese Commits.

Neue Funktionen

  • 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 freigegeben. 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-Analysator hinzugefügt, der Informationen zur Null-Zulässigkeit in Typen berücksichtigt. Da diese Informationen nur in KSP verfügbar sind, ist sie standardmäßig nur in KSP aktiviert. Wenn es Probleme verursacht, können Sie es deaktivieren, indem Sie „room.useNullAwareTypeAnalysis=false“ an den Annotationsprozessor übergeben. In diesem Fall können Sie einen Fehler in der Datei melden, da dieses Flag in Zukunft entfernt wird. Bei diesem neuen TypeConverter-Analysator wird empfohlen, nur empfangende Nicht-Null-TypeConverters bereitzustellen, da der neue Analyzer sie mit einer Nullprüfung umbrechen kann. Dies hat keine Auswirkungen auf Nutzer, die KAPT oder Java verwenden, da die Annotationsprozessoren (im Gegensatz zu KSP) keine Informationen zur Null-Zulässigkeit in Typen haben. (Ia88f9, b/193437407)
  • Es wurde ein Fehler behoben, bei dem Room mit einem SQL-Fehler nicht kompiliert werden konnte, wenn eine FTS-Entität zur Verwendung des ICU-Tokenizers deklariert wurde. (I00db9, b/201753224)
  • Es wurde ein Problem bei automatischen Migrationen bezüglich einer neuen Spalte behoben, die einer eingebetteten Entität zwischen Versionen hinzugefügt wurde. (I5fcb1b/193798291)
  • Wir haben ein Problem mit den Rückgabetypen relationaler Abfragemethoden in LEFT JOIN-Abfragen behoben. Durch diese Änderungen enthält die für einen Schlüssel zurückgegebene Sammlung, bei der eine 1:n-Zuordnung vorliegt, nicht das ungültige Wertobjekt, 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-Keywords in Spaltennamen nicht maskiert werden konnten, wurde behoben. (Idbed4b/197133152)

Version 2.4.0-beta01

13. Oktober 2021

androidx.room:room-*:2.4.0-beta01 wird freigegeben. Version 2.4.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Bei der automatischen Migration wurden keine neuen Spalten hinzugefügt, wenn eine andere Tabelle in derselben automatischen Migration auch eine neue Spalte mit demselben Namen hatte. (Ia5db5, b/200818663)
  • Die von „Room Paging“ generierte Implementierung von PagingSource verwendet jetzt den queryExecutor, der über RoomDatabase.Builder übergeben wurde, sodass er anstelle von Dispatchers.IO überschrieben werden kann. (Iae259)

Version 2.4.0-alpha05

29. September 2021

androidx.room:room-*:2.4.0-alpha05 wird freigegeben. Version 2.4.0-alpha05 enthält diese Commits.

Neue Funktionen

API-Änderungen

  • Der TypeConverters-Annotation wurde eine neue Eigenschaft hinzugefügt, mit der Entwickler integrierte Enum- und UUID-Konverter deaktivieren können. Diese Converter sind standardmäßig aktiviert, können aber für einen bestimmten Bereich oder für die gesamte Datenbank deaktiviert werden. Weitere Informationen finden Sie in der TypeConverters-Dokumentation. (36ae9e, b/195413406)

  • Unterstützung von Nicht-POJO-Schlüssel/Wert-Paaren für Multimap-Rückgabetypen in DAOs über die @MapInfo-Annotation. (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 Raum 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 einer Spalte aus dem Kartenschlüssel enthielt. (I6b887)

Externer Beitrag

  • Eine neue API wurde hinzugefügt, um die Indexreihenfolge in @Index anzugeben. Danke an Nikita Zhelonkin. (I033fc)

Version 2.4.0-alpha04

21. Juli 2021

androidx.room:room-*:2.4.0-alpha04 wird freigegeben. Version 2.4.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Room unterstützt jetzt @Dao-Methoden für Multimap-Rückgabetypen, die für JOIN-Anweisungen nützlich sind. Die unterstützten Typen von Mehrfachkarten sind Map sowie ImmutableMap, ImmutableSetMultimap und ImmutableListMultimap von Guava.

    Im Folgenden finden Sie Beispiele für Abfragen mit mehreren Karten:

    Beziehungszuordnung zwischen 1:1

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

    1:n-Beziehungskarte (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, Observable von Rx oder die Koroutinen Flow eingebunden werden.

Room-Paging

  • androidx.room:room-paging wird veröffentlicht und bietet native Paging 3.0-Unterstützung für Raumabfragen, 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 auf Paging 3.0 APIs. Die neue PagingSource-Implementierung parst Schlüssel unterschiedlich, sodass alle manuell an die PagingSource von Room gelieferten Schlüssel diese Verhaltensänderung berücksichtigen müssen, einschließlich des "initialKey", der über den Pager-Konstruktor übergeben wird. Seiten werden ab dem Key geladen, wobei Key das erste geladene Element ist. Dies weicht von der bestehenden Funktionsweise ab, bei der 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 und die Deaktivierung greift auf die bestehende Unterstützung für Paging 3.0 zurück, die in Raum 2.3 eingeführt wurde. Für Nutzer, die Room mit Paging 3.0 verwenden, ist dieses Artefakt in zukünftigen Versionen jedoch nicht optional. Fügen Sie Ihrem Klassenpfad das neue Raumseiten-Artefakt hinzu, um die Option 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 bezüglich der Handhabung von Verstößen gegen Fremdschlüssel wurde behoben. (b/190113935)

Version 2.4.0-alpha03

16. Juni 2021

androidx.room:room-*:2.4.0-alpha03 wird freigegeben. Version 2.4.0-alpha03 enthält diese Commits.

API-Änderungen

  • Aktualisieren Sie die MigrationTestHelper des Room-Elements, um automatische Migrationen zu unterstützen. Stellen Sie dazu eine neue Konstruktor-API bereit, die die zu testende Datenbankklasse empfängt. Dadurch kann das Hilfsprogramm automatische Migrationen auf dieselbe Weise während runMigrationsAndValidate automatisch hinzufügen.

Fehlerkorrekturen

  • Ein Problem mit der nativen SQLite-Bibliothek von Room zur Unterstützung der M1-Chips von Apple wurde behoben. (b/174695268

  • Es wurde ein Problem behoben, bei dem Room nicht ausgegeben wurde, wenn der Rückgabetyp einer @Transaction-Funktion ein Ablauf war (I56ddd, b/190075899).

  • Ein Problem bei automatischen Migrationen bezüglich Indexen wurde behoben. b/177673291

Aktualisierungen von Abhängigkeiten

  • Der Support für wichtige Verkaufsargumente von Room hängt jetzt vom 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 freigegeben. Version 2.4.0-alpha02 enthält diese Commits.

API-Änderungen

  • @ProvidedAutoMigrationSpec ist eine neue API zum Deklarieren, dass ein AutoMigrationSpec zur Laufzeit über RoomDatabase.Builder#addAutoMigrationSpec() bereitgestellt wird. Auf diese Weise kann ein Abhängigkeitsinjektions-Framework solche Spezifikationen bereitstellen, wenn komplexe Abhängigkeiten erforderlich sind.

Fehlerkorrekturen

  • Ein Problem mit automatischen Migrationen wurde behoben, bei dem @DatabaseViews nicht richtig neu erstellt wurden.

Externer Beitrag

  • Ein Problem im Raum „JournalMode.TRUNCATE“ wurde behoben, bei dem der Callback „InvalidationTracker“ manchmal ungültig, zu spät oder gar nicht aufgerufen wurde. 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 freigegeben. 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. Um Room mitzuteilen, dass eine automatische Migration generiert werden soll, können Sie mit @Database#autoMigrations die Versionen deklarieren, von und zu denen automatisch migriert werden soll. Wenn Room zusätzliche Informationen zum Umbenennen oder Löschen von Tabellen und Spalten benötigt, kann die Annotation @AutoMigration eine Spezifikationsklasse deklarieren, die solche Eingaben enthält. Weitere Informationen finden Sie in der Dokumentation zu @AutoMigration.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem defaultValue mit zusätzlichen Klammern durch die Schemavalidierung von Room falsch validiert wurde. b/182284899

Version 2.3.0

Version 2.3.0

21. April 2021

androidx.room:room-*:2.3.0 wird freigegeben. Version 2.3.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.2.0

  • Integrierte Enum-Unterstützung: Room verwendet jetzt standardmäßig einen „Enum“ in einen String und umgekehrt einen Typkonverter, wenn kein Wert angegeben ist. Wenn bereits ein Typkonverter für eine Aufzählung vorhanden ist, verwendet Room diesen vor dem Standardtyp.
  • Abfrage-Callback: Room bietet jetzt eine allgemeine Callback-API „RoomDatabase.QueryCallback“ für die Ausführung von Abfragen, was für die Protokollierung in Debug-Builds hilfreich sein kann. Der Callback kann über RoomDatabase.Builder#setQueryCallback() festgelegt werden.
  • Vorkonfigurierte Verbesserung: Room verfügt jetzt über APIs zum Erstellen einer Datenbank mit einem vorkonfigurierten Datenbanklesevorgang aus einem Eingabestream. Dies ermöglicht beispielsweise Fälle, in denen die Datenbank mit vorinstallierten gzip-Dateien komprimiert wurde.
  • Bereitgestellte Typkonverter: Raum verfügt jetzt über APIs zur Bereitstellung von Instanzen von Typkonvertern, sodass die App ihre Initialisierung steuern kann. Verwenden Sie die neue Annotation @ProvidedTypeConverter, um einen Typkonverter zu markieren, der für Room bereitgestellt wird.
  • RxJava3-Unterstützung: Raum unterstützt jetzt RxJava3-Typen. Ähnlich wie bei RxJava2 können Sie DAO-Methoden deklarieren, deren Rückgabetyp „Flowable“, „Single“, „Vielleicht“ und „Vervollständig“ ist. Außerdem ist das neue Artefakt androidx.room:room-rxjava3 zur Unterstützung von RxJava3 verfügbar.
  • Paging 3.0-Unterstützung: Room unterstützt jetzt das Generieren von Implementierungen für Methoden mit @Query-Anmerkungen, deren Rückgabetyp androidx.paging.PagingSource ist.

Version 2.3.0-rc01

24. März 2021

androidx.room:room-*:2.3.0-rc01 wird freigegeben. Version 2.3.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem von Room erstellte Coroutine Flow-Abfragen nicht in einem gesperrten withTransaction-Block verarbeitet wurden. (I797bf)

Version 2.3.0-beta03

10. März 2021

androidx.room:room-*:2.3.0-beta03 wird freigegeben. Version 2.3.0-beta03 enthält diese Commits.

Neue Funktionen

  • Unterstützung für inkrementelle Kompilierungen für KSP hinzugefügt. (I031c1, b/176453350)

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem das Erstellen von PagingSource im Hauptthread einen ANR-Fehler auslösen konnte. (I42b74, b/181221318)
  • Die Sichtbarkeit von @ExperimentalRoomApi wurde korrigiert, sodass sie nicht mehr als privat, sondern öffentlich war. (b/181356119)

Externer Beitrag

  • Erlauben Sie Room, einen POJO-Rückgabetyp in einer mit @Query annotierten DAO-Methode anzunehmen, wenn sie auch mit @SkipQueryVerification annotiert ist. Room konvertiert das Ergebnis der Abfrage nach bestem Wissen in den POJO-Rückgabetyp wie bei einer mit @RawQuery annotierten DAO-Methode. 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 freigegeben. Version 2.3.0-beta02 enthält diese Commits.

Neue Funktionen

  • Room bietet jetzt experimentelle Unterstützung für die Kotlin-Symbolverarbeitung KSP.

    KSP ist ein Ersatz für KAPT, um Annotationsprozessoren nativ auf dem Kotlin-Compiler auszuführen, was die Build-Zeiten erheblich verkürzt.

    Wenn Sie Room mit KSP verwenden möchten, können Sie das Gradle-Plug-in für KSP 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 Dokumentation zu wichtigen Verkaufsargumenten.

    Da sich KAPT noch in der Testphase befindet, wird empfohlen, KAPT weiterhin für Produktionscode zu verwenden. Eine Verkürzung der Build-Zeiten ist nur möglich, wenn keine anderen Prozessoren KAPT verwenden. Informationen zu bekannten Problemen finden Sie unter b/160322705.

Version 2.3.0-beta01

27. Januar 2021

androidx.room:room-*:2.3.0-beta01 wird freigegeben. Version 2.3.0-beta01 enthält diese Commits.

Neue Funktionen

  • Automatisch schließbare Datenbanken: Room kann jetzt Datenbanken schließen, auf die nach einer bestimmten Zeit 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 Dao-Methoden mit mehreren @Update- oder @Delete-Methoden mit unterschiedlichen Konfliktstrategien Code mit nur einer der Strategien generiert und die definierte Strategie ignoriert wurden. (/I0b90d, b/176138543)

Version 2.3.0-alpha04

16. Dezember 2020

androidx.room:room-*:2.3.0-alpha04 wird freigegeben. Version 2.3.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Room bietet jetzt eine allgemeine Callback API RoomDatabase.QueryCallback für die Ausführung von Abfragen, die beim Logging in Debug-Builds hilfreich sein kann. Der Callback kann über RoomDatabase.Builder#setQueryCallback() festgelegt werden. (Iaa513, b/174478034, b/74877608)
  • Room verwendet jetzt standardmäßig einen „Enum“ in „String“ und umgekehrt einen Typkonverter, wenn keiner angegeben ist. Wenn bereits ein Typkonverter für eine Aufzählung vorhanden ist, verwendet Room diesen vor dem Standardtyp. (b/73132006)

Bekanntes Problem

  • Wenn für Enum bereits ein Einwegtypkonverter zum Lesen vorhanden ist, verwendet Room möglicherweise versehentlich den integrierten String-zu-Enum-Konverter, was möglicherweise nicht erwünscht ist. Dies ist ein bekanntes Problem und kann behoben werden, indem es zu einem Zwei-Wege-Konverter wird. Siehe b/175707691

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Room die inkrementelle Annotationsverarbeitung in neueren JDK-Versionen fälschlicherweise deaktiviert hat. (b/171387388)
  • Ein Problem wurde behoben, bei dem Room die generierte Klasse fand, wenn mehrere Klassenladeprogramme verwendet wurden. Vielen Dank für die Korrektur „Serendipity | 892449346@qq.com“! (b/170141113)
  • Es wurde ein Problem behoben, bei dem Room einen falschen Code generiert, wenn ein Kotlin-@Dao eine Basisklasse hatte, deren generische Elemente in der JVM Primitive sind. (b/160258066)

Externer Beitrag

  • Für Chatroom wird jetzt standardmäßig beginTransactionNonExclusive verwendet, wenn der WAL-Modus aktiviert ist und die API mindestens 16 ist. Dank ‚Ahmed I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)

Version 2.3.0-alpha03

14. Oktober 2020

androidx.room:room-*:2.3.0-alpha03 wird freigegeben. Version 2.3.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Room verfügt nun über APIs zur Bereitstellung von Instanzen von Typkonvertern, sodass die Anwendung ihre Initialisierung steuern kann. Verwenden Sie die neue Anmerkung @ProvidedTypeConverter, um einen Typkonverter zu markieren, der für Chatroom bereitgestellt wird. Vielen Dank an „mzgreen yairobbe@gmail.com“. (Ie4fa5, b/121067210)

  • Room verfügt jetzt über APIs zum Erstellen einer Datenbank mithilfe einer vorkonfigurierten Datenbank, die aus einem Eingabestream gelesen wird. Dies ermöglicht beispielsweise Fälle, in denen die Datenbank mit vorinstallierten gzip-Dateien komprimiert wurde. Dank an „Ahmed El-Helw ahmedre@gmail.com“ (3e6792, b/146911060)

API-Änderungen

  • Der Anmerkung @ForeignKey wurde ein fehlendes Ziel hinzugefügt. Dadurch wird die Verwendung außerhalb der @Entity-Anmerkung verhindert. (Iced1e)

  • Das Feld „mCallbacks“ in „RoomDatabase.java“ ist jetzt ausgeblendet. (d576cb, b/76109329)

Fehlerkorrekturen

  • In der Dokumentation zu TypeConverters wird verdeutlicht, dass TypeConverters nur zum Konvertieren von Spalten / Feldern und nicht von Zeilen verwendet werden können. (I07c56, b/77307836)

  • Aktualisieren Sie auf DaoProcessor, um den Compiler-Fehler auf Dao mit einem generischen Super-Typ mit Kotlin-„Primitiven“ zu beheben. (Ice6bb, b/160258066)

  • Dokumentation zum Hinzufügen/Entfernen von Beobachtermethoden aktualisieren, um Threading zu klären (Ifd1d9, b/153948821)

  • Ein Problem wurde behoben, bei dem Room FTS-Tabellen, in denen ihre „rowid“-Spalte deklariert war, falsch validiert hat. (d62ebc, b/145858914)

Externe Unterstützung

  • Beheben Sie Probleme mit Großbuchstaben und Kleinbuchstaben im Zusammenhang mit Türkisch (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 für das Kopieren einer vorkonfigurierten Datenbank hinzu. (I1ba74, b/148934423)

Version 2.3.0-alpha02

22. Juli 2020

androidx.room:room-*:2.3.0-alpha02 wird freigegeben. Version 2.3.0-alpha02 enthält diese Commits.

Neue Funktionen

  • RxJava3-Unterstützung: Raum unterstützt jetzt RxJava3-Typen. Ähnlich wie bei RxJava2 können Sie DAO-Methoden deklarieren, deren Rückgabetyp „Flowable“, „Single“, „Vielleicht“ und „Vervollständig“ ist. Außerdem ist das neue Artefakt androidx.room:room-rxjava3 zur Unterstützung von RxJava3 verfügbar. (b/152427884)

API-Änderungen

  • Die Deklaration einer @TypeConverter in einer Kotlin-Objektklasse wird jetzt unterstützt. (b/151110764)
  • Die Option für die inkrementelle Anmerkungsverarbeitung des Raums ist jetzt standardmäßig AKTIVIERT. (b/112110217)

Version 2.3.0-alpha01

10. Juni 2020

androidx.room:room-*:2.3.0-alpha01 wird freigegeben. Version 2.3.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Paging 3.0-Unterstützung: Room unterstützt jetzt das Generieren von Implementierungen für @Query-annotierte Methoden, 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 umschreibt, sodass nicht verwendete Spalten im Ergebnis entfernt werden.
  • Die Prozessoroption „room.expandProjection“ wurde jetzt verworfen. Verwenden Sie @RewriteQueriesToDropUnusedColumns als Ersatz für Abfragen zur Raumoptimierung mit Sternprojektionen. Beachten Sie, dass @RewriteQueriesToDropUnusedColumns nicht die Spaltenkonfliktlösung room.expandProjection für Rückgabetypen mit @Embedded-Feldern ersetzt.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem Room die JDK-Version, die zum Aktivieren des inkrementellen Annotationsprozessors verwendet wurde, nicht korrekt erkannte. Danke an Blaz Solar (me@blaz.solar) (b/155215201)
  • Room bettet jetzt seine ANTLR-Abhängigkeit in den 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 freigegeben. Version 2.2.6 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Room die inkrementelle Annotationsverarbeitung 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 freigegeben. Version 2.2.5 enthält diese Commits.

Fehlerkorrekturen

  • Legen Sie MultiInstanceInvalidationService „directBootAware“ fest. Dank an Mygod contact-git@mygod.be (b/148240967)
  • Es wurde ein Fehler behoben, der einen Absturz verursachte, wenn die Multi-Instanz-Entwertung aktiviert war und die Datenbank eine FTS-Entität enthielt. (b/148969394)
  • Es wurde ein Problem behoben, das beim Laden der nativen SQLite-Bibliotheken in den Room-Annotationsprozessor 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 wurden veröffentlicht. Version 2.2.4 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem beim Anhalten von Transaktionen behoben, bei dem ein Deadlock ausgelöst wurde, wenn die Koroutine kurz vor dem eigentlichen Start der Transaktion abgebrochen wurde. (b/148181325)
  • Ein Problem wurde behoben, bei dem @Generated bei der Erstellung mit JDK 9 falsch verwendet wurde. (b/146538330)
  • Es wurde ein Problem behoben, bei dem Room einen falschen Code generiert, 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 freigegeben. Version 2.2.3 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem Room eine Datenbank nicht validierte, die keine Migration durchlaufen hatte und einen alten Hash mit Indizes im Schema enthielt. (b/139306173)

Version 2.2.2

Version 2.2.2

20. November 2019

androidx.room:room-*:2.2.2 wird freigegeben. Version 2.2.2 enthält diese Commits.

Fehlerkorrekturen

  • Ein Fehler wurde behoben, bei dem das Erfassen einer 1:1-Beziehung mit mehr als 999 Zeilen dazu führte, dass Room null zugehörige Elemente zurückgibt. (b/143105450)

Version 2.2.1

Version 2.2.1

23. Oktober 2019

androidx.room:room-*:2.2.1 wird freigegeben. Version 2.2.1 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem Room fälschlicherweise vor CURSOR_MISMATCH gewarnt wurde, wenn die Compiler-Option expandProjection aktiviert war. (b/140759491)
  • Es wurde ein Wiederholungsmechanismus für die Verwaltung der fehlenden nativen Bibliothek hinzugefügt, die zum Überprüfen von Abfragen während der Kompilierungszeit verwendet wird.

Version 2.2.0

Version 2.2.0

9. Oktober 2019

androidx.room:room-*:2.2.0 wird freigegeben. Version 2.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.1.0

  • Vorkonfigurierte Datenbank: In RoomDatabase.Builder sind jetzt zwei neue APIs zum Erstellen einer RoomDatabase mit einer bereits ausgefüllten Datenbankdatei verfügbar. createFromAsset() ist für den Fall, dass sich die vorab ausgefüllte Datenbankdatei im Ordner „Assets“ des APK befindet, und createFromFile(), wenn sich die Datei an einem beliebigen Speicherort befindet. Die Nutzung dieser API ändert das Verhalten von destruktiven Migrationen, sodass Room während einer Fallback-Migration versucht, die vorab ausgefüllte Datenbank noch einmal zu kopieren, sofern verfügbar. Andernfalls werden alle Tabellen gelöscht und neu erstellt. b/62185732
  • Standardwerte des Schemas: @ColumnInfo hat jetzt das neue Attribut defaultValue, mit dem der Standardwert einer Spalte angegeben werden kann. Standardwerte sind Teil eines Datenbankschemas und werden während Migrationen validiert, sofern angegeben. b/64088772
  • n-zu-n-Beziehungen: @Relation hat jetzt die neue Property associateBy mit der neuen Annotation @Junction, mit der eine Beziehung deklariert wird, die über eine Verknüpfungstabelle (auch als Join-Tabelle bezeichnet) erfüllt werden muss. b/69201917
  • 1:1-Beziehungen: Die Einschränkung in POJO-Feldern, die mit @Relation gekennzeichnet sind, auf den Typ List oder Set wurde aufgehoben, sodass nun Einzelwert-Beziehungen dargestellt werden können. b/62905145
  • Zielentität: Die DAO-Anmerkungen @Insert, @Update und @Delete haben jetzt das neue Attribut targetEntity, mit dem die Zieltabelle angegeben werden kann, auf die die DAO-Methode reagieren soll. Dadurch können die Parameter dieser DAO-Methoden beliebige POJOs sein, die als Teilentitäten interpretiert werden. In der Praxis sind damit partielle Einfügungen, Löschvorgänge und Aktualisierungen möglich. b/127549506
  • Koroutinen-Ablauf: @Query-DAO-Methoden können jetzt vom Rückgabetyp Flow<T> sein. Der zurückgegebene Flow gibt einen neuen Satz von Werten aus, wenn die beobachtenden Tabellen in der Abfrage entwertet werden. Das Deklarieren einer DAO-Funktion mit dem Rückgabetyp Channel<T> ist ein Fehler. Room empfiehlt Ihnen stattdessen, Flow zu verwenden und dann die benachbarten Funktionen zu verwenden, um Flow in einen Channel-Wert zu konvertieren. b/130428884
  • Inkrementeller Gradle-Annotationsprozessor: Room ist jetzt ein von Gradle isolierter Annotationsprozessor. Die Inkrementierbarkeit kann über die Prozessoroption room.incremental aktiviert werden. Weitere Informationen finden Sie unter Room Compiler Options. Falls Probleme auftreten, melden Sie hier den Fehler. Wir planen, die Inkrementierbarkeit standardmäßig in einer zukünftigen, stabilen Version zu aktivieren. b/112110217
  • Expandable-Projektionen: Die neue experimentelle Compiler-Option room.expandProjection wurde hinzugefügt, wodurch Room eine Abfrage mit einer Sternprojektion umschreibt, um nur die Spalten im zurückgegebenen Typ POJO zu enthalten. Dies ist beispielsweise bei einer DAO-Methode mit @Query("SELECT * FROM Song"), die einen POJO namens SongIdAndTitle mit nur zwei Feldern zurückgibt. Dann schreibt Room die Abfrage in SELECT id, title FROM Song um, sodass der Mindestsatz von Spalten abgerufen wird, der dem Rückgabetyp entspricht. Dadurch wird im Wesentlichen die Warnung CURSOR_MISMATCH eliminiert, die angezeigt wird, wenn die Abfrage zusätzliche Spalten zurückgibt, die mit keinem Feld im zurückgegebenen POJO-Typ übereinstimmen.

Version 2.2.0-rc01

5. September 2019

androidx.room:room:2.2.0-rc01 wird freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.

Keine öffentlichen Änderungen seit Raum 2.2.0-beta01.

Version 2.2.0-beta01

22. August 2019

androidx.room:room-*:2.2.0-beta01 wird freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

  • Ein Fehler wurde behoben, bei dem eine Abfrage für den Koroutinenfluss nach einer bestimmten Zeit keine neuen Werte mehr ausgibt. (b/139175786)
  • Es wurde ein Fehler behoben, bei dem Room beim Öffnen einer Datenbank, die seit Room 1.0 keine Migration hatte, keinen Legacy-Schema-Hash-Code akzeptierte, was zu einem Laufzeitabsturz aufgrund eines ungültigen Schemas führte. (b/139306173)

Version 2.2.0-alpha02

7. August 2019

androidx.room:room-*:2.2.0-alpha02 wird freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Koroutinen-Ablauf: @Query-DAO-Methoden können jetzt vom Rückgabetyp Flow<T> sein. Der zurückgegebene Flow gibt einen neuen Satz von Werten aus, wenn die beobachtenden Tabellen in der Abfrage entwertet werden. Das Deklarieren einer DAO-Funktion mit dem Rückgabetyp Channel<T> ist ein Fehler. Room empfiehlt Ihnen stattdessen, Flow zu verwenden und dann die benachbarten Funktionen zu verwenden, um Flow in einen Channel-Wert zu konvertieren. b/130428884
  • Expandable-Projektionen: Die neue experimentelle Compiler-Option room.expandProjection wurde hinzugefügt, wodurch Room eine Abfrage mit einer Sternprojektion umschreibt, um nur die Spalten im zurückgegebenen Typ POJO zu enthalten. Dies ist beispielsweise bei einer DAO-Methode mit @Query("SELECT * FROM Song"), die einen POJO namens SongIdAndTitle mit nur zwei Feldern zurückgibt. Dann schreibt Room die Abfrage in SELECT id, title FROM Song um, sodass der Mindestsatz von Spalten abgerufen wird, der dem Rückgabetyp entspricht. Dadurch wird im Wesentlichen die Warnung CURSOR_MISMATCH eliminiert, die angezeigt wird, wenn die Abfrage zusätzliche Spalten zurückgibt, die mit keinem Feld im zurückgegebenen POJO-Typ übereinstimmen.
  • onDestructiveMigrate ist eine neue Callback API, die dem RoomDatabase.Callback hinzugefügt wird, wenn Room eine Datenbank destruktiv migriert. b/79962330

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem Room mit einer Methode als Feldsetzer einen falschen Code generiert, wenn das Feld geschützt ist. b/136194628
  • Es wurde ein Fehler behoben, der dazu führte, dass der InvalidationTracker eine NPE in einem zweiten Prozess ausgab, wenn die Multi-Instanz-Entwertung aktiviert und der Entwertungsdienst beendet wurde. b/137454915
  • Es wurde ein Fehler behoben, bei dem Room den Rückgabetyp einer übernommenen Funktion zum Anhalten mit Anmerkung @RawQuery nicht korrekt identifizieren konnte. b/137878827
  • Der generierte Code für @Relation wurde aktualisiert, wenn der zugehörige Schlüssel vom Typ BLOB ist, um einen ByteBuffer zu verwenden, der vergleichbar ist. b/137881998
  • Es wurde ein Fehler behoben, bei dem Room über fehlende Setter auf POJOs beschrieb, die als partielle Entitätsparameter von @Insert, @Update und @Delete verwendet wurden. b/138664463
  • Es wurde ein Fehler behoben, bei dem Room über fehlende Getter und Setter für eine ignorierte Spalte über @Entity beschwert wurde, wenn die Entitätsklasse in bestimmten DAO-Methoden verwendet wurde. b/138238182
  • Es wurde ein Fehler behoben, bei dem benannte Bindungsargumente nicht korrekt in Positionsargumente konvertiert wurden, wodurch beim Ausführen einer Abfrage mit wiederverwendeten Parametern eine Laufzeitausnahme verursacht wurde. b/137254857

Version 2.2.0-alpha01

10. Juli 2019

Neue Funktionen

  • Vorkonfigurierte Datenbank: In RoomDatabase.Builder sind jetzt zwei neue APIs zum Erstellen einer RoomDatabase mit einer bereits ausgefüllten Datenbankdatei verfügbar. createFromAsset() ist für den Fall, dass sich die vorab ausgefüllte Datenbankdatei im Ordner „Assets“ des APK befindet, und createFromFile(), wenn sich die Datei an einem beliebigen Speicherort befindet. Die Nutzung dieser API ändert das Verhalten von destruktiven Migrationen, sodass Room während einer Fallback-Migration versucht, die vorab ausgefüllte Datenbank noch einmal zu kopieren, sofern verfügbar. Andernfalls werden alle Tabellen gelöscht und neu erstellt. b/62185732
  • Standardwerte des Schemas: @ColumnInfo hat jetzt das neue Attribut defaultValue, mit dem der Standardwert einer Spalte angegeben werden kann. Standardwerte sind Teil eines Datenbankschemas und werden während Migrationen validiert, sofern angegeben. b/64088772

    Hinweis: Wenn Ihr Datenbankschema bereits Standardwerte enthält, z. B. die, die über ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z hinzugefügt wurden, und Sie über @ColumnInfo Standardwerte für dieselben Spalten definieren möchten, 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 die neue Property associateBy mit der neuen Annotation @Junction, mit der eine Beziehung deklariert wird, die über eine Verknüpfungstabelle (auch als Join-Tabelle bezeichnet) erfüllt werden muss. b/69201917
  • 1:1-Beziehungen: Die Einschränkung in POJO-Feldern, die mit @Relation gekennzeichnet sind, auf den Typ List oder Set wurde aufgehoben, sodass nun Einzelwert-Beziehungen dargestellt werden können. b/62905145
  • Zielentität: Die DAO-Anmerkungen @Insert, @Update und @Delete haben jetzt das neue Attribut targetEntity, mit dem die Zieltabelle angegeben werden kann, auf die die DAO-Methode reagieren soll. Dadurch können die Parameter dieser DAO-Methoden beliebige POJOs sein, die als Teilentitäten interpretiert werden. In der Praxis sind damit partielle Einfügungen, Löschvorgänge und Aktualisierungen möglich. b/127549506
  • Inkrementeller Gradle-Annotationsprozessor: Room ist jetzt ein von Gradle isolierter Annotationsprozessor. Die Inkrementierbarkeit kann über die Prozessoroption room.incremental aktiviert werden. Weitere Informationen finden Sie unter Room Compiler Options. Falls Probleme auftreten, melden Sie hier den Fehler. Wir planen, die Inkrementierbarkeit standardmäßig in einer zukünftigen, stabilen Version zu aktivieren. b/112110217

Fehlerkorrekturen

  • Room übergibt EmptySetResultException nicht mehr an den globalen Fehler-Handler, wenn der Rx-Stream einer Abfrage verworfen wurde, bevor die Abfrage abgeschlossen ist. b/130257475
  • Es wurde ein Fehler behoben, bei dem Room eine falsche Fehlermeldung anzeigte, wenn eine mit @RawQuery gekennzeichnete DAO-Funktion zum Anhalten keinen Rückgabetyp hatte. b/134303897
  • Room generiert keine DAO-Adapter mit Rohtypen mehr. b/135747255

Version 2.1.0

Version 2.1.0

13. Juni 2019

Room 2.1.0 wird ohne Änderungen im Vergleich zu 2.1.0-rc01 freigegeben. 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 FTS3- oder FTS4-Zuordnungstabelle. Mit @Entity annotierte Klassen können jetzt zusätzlich mit @Fts3 oder @Fts4 annotiert werden, um eine Klasse mit einer Zuordnungstabelle für die Volltextsuche zu deklarieren. FTS-Optionen zur weiteren Anpassung sind über die Methoden der Annotation verfügbar.
  • Ansichten: Room unterstützt jetzt die Deklaration einer Klasse als gespeicherte Abfrage (auch Ansicht genannt) mithilfe der Annotation @DatabaseView.
  • Couroutinen: DAO-Methoden können jetzt Haltefunktionen sein. Binden Sie room-ktx in die Abhängigkeiten ein, um diese Funktion zu nutzen. Das ktx-Artefakt bietet auch die Erweiterungsfunktion RoomDatabase.withTransaction zum Ausführen von Datenbanktransaktionen innerhalb einer Koroutine.
  • Auto Value: Room unterstützt jetzt die Deklaration von AutoValue-annotierten Klassen als Entitäten und POJOs. Die Raumanmerkungen @PrimaryKey, @ColumnInfo, @Embedded und @Relation können jetzt in den abstrakten Methoden einer Klasse mit Autowerten annotiert werden. Beachten Sie, dass zu diesen Annotationen auch @CopyAnnotations gehören muss, damit Room sie richtig verstehen kann.
  • Zusätzliche asynchrone Unterstützung: DAO-Methoden, die mit @Insert, @Delete oder @Update annotiert sind, zusammen mit @Query, die INSERT-, DELETE- oder UPDATE-Anweisungen enthalten, unterstützen jetzt die Rx-Rückgabetypen Completable, Single, Maybe und den Rückgabetyp von Guava ListenableFuture. Sie können auch zum Anhalten verwendet werden.
  • enableMultiInstanceInvalidation ist eine neue API in RoomDatabase.Builder zur Aktivierung der Entwertung über mehrere Instanzen von RoomDatabase hinweg, die dieselbe Datenbankdatei verwenden.
  • fallbackToDestructiveMigrationOnDowngrade ist eine neue API in RoomDatabase.Builder, die die Datenbank bei einem Downgrade automatisch neu erstellt.
  • ignoredColumns ist eine neue API in der Annotation @Entity, mit der ignorierte Felder nach Namen aufgelistet werden können.
  • Room verwendet jetzt den primären Konstruktor von Kotlin korrekt in Datenklassen, sodass die Attribute nicht als vars deklariert werden müssen.

Version 2.1.0-rc01

29. Mai 2019

Fehlerkorrekturen

  • Es wurde ein Fehler bei der Rauminitialisierung behoben, der aufgrund einer bereits eingerichteten temp_store-Konfiguration auftreten konnte. b/132602198
  • Eine Warnung zur Verwendung von doppelten Anführungszeichen für Nutzer mit SQLite 3.27.0 und höher wurde behoben. b/131712640
  • Es wurde ein Fehler behoben, bei dem der InvalidationTracker einen Absturz verursachte, wenn mehrere Entwertungsprü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 2.1.0-alpha07 veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Version 2.1.0-alpha07

25. April 2019

Änderungen bei APIs und des Verhaltens

  • Die Erweiterungsfunktion RoomDatabase.withTransaction wurde geändert, sodass sie keinen Funktionsblock mit einem CoroutineScope mehr als Empfänger akzeptiert. Dadurch wird verhindert, dass der zusätzliche Wrapper coroutineScope { } übersprungen wird, der erforderlich ist, um Elemente im Transaktionsblock gleichzeitig auszuführen.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem Room für eine Kotlin-DAO-Funktion mit einem Parameter des Sammlungstyps keinen TypeConverter verlief. b/122066791

Version 2.1.0-alpha06

22. März 2019

Änderungen bei APIs und des Verhaltens

  • Asynchrone Transaktionsabfragen werden jetzt so serialisiert, dass Room zum Ausführen von Datenbanktransaktionen nicht mehr als einen Thread verwendet. RoomDatabase.Builder.setTransactionExecutor(Executor) wurde hinzugefügt, um das Konfigurieren des Executors zu ermöglichen, der für Transaktionen verwendet werden soll.
  • RoomDatabase.runInTransaction(Callable) umschließt geprüfte Ausnahmen nicht mehr in RuntimeExceptions. b/128623748

Fehlerkorrekturen

  • Ein Fehler wurde behoben, bei dem der Entwertungs-Tracker eine Inhaltstabelle nicht mehr beobachtete, wenn Beobachter für die Inhaltstabelle und eine FTS-Tabelle für externe Inhalte hinzugefügt wurden. b/128508917
  • Die SQLite-Grammatik von Room wurde an SQLite 3.24.0 aktualisiert. b/110883668

Version 2.1.0-alpha05

13. März 2019

Neue Funktionen

  • Mit der Erweiterungsfunktion „RoomDatabase.withTransaction“ kannst du Datenbanktransaktionen innerhalb einer Koroutine sicher ausführen. Im Artefakt room-ktx sind Funktionen für Raumerweiterungen und Unterstützung für Koroutinen verfügbar.
  • Nicht abstrakte DAO-Methoden, die mit @Transaction gekennzeichnet sind, können jetzt Haltefunktionen sein. b/120241587

Änderungen bei APIs und des Verhaltens

  • Das Artefakt „room-coroutines“ wurde in „room-ktx“ umbenannt und erhält dieselbe Bezeichnung wie andere androidx-Artefakte.
  • beginTransaction, setTransactionSuccessful und endTransaction in RoomDatabase wurden zugunsten von runInTransaction und der room-ktx-Erweiterungsfunktion withTransaction eingestellt.

Fehlerkorrekturen

  • Ein Fehler wurde behoben, bei dem Tokenizer-Argumente gelöscht wurden, wenn der verwendete Tokenizer SIMPLE war. b/125427014
  • Ein Fehler wurde behoben, bei dem Room Aussetzungsfunktionen mit Parametern nicht korrekt identifizierte, deren Typ eine innere Klasse war. b/123767877
  • Es wurde ein Fehler behoben, bei dem die zurückgestellte DAO-Methode @Query mit INSERT-, UPDATE- oder DELETE-Anweisungen die Abfrage im Hauptthread vorbereitet vorbereitete. b/123695593
  • Es wurden verschiedene Fehler behoben, bei denen Room für bestimmte Sperrfunktionen falschen Code generiert hat. b/123466702 und b/123457323
  • Es wurde ein Fehler behoben, bei dem verworfene Methoden im generierten Code nicht korrekt unterdrückt wurden. b/117602586
  • Die Raumabhängigkeit von androidx.sqlite wurde auf 1.0.2 aktualisiert. Diese Version enthält Korrekturen zur korrekten Verarbeitung beschädigter Datenbanken. b/124476912

Bekannte Probleme

  • Room 2.1.0-alpha05 hängt vom Artefakt kotlinx-metadata-jvm ab, das derzeit in Maven Central (KT-27991) nicht verfügbar ist. Diese Abhängigkeit kann behoben werden, indem Sie Ihren Projekt-Repositories maven { url "https://kotlin.bintray.com/kotlinx/" } 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 Sperrfunktionen sein. b/120227284

Änderungen bei APIs und des Verhaltens

  • 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 Thread-beschränkt sind, kann Room derzeit keine Transaktion rund um eine Funktion starten und beenden, die Abfragen in verschiedenen Threads ausführen kann. 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

  • Es wurde ein Fehler behoben, bei dem Room den TypeConverter eines Rückgabetyps nicht korrekt verwendet, wenn die DAO-Methode eine Sperrfunktion war. b/122988159
  • Es wurde ein Fehler behoben, bei dem übernommene Sperrfunktionen fälschlicherweise als nicht ausgesetzt gekennzeichnet wurden. b/122902595
  • Es wurde ein Fehler behoben, bei dem Room einen falschen Code generiert, wenn das Feld @Embedded in einer übergeordneten Klasse war und in mehreren untergeordneten Klassen verwendet wurde. b/121099048
  • Ein Problem wurde behoben, bei dem die Datenbank beim Aufrufen von DAO-Sperrfunktionen zwischen beginTransaction() und endTransaction() zu einem Deadlock führte. b/120854786

Version 2.1.0-alpha03

4. Dezember 2018

API-Änderungen

  • Der FTS-tokenizer in @Fts3/@Fts4 verwendet jetzt einen String anstelle eines Enum. Dadurch können benutzerdefinierte Tokenizer von Room verwendet werden. Integrierte Tokenizer werden in FtsOptions weiterhin als Stringkonstanten definiert. b/119234881

Neue Funktionen

  • Couroutinen: DAO-Methoden können jetzt Haltefunktionen sein. Zur Unterstützung von Sperrfunktionen in Room wurde ein neues Artefakt freigegeben: 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 Eigenschaft ignoredColumns von @Entity zu finden. b/119830714
  • Es wurde ein Fehler behoben, bei dem DAO-Methodenparameter in der generierten Implementierung nicht als endgültig markiert wurden. b/118015483
  • Ein Fehler wurde behoben, bei dem der Prozessor von Room beim Melden eines Fehlers in einer Abfrage mit Sonderzeichen abstürzte. b/119520136
  • Ein Fehler wurde behoben, bei dem Room andere verschiedene Collection-Implementierungen als Argumente eines IN-Ausdrucks ablehnte. b/119884035
  • Ein Fehler wurde behoben, bei dem von Room zurückgegebene LiveData nach einer dauerhaften Beobachtung keine neuen Daten mehr ausgibt. b/74477406
  • Die Schließfunktion von RoomDatabase wurde aktualisiert, um Konflikte durch Sperren zu reduzieren. b/117900450

Version 2.1.0-alpha02

30. Oktober 2018

Neue Funktionen

  • Unterstützung für Verweise auf @DatabaseView in einer @Relation wurde hinzugefügt. b/117680932

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem Room Laufwerks-E/A im Hauptthread ausführt, wenn ein Rx-Rückgabetyp abonniert und entsorgt wurde. b/117201279
  • Es wurde ein Fehler behoben, bei dem Room für ein Feld in einer Kotlin-Entitätsklasse keinen geeigneten Typkonverter fand. b/111404868
  • Es wurde ein Fehler behoben, bei dem Room für eine DAO-Schnittstellenimplementierung mit einer Kotlin-Standardmethode ohne Argumente falschen Code generiert hat. b/117527454
  • Der SQLite-Grammatikparser für Room wurde aktualisiert und ein Leistungsproblem behoben, das lange Build-Zeiten zur Folge hatte. b/117401230

Version 2.1.0-alpha01

8. Oktober 2018

Neue Funktionen

  • FTS: Raum unterstützt jetzt Entitäten mit einer Zuordnungstabelle für FTS3 oder FTS4. Mit @Entity annotierte Klassen können jetzt zusätzlich mit @Fts3 oder @Fts4 annotiert werden, um eine Klasse mit einer Zuordnungstabelle zur Volltextsuche zu deklarieren. FTS-Optionen zur weiteren Anpassung sind über die Methoden der Annotation verfügbar. b/62356416
  • Ansichten: Room unterstützt jetzt die Deklaration einer Klasse als gespeicherte Abfrage, auch als Ansicht bezeichnet, mithilfe der @DatabaseView-Annotation. b/67033276
  • Auto Value: Room unterstützt jetzt die Deklaration von AutoValue-Anmerkungsklassen als Entitäten und POJOs. Die Raumanmerkungen @PrimaryKey, @ColumnInfo, @Embedded und @Relation können jetzt in den abstrakten Methoden einer Klasse mit automatischem Wert-Anmerkungen deklariert werden. Hinweis: Damit Room sie richtig verstehen kann, muss der Vermerk auch in Verbindung mit @CopyAnnotations angegeben werden. b/62408420
  • Zusätzliche Unterstützung für Rx-Rückgabetypen: DAO-Methoden, die mit @Insert, @Delete oder @Update gekennzeichnet sind, unterstützen jetzt die Rx-Rückgabetypen Completable, Single<T> und Maybe<T>. b/63317956
  • Unveränderliche Typen mit @Relation: Bisher mussten @Relation-annotierte Felder für Räume festgelegt werden, jetzt können sie aber Konstruktorparameter sein.
  • enableMultiInstanceInvalidation: ist eine neue API in RoomDatabase.Builder, die die Entwertung über mehrere Instanzen von RoomDatabase hinweg mit derselben Datenbankdatei ermöglicht. Dieser Mechanismus zur Entwertung von mehreren Instanzen funktioniert auch für mehrere Prozesse. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: Ist eine neue API in RoomDatabase.Builder, die die Datenbank bei einem Downgrade automatisch neu erstellt. b/110416954
  • ignoredColumns: ist eine neue API in der Annotation @Entity, mit der ignorierte Felder nach Name aufgelistet werden können. Nützlich, um übernommene Felder in einer Entität zu ignorieren. b/63522075

Änderungen bei APIs und des Verhaltens

  • 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 aus einer beschädigten Datenbank oder einer fehlerhaften Migration während der Initialisierung nicht ordnungsgemäß wiederhergestellt wurde. b/111504749 und b/111519144
  • Room verwendet jetzt den primären Konstruktor von Kotlin korrekt 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 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 2.0.0-beta01 veröffentlicht.

Version 2.0.0-beta01

2. Juli 2018

Änderungen bei APIs und des Verhaltens

  • RoomDatabase.Builder.setQueryExecutor() hinzugefügt, um anzupassen, wo Abfragen ausgeführt werden
  • RxJava2-Observable-Unterstützung hinzugefügt
  • Generierte DAO- und Datenbankimplementierungen sind jetzt endgültig

Fehlerkorrekturen

  • Klassen-/Feldname in Fehler „Kann Getter für Feld nicht finden“ b/73334503 angeben
  • Abwärtskompatibilität von RoomOpenHelper mit älteren Versionen von Room b/110197391 behoben

Abhängigkeiten vor AndroidX

Beziehen Sie für Vor-AndroidX-Versionen von Room die folgenden Abhängigkeiten ein:

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, den Raum 1.1.1-rc1 anstelle von 1.1.0 zu verwenden, wenn Sie Migrationen nutzen.

Es wurde ein Fehler behoben, bei dem Room die Initialisierung nach der Migration nicht richtig verarbeitet hat b/79362399

Version 1.1.0

Version 1.1.0-beta3

19. April 2018

Fehlerkorrekturen

  • Kompilierungsfehler beheben, wenn ein Kotlin-POJO auf eine Beziehungsentität verweist, die in Java b/78199923 definiert wurde

Version 1.1.0-beta2

5. April 2018

Fehlerkorrekturen

  • Es wurde ein kritischer Fehler in den Rx-Implementierungen Single und Maybe des Raums behoben, bei dem die Abfrage im Voraus wiederverwendet wurde, was zu Problemen führte, wenn Sie den zurückgegebenen Single- oder Maybe-Sofortwerten mehr als einen Beobachter hinzufügen. b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] gibt die Datenbank nicht mit VACUUM zurück, wenn sie innerhalb einer Transaktion aufgerufen wird. b/77235565

Version 1.1.0-beta1

21. März 2018

API-Änderungen

  • Basierend auf dem Feedback zur API-Überprüfung ist es in @RawQuery nicht mehr zulässig, String als Abfrageparameter zu übergeben. Sie müssen [SupportSQLiteQuery][ref-SupportSQLiteQuery] verwenden. Informationen zum Erstellen einer Instanz von [SupportSQLiteQuery][ref-SupportSQLiteQuery] mit Argumentunterstützung finden Sie unter [SimpleSQLiteQuery][ref-SimpleSQLiteQuery].
  • Die Methode [fallbackToDeSTRUCTiveMigrationFrom][ref-fallbackToDeSTRUCTiveMigrationFrom] von RoomDatabase.Builder akzeptiert jetzt vararg int anstelle von vararg Integer.

Fehlerkorrekturen

  • [RoomDatabase.clearAllTables][ref-clearAllTables] versucht jetzt, Leerzeichen an das Betriebssystem zurückzugeben, indem ein WAL-Prüfpunkt festgelegt und die Datenbank VACUUM ausgeführt wird.
  • [@RawQuery][ref-RawQuery] akzeptiert jetzt jedes Pojo für die observedEntities-Eigenschaft, solange das Pojo über seine Embedded-Felder oder Relations auf eine oder mehrere Entitäten verweist. b/74041772
  • Paging: Die DataSource-Implementierung von Room verarbeitet jetzt Abhängigkeiten mit mehreren Tabellen (z. B. Beziehungen und Joins). Bisher lösten diese keine neuen Ergebnisse aus oder konnten nicht kompiliert werden. b/74128314

Version 1.1.0-alpha1

22. Januar 2018

Neue Funktionen

  • RawQuery: Mit dieser neuen API können @Dao-Methoden den SQL-Code als Abfrageparameter b/62103290, b/71458963, empfangen
  • fallBackToDestructiveMigrationsFrom: Mit dieser neuen API in RoomDatabase.Builder können Sie genauer steuern, ab welcher Start von Schemaversionen destruktive Migrationen zulässig sind (im Vergleich zu „fallbackToDestructiveMigration“). b/64989640
  • Room unterstützt jetzt nur neuere Paging APIs (Alpha-4+). Der eingestellte LivePagedListProvider wird nicht mehr unterstützt. Wenn Sie die neue Alphaversion des Raums verwenden möchten, müssen Sie für das Seitenformat alpha-4 oder höher verwenden und von LivePagedListProvider zu LivePagedListBuilder wechseln, falls noch nicht geschehen.

Fehlerkorrekturen

  • Verbesserte Unterstützung für Kotlin-Kapt-Typen. b/69164099
  • Durch die Reihenfolge der Felder wird das Schema nicht mehr ungültig. b/64290754