Zurück zur Startseite

Room 3: wasmJs und Coroutines in KMP

Room 3.0.0-alpha02 führt room3-Paket mit wasmJs, Coroutines und KSP-Unterstützung ein. Migration vereinfacht: Plugin- und Import-Update. Geeignet für KMP-Projekte mit Web-Targets.

Migration zu Room 3 mit wasmJs-Unterstützung
Advertisement 728x90

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.

Google AdInline article slot

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:

Google AdInline article slot
  • 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) |

Google AdInline article slot

|----------------------|---------------|---------------|

| 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

Advertisement 728x90

Weiterlesen