Pierwsza wersja alfa Room 3.0 została udostępniona. Room 3.0 to ważna wersja biblioteki, która wprowadza wiele zmian i skupia się na Kotlin Multiplatform (KMP). Oprócz dotychczasowej obsługi Androida, iOS i JVM na komputerach dodaje obsługę JavaScriptu i WebAssembly (WASM).
W tym artykule na blogu opisujemy zmiany powodujące niezgodność, uzasadnienie wprowadzenia Room 3.0 oraz różne sposoby migracji z Room 2.0.
Zmiany powodujące niezgodność
W Room 3.0 wprowadziliśmy te zmiany powodujące niezgodność interfejsu API:
- Wycofanie interfejsów SupportSQLite API: Room 3.0 jest w pełni obsługiwany przez interfejsy sterownika androidx.sqlite API. Interfejsy SQLiteDriver API są zgodne z KMP, a usunięcie zależności Room od interfejsu API Androida upraszcza interfejs API na Androidzie, ponieważ pozwala uniknąć dwóch możliwych backendów.
- Koniec generowania kodu Java: Room 3.0 generuje wyłącznie kod Kotlin. Jest to zgodne z rozwijającym się paradygmatem Kotlin-first, ale upraszcza też bazę kodu i proces programowania, co umożliwia szybsze iteracje.
- Skupienie się na KSP: wycofujemy też obsługę przetwarzania adnotacji w języku Java (AP) i KAPT. Room 3.0 to procesor KSP (Kotlin Symbol Processing), który umożliwia lepsze przetwarzanie baz kodu w języku Kotlin bez ograniczeń związanych z językiem Java.
- Współprogramy na pierwszym miejscu: Room 3.0 wykorzystuje współprogramy Kotlin, dzięki czemu jego interfejsy API są oparte na współprogramach. Korutyny to asynchroniczna platforma zgodna z KMP, a asynchroniczne działanie biblioteki Room jest kluczowym wymaganiem w przypadku obsługi platform internetowych.
Nowy pakiet
Aby zapobiec problemom ze zgodnością z istniejącymi implementacjami Room 2.x i bibliotekami z zależnościami przechodnimi od 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ło się w androidx.room3:room3-runtime, a zajęcia takie jak androidx.room.RoomDatabase będą teraz dostępne pod adresem androidx.room3.RoomDatabase.
Kotlin i współprogramy na pierwszym miejscu
W wersji 3.0 biblioteka Room nie generuje już kodu w języku Java, więc wymaga KSP i kompilatora Kotlina, nawet jeśli baza kodu, która wchodzi z nią w interakcję, jest napisana w języku Java. Zalecamy korzystanie z projektu wielomodułowego, w którym użycie biblioteki Room jest skoncentrowane, a wtyczkę Kotlin Gradle Plugin i KSP można zastosować bez wpływu na pozostałą część bazy kodu.
Room 3.0 wymaga też korutyn, a funkcje DAO 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 SQLiteDriver API
W związku z wycofaniem SupportSQLite aplikacje będą musiały przejść na interfejsy SQLiteDriver API. Ta migracja jest niezbędna, aby w pełni wykorzystać zalety Room 3.0, w tym możliwość korzystania z dołączonej biblioteki SQLite za pomocą BundledSQLiteDriver. Możesz zacząć migrację do interfejsów API sterownika już dziś, korzystając z Room w wersji 2.7.0 lub nowszej. Zdecydowanie zalecamy, aby nie używać już biblioteki SupportSQLite. Jeśli przeniesiesz 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ótkie omówienie interfejsów API SQLiteDriver znajdziesz w dokumentacji interfejsów API SQLiteDriver.
Więcej informacji o migracji Room do interfejsów API SQLiteDriver znajdziesz w oficjalnej dokumentacji migracji z SupportSQLite.
Otoczka Room SupportSQLite
Zdajemy sobie sprawę, że całkowite usunięcie biblioteki SupportSQLite może nie być od razu możliwe w przypadku wszystkich projektów. Aby ułatwić to przejście, w najnowszej wersji Room 2.0, czyli Room 2.8.0, wprowadziliśmy nowy artefakt o nazwie androidx.room:room-sqlite-wrapper. Ten artefakt udostępnia interfejs API zgodności, który umożliwia przekształcenie RoomDatabase w SupportSQLiteDatabase, nawet jeśli interfejsy SupportSQLite API w bazie danych zostały wyłączone z powodu zainstalowania SQLiteDriver. Jest to tymczasowe rozwiązanie dla programistó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 funkcji roomDatabase.openHelper.writableDatabase można zastąpić funkcją roomDatabase.getSupportWrapper(), a otoczka będzie dostępna nawet wtedy, gdy funkcja setDriver() zostanie wywołana w konstruktorze pokoju.
Więcej informacji znajdziesz w dokumentacji room-sqlite-wrapper.
Obsługa Room i SQLite w internecie
Obsługa Kotlin Multiplatform obejmuje platformy JS i WasmJS i wprowadza niektóre z najważniejszych zmian w interfejsie API. Wiele interfejsów API w Room 3.0 to funkcje zawieszania, ponieważ prawidłowa obsługa pamięci internetowej jest asynchroniczna. Zaktualizowaliśmy też interfejsy API SQLiteDriver, aby obsługiwały internet, a w androidx.sqlite:sqlite-web jest dostępny nowy asynchroniczny sterownik internetowy. Jest to sterownik oparty na Web Worker, który umożliwia utrwalanie bazy danych w prywatnym systemie plików pochodzenia (OPFS).
Więcej informacji o konfigurowaniu Room w przeglądarce znajdziesz w informacjach o wersji 3.0.
Niestandardowe typy zwracane przez obiekty DAO
W wersji 3.0 biblioteki Room wprowadzono możliwość dodawania do niej niestandardowych integracji 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 programu. Umożliwia to funkcjom @Dao posiadanie niestandardowych typów zwracanych bez konieczności czekania na dodanie obsługi przez zespół Room. Obecne integracje zostaną przeniesione, aby korzystać z tej funkcji, więc użytkownicy, którzy z niej korzystają, będą musieli dodać konwertery do definicji @Database lub @Dao.
Na przykład konwerter stronicowania znajduje się w artefakcie androidx.room3:room3-paging i nazywa się PagingSourceDaoReturnTypeConverter. W przypadku LiveData konwerter znajduje się w androidx.room3:room3-livedata i nazywa się LiveDataDaoReturnTypeConverter.
Więcej informacji znajdziesz w sekcji DAO Return Type Converters w informacjach o wersji Room 3.0.
Tryb konserwacji Room 2.x
Ponieważ rozwój Room będzie koncentrować się na Room 3, obecna wersja Room 2.x przechodzi w tryb konserwacji. Oznacza to, że nie będą rozwijane żadne główne funkcje, ale nadal będą się pojawiać wersje z poprawkami (2.8.1, 2.8.2 itd.) zawierające poprawki błędów i aktualizacje zależności. Zespół będzie pracować nad tym, dopóki Room 3 nie będzie stabilny.
Uwagi końcowe
Jesteśmy bardzo podekscytowani potencjałem Room 3.0 i możliwościami, jakie otwiera on przed ekosystemem Kotlin. Będziemy na bieżąco informować o postępach.
Czytaj dalej
-
Wiadomości o usługach
Każdy deweloper ma własny proces pracy z AI i własne potrzeby, dlatego ważne jest, aby móc wybrać, w jaki sposób AI ma pomagać w procesie tworzenia aplikacji. W styczniu wprowadziliśmy możliwość wyboru dowolnego lokalnego lub zdalnego modelu AI do obsługi funkcji AI w Android Studio.
Matthew Warner • Czas czytania: 2 minuty
-
Wiadomości o usługach
Android Studio Panda 3 jest już stabilny i gotowy do użycia w środowisku produkcyjnym. Ta wersja zapewnia jeszcze większą kontrolę i możliwość dostosowywania przepływów pracy opartych na AI, co ułatwia tworzenie wysokiej jakości aplikacji na Androida.
Matt Dyor • Czas czytania: 3 minuty
-
Wiadomości o usługach
W Google dokładamy wszelkich starań, aby udostępniać najbardziej zaawansowane modele AI bezpośrednio na urządzeniach z Androidem, które masz w kieszeni. Z przyjemnością ogłaszamy wprowadzenie naszego najnowszego, zaawansowanego otwartego modelu: Gemma 4.
Caren Chang, David Chou • Czas czytania: 3 minuty
Bądź na bieżąco
Otrzymuj co tydzień najnowsze informacje o tworzeniu aplikacji na Androida na swoją skrzynkę odbiorczą.