Room 3: migracja na nową wersję główną z obsługą wasmJs i korutyn
Room 3 wprowadza pakiet androidx.room3, całkowicie rezygnując z zależności od specyficznego dla Androida API sterownika SQLite. Publiczne API korzysta teraz z udokumentowanych alternatyw do obsługi połączeń.
Przykład przejścia ze starego stylu na nowy:
// Było
roomDatabase.query("select * from users").use { cursor -> ... }
// Stało się
roomDatabase.useReaderConnection { connection ->
connection.usePrepared("select * from users") { stmt -> ... }
}
Generowanie kodu migrowało z KAPT na KSP. Cała wewnętrzna logika DAO została przepisana na korutyny, co upraszcza pracę asynchroniczną w Kotlin Multiplatform.
Kluczowa aktualizacja — obsługa wasmJs. Wersja KMP Room jest teraz kompatybilna z WebAssembly, otwierając możliwości dla mobilnego rozwoju webowego.
Usunięto przestarzałe oznaczenia deprecjacji, co oczyszcza codebase z legacy-kodu.
Kroki migracji na Room 3
Migracja przebiega bez radykalnych zmian w architekturze. Główne działania:
- Zaktualizuj wtyczkę i zależności w build.gradle.kts:
// 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")
}
- Zamień importy: RoomDatabase, @Entity i inne klasy znajdują się teraz w pakiecie room3.
- Zbuduj projekt, popraw błędy. Dodano funkcje suspend w DAO, zmieniono nazewnictwo metod.
- Sprawdź schematy bazy danych w katalogu schemas — Room 3 wymaga ich do kompilacji.
Po migracji przetestuj na wszystkich targetach: JVM, Android, iOS, wasmJs.
Zalety dla rozwoju KMP
- Korutyny w core: funkcje suspend domyślnie w DAO, bez potrzeby używania Flow lub LiveData.
- wasmJs: Pełna obsługa WebAssembly pozwala uruchamiać Room w przeglądarce bez haków.
- KSP zamiast KAPT: Szybsza kompilacja, mniej artefaktów.
Porównanie wydajności generowania kodu (na podstawie typowych projektów KMP):
| Metryka | Room 2 (KAPT) | Room 3 (KSP) |
|------------------|---------------|---------------|
| Czas kompilacji | 45 sek | 22 sek |
| Rozmiar APK | 1.2 MB | 0.9 MB |
| Uruchomienie na wasm | Nie | Tak |
Dane orientacyjne, zależą od wielkości projektu.
Co jest ważne
- Nowy pakiet room3 z czystym API bez zależności od Androida.
- Pełna obsługa korutyn i KSP dla KMP.
- Integracja wasmJs dla aplikacji webowych.
- Migracja prosta: aktualizacja zależności + poprawka importów.
- Wersja alfa: oczekuj stabilnego wydania dla produkcji.
Rekomendacje wdrożeniowe
Dla programistów middle/senior: zacznij od projektów greenfield na KMP. W legacy — odłóż migrację do wersji 3.0.0-stable.
Testuj na rzeczywistych scenariuszach:
- Transakcje z suspend.
- Migracje schematów w wasm.
- Wydajność zapytań w przeglądarce.
Room 3 umacnia pozycję jako uniwersalnej ORM dla multiplatform, szczególnie z rozwojem ekosystemu wasm.
— Editorial Team
Brak komentarzy.