Room 3: Migration zur neuen Hauptversion mit wasmJs und Koroutinen-Unterstützung
Room 3 führt das androidx.room3-Paket ein und beseitigt damit vollständig die Abhängigkeit von der Android-spezifischen SQLite Driver API. Die öffentliche API verwendet nun dokumentierte Alternativen für die Verbindungsverwaltung.
Beispiel für den Übergang vom alten zum neuen Stil:
// Vorher
roomDatabase.query("select * from users").use { cursor -> ... }
// Nachher
roomDatabase.useReaderConnection { connection ->
connection.usePrepared("select * from users") { stmt -> ... }
}
Die Codegenerierung ist von KAPT zu KSP migriert. Die gesamte interne DAO-Logik wurde für die Verwendung von Koroutinen umgeschrieben, was asynchrone Arbeit in Kotlin Multiplatform vereinfacht.
Das wichtigste Upgrade ist die wasmJs-Unterstützung. Die KMP-Version von Room ist jetzt mit WebAssembly kompatibel, was neue Möglichkeiten für die mobile Webentwicklung eröffnet.
Veraltete Funktionen wurden entfernt, wodurch die Codebasis von Legacy-Code bereinigt wird.
Schritte für die Migration zu Room 3
Die Migration erfolgt ohne radikale Architekturänderungen. Die Hauptschritte sind:
- Plugin und Abhängigkeiten in build.gradle.kts aktualisieren:
// root build.gradle.kts
plugins {
id("androidx.room3") version "3.0.0-alpha02" apply false
}
// lib build.gradle.kts
plugins {
id("androidx.room3")
}
kotlin {
sourceSets {
commonMain {
val room_version = "3.0.0-alpha02"
implementation("androidx.room3:room3-runtime:$room_version")
ksp("androidx.room3:room3-compiler:$room_version")
}
}
}
room3 {
schemaDirectory("$projectDir/schemas")
}
- Imports ersetzen: RoomDatabase, @Entity und andere Klassen befinden sich jetzt im room3-Paket.
- Projekt bauen und Fehler beheben. Suspend-Funktionen wurden zu DAOs hinzugefügt, und die Methodennamen haben sich geändert.
- Datenbankschemata im schemas-Verzeichnis prüfen – Room 3 benötigt sie für die Kompilierung.
Nach der Migration auf allen Zielplattformen testen: JVM, Android, iOS, wasmJs.
Vorteile für die KMP-Entwicklung
- Koroutinen im Kern: Suspend-Funktionen sind in DAOs Standard, wodurch Flow oder LiveData überflüssig werden.
- wasmJs: Vollständige WebAssembly-Unterstützung ermöglicht den Betrieb von Room im Browser ohne Umwege.
- KSP statt KAPT: Schnellere Kompilierung, weniger Artefakte.
Leistungsvergleich der Codegenerierung (basierend auf typischen KMP-Projekten):
| Metrik | Room 2 (KAPT) | Room 3 (KSP) |
|----------------------|---------------|---------------|
| Kompilierungszeit | 45 Sek | 22 Sek |
| APK-Größe | 1,2 MB | 0,9 MB |
| Läuft auf wasm | Nein | Ja |
Daten sind ungefähre Werte und hängen von der Projektgröße ab.
Wichtige Punkte
- Neues room3-Paket mit einer sauberen API ohne Android-Abhängigkeiten.
- Vollständige Koroutinen- und KSP-Unterstützung für KMP.
- wasmJs-Integration für Webanwendungen.
- Migration ist unkompliziert: Abhängigkeiten aktualisieren + Imports anpassen.
- Alpha-Version: Für den Produktiveinsatz auf die stabile Version warten.
Implementierungsempfehlungen
Für mittlere/senior Entwickler: Mit neuen KMP-Projekten beginnen. Für Legacy-Projekte die Migration bis 3.0.0-stable verschieben.
Mit realen Szenarien testen:
- Transaktionen mit Suspend-Funktionen.
- Schema-Migrationen in wasm.
- Abfrageleistung im Browser.
Room 3 stärkt seine Position als universelle ORM für Multiplattform, insbesondere mit dem Wachstum des wasm-Ökosystems.
— Editorial Team
Noch keine Kommentare.