Powrót do strony głównej

Room 3: wasmJs i korutyny w KMP

Room 3.0.0-alpha02 wprowadza pakiet room3 z obsługą wasmJs, korutyn i KSP. Migracja uproszczona: aktualizacja pluginu i importów. Nadaje się do projektów KMP z targetami webowymi.

Migracja do Room 3 z obsługą wasmJs
Advertisement 728x90

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.

Google AdInline article slot

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:

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

Google AdInline article slot

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

| 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

Advertisement 728x90

Czytaj dalej