Udostępniliśmy pierwszą wersję alfa biblioteki Room 3.0. Room 3.0 to główna wersja biblioteki, która wprowadza zmiany powodujące niezgodność. Koncentruje się na Kotlin Multiplatform (KMP) i dodaje obsługę JavaScript oraz WebAssembly (WASM) oprócz dotychczasowej obsługi Androida, iOS i JVM na komputerach.
W tym poście na blogu opisujemy zmiany powodujące niezgodność, powody wprowadzenia biblioteki Room 3.0 oraz różne sposoby migracji z Room 2.0.
Zmiany powodujące niezgodność
Room 3.0 zawiera te zmiany powodujące niezgodność z interfejsem API:
- Wycofanie interfejsów API SupportSQLite: Room 3.0 jest w pełni obsługiwana przez interfejsy API sterownika androidx.sqlite. Interfejsy API SQLiteDriver są zgodne z KMP, a usunięcie zależności Room od interfejsu API Androida upraszcza interfejs API na Androidzie, ponieważ eliminuje konieczność obsługi 2 możliwych backendów.
- Brak generowania kodu Java: Room 3.0 generuje wyłącznie kod Kotlin. Jest to zgodne z rozwijającym się paradygmatem Kotlin-first, ale też upraszcza bazę kodu i proces tworzenia, co umożliwia szybsze iteracje.
- Skupienie się na KSP: wycofujemy też obsługę przetwarzania adnotacji Java (AP) i KAPT. Room 3.0 jest wyłącznie procesorem KSP (Kotlin Symbol Processing), co pozwala na lepsze przetwarzanie baz kodu Kotlin bez ograniczeń języka Java.
- Współprogramy jako priorytet: Room 3.0 wykorzystuje współprogramy Kotlin, dzięki czemu jej interfejsy API są oparte na współprogramach. Współprogramy to asynchroniczna platforma zgodna z KMP, a asynchroniczny charakter Room jest kluczowym wymaganiem do obsługi platform internetowych.
Nowy pakiet
Aby zapobiec problemom ze zgodnością z dotychczasowymi implementacjami Room 2.x i bibliotekami z zależnościami przechodnimi do Room (np. WorkManager), Room 3.0 znajduje się w nowym pakiecie, co oznacza, że ma też nową grupę Maven i identyfikatory artefaktów. Na przykład androidx.room:room-runtime zmienił się na androidx.room3:room3-runtime, a klasy takie jak androidx.room.RoomDatabase będą teraz znajdować się w androidx.room3.RoomDatabase.
Kotlin i współprogramy jako priorytet
Ponieważ nie generujemy już kodu Java, Room 3.0 wymaga też KSP i kompilatora Kotlin, nawet jeśli baza kodu, która wchodzi w interakcję z Room, jest napisana w Javie. Zalecamy używanie projektu wielomodułowego, w którym użycie Room jest skoncentrowane, a wtyczkę Kotlin Gradle i KSP można zastosować bez wpływu na resztę bazy kodu.
Room 3.0 wymaga też współprogramów, a konkretnie funkcji DAO, które muszą być zawieszane, chyba że zwracają typ reaktywny, np. Flow. Room 3.0 nie zezwala na blokowanie funkcji DAO. Informacje o tym, jak zacząć integrować współprogramy z aplikacją, znajdziesz w dokumentacji współprogramów na Androidzie.
Migracja do interfejsów API SQLiteDriver
W związku z wycofywaniem SupportSQLite aplikacje będą musiały przejść na interfejsy API SQLiteDriver. Ta migracja jest niezbędna, aby w pełni wykorzystać zalety Room 3.0, w tym możliwość używania dołączonej biblioteki SQLite za pomocą BundledSQLiteDriver. Migrację do interfejsów API sterownika możesz rozpocząć już dziś, korzystając z Room 2.7.0 lub nowszej wersji. Zdecydowanie zalecamy unikanie dalszego używania SupportSQLite. Jeśli zmigrujesz integracje Room do interfejsów API SQLiteDriver, przejście na Room 3.0 będzie łatwiejsze, ponieważ zmiana pakietu polega głównie na aktualizacji odwołań do symboli (importów) i może wymagać minimalnych zmian w miejscach wywołań.
Krótki przegląd interfejsów API SQLiteDriver znajdziesz w dokumentacji interfejsów API SQLiteDriver.
Więcej informacji o tym, jak zmigrować Room do korzystania z interfejsów API SQLiteDriver, znajdziesz w oficjalnej dokumentacji dotyczącej migracji z SupportSQLite.
Otoka SupportSQLite w Room
Rozumiemy, że całkowite usunięcie SupportSQLite może nie być od razu możliwe w przypadku wszystkich projektów. Aby ułatwić przejście, w Room 2.8.0, najnowszej wersji z serii Room 2.0, wprowadziliśmy nowy artefakt o nazwie androidx.room:room-sqlite-wrapper. Ten artefakt oferuje interfejs API zgodności, który umożliwia przekształcenie RoomDatabase w SupportSQLiteDatabase, nawet jeśli interfejsy API SupportSQLite w bazie danych zostały wyłączone z powodu zainstalowania SQLiteDriver. Jest to tymczasowe rozwiązanie dla deweloperów, którzy potrzebują więcej czasu na pełną migrację bazy kodu. Ten artefakt nadal istnieje w Room 3.0 jako androidx.room3:room3-sqlite-wrapper, aby umożliwić migrację do Room 3.0 przy jednoczesnym zachowaniu obsługi krytycznego użycia SupportSQLite.
Na przykład wywołania roomDatabase.openHelper.writableDatabase można zastąpić przez roomDatabase.getSupportWrapper(), a otoka będzie dostępna nawet wtedy, gdy w konstruktorze Room zostanie wywołana funkcja setDriver().
Więcej informacji znajdziesz w dokumentacji room-sqlite-wrapper.
Obsługa Room i SQLite w internecie
Obsługa platformy Kotlin Multiplatform dla JS i WasmJS wprowadza niektóre z najważniejszych zmian w interfejsie API. W szczególności wiele interfejsów API w Room 3.0 to funkcje zawieszane, ponieważ prawidłowa obsługa pamięci masowej w internecie jest asynchroniczna. Interfejsy API SQLiteDriver zostały też zaktualizowane, aby obsługiwać internet, a nowy asynchroniczny sterownik internetowy jest dostępny w androidx.sqlite:sqlite-web. Jest to sterownik oparty na Web Worker, który umożliwia utrwalanie bazy danych w prywatnym systemie plików Origin (OPFS).
Więcej informacji o tym, jak skonfigurować Room w internecie, znajdziesz w informacjach o wersji Room 3.0.
Niestandardowe typy zwracane przez DAO
Room 3.0 wprowadza możliwość dodawania niestandardowych integracji do Room podobnych do RxJava i Paging. Dzięki nowemu interfejsowi API adnotacji o nazwie @DaoReturnTypeConverter możesz utworzyć własną integrację, tak aby wygenerowany przez Room kod był dostępny w czasie działania. Umożliwia to funkcjom @Dao posiadanie niestandardowych typów zwracanych bez konieczności czekania, aż zespół Room doda obsługę. Dotychczasowe integracje są migrowane do korzystania z tej funkcji, dlatego osoby, które z niej korzystają, będą musiały dodać konwertery do definicji @Database lub @Dao.
Na przykład konwerter Paging będzie znajdować się w artefakcie androidx.room3:room3-paging i będzie się nazywać PagingSourceDaoReturnTypeConverter. Natomiast w przypadku LiveData konwerter znajduje się w androidx.room3:room3-livedata i nazywa się LiveDataDaoReturnTypeConverter.
Więcej informacji znajdziesz w sekcji Konwertery typów zwracanych przez DAO w informacjach o wersji Room 3.0.
Tryb konserwacji Room 2.x
Ponieważ prace nad Room będą się koncentrować na Room 3, obecna wersja Room 2.x przechodzi w tryb konserwacji. Oznacza to, że nie będziemy rozwijać żadnych głównych funkcji, ale nadal będziemy udostępniać wersje poprawek (2.8.1, 2.8.2 itp.) z poprawkami błędów i aktualizacjami zależności. Zespół będzie kontynuować te prace do czasu, aż Room 3 stanie się stabilna.
Uwagi końcowe
Jesteśmy bardzo podekscytowani potencjałem Room 3.0 i możliwościami, jakie otwiera ona dla ekosystemu Kotlin. Bądź na bieżąco z kolejnymi aktualizacjami!
-
Nowości dotyczące produktówTo jest ostatnia stabilna wersja Android Studio Quail. Nowe funkcje w Android Studio umożliwiają wydajne i skuteczne tworzenie aplikacji premium z wykorzystaniem AI.
Amman Asfaw • 5 min czytania -
Nowości dotyczące produktówUtrzymanie zdrowego ekosystemu Androida to wspólne zobowiązanie, w którym każda aplikacja i gra ma do odegrania swoją rolę.
Raghavendra Hareesh Pottamsetty • 4 min czytania -
Nowości dotyczące produktówW Google Play bezpieczeństwo użytkowników i sukces deweloperów idą w parze. Stale obserwujemy wzrost liczby aplikacji z funkcjami generowanymi przez AI. Dodanie generatywnej AI do aplikacji to świetny sposób na odblokowanie niesamowitych możliwości twórczych.
Ron Aquino • 4 min czytania
Otrzymuj co tydzień najnowsze informacje o tworzeniu aplikacji na Androida na swoją skrzynkę odbiorczą.