Pierwsza wersja alfa Room 3.0 została udostępniona. Room 3.0 to ważna wersja biblioteki, która wprowadza wiele zmian. Koncentruje się na Kotlin Multiplatform (KMP) i dodaje obsługę JavaScriptu i WebAssembly (WASM) oprócz dotychczasowej obsługi Androida, iOS i JVM na komputerach.
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 API SQLiteDriver są zgodne z KMP, a usunięcie zależności Room od interfejsu API Androida upraszcza interfejs API Androida, 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 wyłącznie 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.
- Priorytet dla korutyn: Room 3.0 wykorzystuje korutyny Kotlin, dzięki czemu jego interfejsy API mają priorytet dla korutyn. 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 uniknąć problemów ze zgodnością z istniejącymi implementacjami Room w wersji 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 Coroutines First
W Room 3.0 nie ma już generowania kodu w języku Java, więc wymaga on KSP i kompilatora Kotlin, nawet jeśli baza kodu, która wchodzi w interakcję z Room, 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 biblioteki 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 korzystania z 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. Interfejsy API SQLiteDriver zostały też zaktualizowane, aby obsługiwać internet, a w androidx.sqlite:sqlite-web dostępny jest nowy asynchroniczny sterownik internetowy. Jest to sterownik oparty na Web Worker, który umożliwia utrwalanie bazy danych w prywatnym systemie plików źródła (OPFS).
Więcej informacji o konfigurowaniu Room w przeglądarce znajdziesz w informacjach o wersji Room 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 są migrowane, aby korzystać z tej funkcji, dlatego 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 działać stabilnie.
Uwagi końcowe
Jesteśmy bardzo podekscytowani potencjałem biblioteki Room 3.0 i możliwościami, jakie otwiera ona przed ekosystemem Kotlin. Będziemy na bieżąco informować o postępach.
Czytaj dalej
-
Wiadomości o usługach
Ekosystem mobilny stale się rozwija, co stwarza nowe możliwości i zagrożenia. Dzięki tym zmianom Android i Google Play nadal będą dbać o to, aby miliardy użytkowników mogły bez obaw korzystać z aplikacji, a deweloperzy mogli rozwijać innowacje.
Vijaya Kaza • Czas czytania: 3 minuty
-
Wiadomości o usługach
Wersja Jetpack Compose z kwietnia 2026 r. jest stabilna. Ta wersja zawiera moduły podstawowe Compose w wersji 1.11 (zobacz pełne mapowanie listy materiałów), narzędzia do debugowania wspólnych elementów, zdarzenia trackpada i inne funkcje.
Meghan Mehta • Czas czytania: 5 minut
-
Wiadomości o usługach
Android Studio Panda 4 jest już stabilny i możesz go używać w środowisku produkcyjnym. Wprowadziliśmy m.in. tryb planowania i przewidywanie kolejnych zmian, dzięki czemu tworzenie wysokiej jakości aplikacji na Androida jest teraz łatwiejsze niż kiedykolwiek.
Matt Dyor • Czas czytania: 5 minut
Bądź na bieżąco
Otrzymuj co tydzień najnowsze informacje o tworzeniu aplikacji na Androida na swoją skrzynkę odbiorczą.