Room
Najnowsza aktualizacja | Wersja stabilna | Kandydat do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
12 czerwca 2024 r. | 2.6.1 | - | - | 2.7.0-alfa04 |
Deklarowanie zależności
Aby dodać zależność od sali, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.
Zależności dotyczące sal obejmują migracje do pokoi testowych i funkcję RxJava
W pliku build.gradle
aplikacji lub modułu dodaj zależności artefaktów, których potrzebujesz:
Odlotowy
dependencies { def room_version = "2.6.1" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // To use Kotlin annotation processing tool (kapt) kapt "androidx.room:room-compiler:$room_version" // To use Kotlin Symbol Processing (KSP) ksp "androidx.room:room-compiler:$room_version" // optional - RxJava2 support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - RxJava3 support for Room implementation "androidx.room:room-rxjava3:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" // optional - Paging 3 Integration implementation "androidx.room:room-paging:$room_version" }
Kotlin
dependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") annotationProcessor("androidx.room:room-compiler:$room_version") // To use Kotlin annotation processing tool (kapt) kapt("androidx.room:room-compiler:$room_version") // To use Kotlin Symbol Processing (KSP) ksp("androidx.room:room-compiler:$room_version") // optional - Kotlin Extensions and Coroutines support for Room implementation("androidx.room:room-ktx:$room_version") // optional - RxJava2 support for Room implementation("androidx.room:room-rxjava2:$room_version") // optional - RxJava3 support for Room implementation("androidx.room:room-rxjava3:$room_version") // optional - Guava support for Room, including Optional and ListenableFuture implementation("androidx.room:room-guava:$room_version") // optional - Test helpers testImplementation("androidx.room:room-testing:$room_version") // optional - Paging 3 Integration implementation("androidx.room:room-paging:$room_version") }
Więcej informacji o korzystaniu z wtyczki KAPT znajdziesz w dokumentacji KAPT.
Informacje o korzystaniu z wtyczki KSP znajdziesz w krótkiej dokumentacji KSP.
Informacje o korzystaniu z rozszerzeń Kotlin znajdziesz w dokumentacji ktx.
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opcjonalnie w przypadku bibliotek innych niż Android (np. modułów Gradle w języku Java lub Kotlin) możesz korzystać z adnotacji dotyczących sal na platformie androidx.room:room-common
.
Konfigurowanie opcji kompilatora
W przypadku sali dostępne są poniższe opcje procesora adnotacji.
room.schemaLocation |
directory
Umożliwia eksportowanie schematów baz danych do plików JSON w danym katalogu. Więcej informacji znajdziesz w artykule Migracje sal. |
room.incremental |
boolean
Włącza przyrostowy procesor adnotacji w adnotacjach Gradle. Wartość domyślna to true .
|
room.generateKotlin |
boolean
Wygeneruj pliki źródłowe Kotlin zamiast Javy. Wymaga KSP. Wartość domyślna to false .
Więcej informacji znajdziesz w uwagach do wersji 2.6.0.
|
Korzystanie z wtyczki Room Gradle
W przypadku Room w wersji 2.6.0 lub nowszej możesz używać wtyczki Room Gradle do konfigurowania opcji kompilatora Room. Wtyczka konfiguruje projekt w taki sposób, aby generowane schematy (które są danymi wyjściowymi zadań kompilacji i są wykorzystywane na potrzeby automatycznej migracji) są prawidłowo skonfigurowane pod kątem możliwości odtwarzania i buforowania.
Aby dodać wtyczkę, w pliku kompilacji najwyższego poziomu Gradle zdefiniuj wtyczkę i jej wersję.
Odlotowy
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
W pliku kompilacji Gradle na poziomie modułu zastosuj wtyczkę i użyj rozszerzenia room
.
Odlotowy
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
Ustawienie schemaDirectory
jest wymagane, gdy używasz wtyczki Room Gradle. Spowoduje to skonfigurowanie kompilatora Room, różnych zadań kompilacji oraz backendów (javac, KAPT, KSP), tak aby wyprowadzały pliki schematów do folderów o różnej tematyce, na przykład schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Musisz je sprawdzić w repozytorium, aby użyć ich do weryfikacji i automatycznej migracji.
Niektórych opcji nie można skonfigurować we wszystkich wersjach wtyczki Room Gradle, choć są one obsługiwane przez kompilator Room. W tabeli poniżej znajdziesz wszystkie opcje oraz wersję wtyczki Room Gradle, która obsługuje jej konfigurację za pomocą rozszerzenia room
. Jeśli wersja jest niższa lub ta opcja nie jest jeszcze obsługiwana, możesz zamiast niej użyć opcji procesora adnotacji.
Opcja | Od wersji |
---|---|
room.schemaLocation (pole wymagane) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
Korzystanie z opcji procesora adnotacji
Jeśli nie korzystasz z wtyczki Room Gradle lub jeśli wybrana opcja nie jest obsługiwana przez Twoją wersję wtyczki, możesz skonfigurować pokój za pomocą opcji procesora adnotacji. Instrukcje znajdziesz w sekcji Dodawanie zależności kompilacji. Sposób określania opcji adnotacji zależy od tego, czy dla sal używasz KSP czy KAPT.
Odlotowy
// For KSP ksp { arg("option_name", "option_value") // other otions... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "option_name":"option_value", // other options... ] } } } }
Kotlin
// For KSP ksp { arg("option_name", "option_value") // other options... } // For javac and KAPT android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "option_name" to "option_value", // other options... ) } } } }
Ponieważ room.schemaLocation
jest katalogiem, a nie typem podstawowym, podczas dodawania tej opcji należy użyć CommandLineArgumentsProvider
, aby Gradle dowiedziała się o tym katalogu podczas przeprowadzania aktualnych kontroli.
Opcja Migruj bazę danych sal pokazuje pełną implementację obiektu CommandLineArgumentsProvider
, która zawiera lokalizację schematu.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 2.7
Wersja 2.7.0-alfa04
12 czerwca 2024 r.
Aplikacja androidx.room:room-*:2.7.0-alpha04
została zwolniona. Wersja 2.7.0-alpha04 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd w procesorze adnotacji sali generował niezgodny kod KMP, gdy w DAO zdefiniowany był typ zwrotu dla wielu map. (b/340983093)
- Rozwiązaliśmy problem, który powodował, że funkcja Room nie mogła znaleźć wygenerowanej implementacji bazy danych, jeśli klasa z adnotacjami
@Database
nie miała pakietu. (b/342097292) - Rozwiązaliśmy problem, który powodował, że włączenie automatycznego zamykania i unieważniania wielu instancji czasami powodowało błąd
ConcurrentModificationException
, gdy baza danych została automatycznie zamknięta z powodu bezczynności.
Wersja 2.7.0-alfa03
29 maja 2024 r.
Aplikacja androidx.room:room-*:2.7.0-alpha03
została zwolniona. Wersja 2.7.0-alpha03 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw różne problemy związane z Kotlin 2.0 i KSP 2.0. Pamiętaj, że Kotlin 2.0 z obsługą KSP 2 nie jest w pełni kompletny i nasz zespół pracuje nad różnymi interfejsami API i zmianami w działaniu w nowym kompilatorze. (b/314151707)
Wersja 2.7.0-alfa02
14 maja 2024 r.
Aplikacja androidx.room:room-*:2.7.0-alpha02
została zwolniona. Wersja 2.7.0-alpha02 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono różne problemy z KSP.
Wersja 2.7.0-alfa01
1 maja 2024 r.
Aplikacja androidx.room:room-*:2.7.0-alpha01
została zwolniona. Wersja 2.7.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Obsługa wielu platform (KMP) w usłudze Kotlin: w tej wersji sala została przekształcona w bibliotekę Kotlin Multiplatform (KMP). Chociaż mamy jeszcze trochę do zrobienia, w tej wersji wprowadziliśmy nową wersję pokoju, w której większość funkcji została „wspólnie” (dostosowana do obsługi wielu platform). Obecnie obsługiwane platformy to Android, iOS, JVM (komputery), Mac i natywny system Linux. Wszystkie brakujące funkcje na nowo obsługiwanych platformach zostaną przekształcone w funkcje „pełne” w kolejnych wersjach sal.
Więcej informacji o tym, jak zacząć korzystać z tego rodzaju KMP, znajdziesz w oficjalnej dokumentacji tego narzędzia.
- Generowanie kodu Kotlin na platformie KSP jest domyślnie włączone, jeśli przetwarzanie odbywa się przez KSP. W przypadku projektów KAPT lub wyłącznie Java usługa Room będzie nadal generować źródła Javy.
Zmiany w interfejsie API
- Dodano przeciążenie obiektu
Room.databaseBuilder()
, które wykorzystuje parametr lambda, którego należy używać z funkcją wygenerowaną przez pokój, aby uniknąć używania odbicia podczas tworzenia instancji wygenerowanej implementacjiRoomDatabase
. Przykład użycia:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Do kreatora dodano interfejs API służący do konfigurowania pomieszczenia:
RoomDatabase.Builder.setQueryCoroutineContext
.CoroutineContext
Pamiętaj, że obiektRoomDatabase
można skonfigurować tylko z wykonawcą za pomocą metodysetQueryExecutor
lub w kontekście koryntyńskim, ale nie w obu tych przypadkach. - Dodano interfejs API do konfigurowania sali z sterownikiem
SQLite
:RoomDatabase.Builder.setDriver()
. Więcej informacji o interfejsieSQLite
Driver API znajdziesz w dokumentacji SQLite KMP. - Dodano interfejsy API umożliwiające dostęp do bazowego zasobu
SQLiteConnection
z interfejsów API sterowników:RoomDatabase.useReaderConnection
iRoomDatabase.useWriterConnection
. - Wywołania zwrotne dotyczące pokoju Varios mają teraz przeciążoną wersję, która otrzymuje
SQLiteConnection
zamiastSupportSQLiteDatabase
. Powinny one zostać zastąpione podczas migracji do projektu KMP. Więcej informacji o przenoszeniu wykorzystania sal w aplikacji na Androida do popularnego modułu KMP znajdziesz w przewodniku po migracji. Wywołania zwrotne:Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- Artefakt KTX
androidx.room:room-ktx
został scalony z usługąandroidx.room:room-runtime
wraz ze wszystkimi interfejsami API. Artefakt jest teraz pusty. Usuń go z listy zależności.
Wersja 2.6
Wersja 2.6.1
29 listopada 2023 r.
Aplikacja androidx.room:room-*:2.6.1
została zwolniona. Wersja 2.6.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem w wygenerowanym kodzie, w którym domyślna wartość podwójnych kolumn w
EntityCursorConverter
była ustawiona na 0 zamiast 0,0. Uwzględniliśmy też możliwą poprawkę dotyczącą podobnego rozmiaru liter w kolumnach typu liczba zmiennoprzecinkowa. (Id75f5, b/304584179) - Wyjątki zgłoszone z wczytań typu
PagingSource
będą teraz rozpowszechnione jakoLoadStateUpdate
zLoadResult.Error
zawierających element Throwable. Ten stan błędu można zaobserwować wPagingDataAdapter.loadStateFlow(Views)
lubLazyPagingItems.loadState(Compose)
. Zwróć uwagę, że jest to zmiana w zachowaniu, przy czym wcześniejsze błędy wczytywania będą przechwytywać jako wyjątek zgłoszony przez metodę dao, która spowodowała wczytanie. (I93887, b/302708983)
Wersja 2.6.0
18 października 2023 r.
Aplikacja androidx.room:room-*:2.6.0
została zwolniona. Wersja 2.6.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.5.0
- Opcja włączenia generowania kodu Kotlin (lub „Kotlin CodeGen”) jest teraz dostępna w usłudze Room KSP. (4297ec0). Aby włączyć Kotlin CodeGen w pokoju, dodaj nazwę opcji
room.generateKotlin
do opcji procesora dla KSP. Więcej informacji o przekazywaniu opcji dotyczących podmiotu przetwarzającego w przypadku KSP znajdziesz w dokumentacji KSP.
Uwaga: jeśli używasz narzędzia Kotlin CodeGen, pamiętaj, że zostały dodane dodatkowe ograniczenia. Właściwości abstrakcyjne jako metody pobierania danych DAO lub zapytania DAO w Kotlin CodeGen są niedozwolone i powinny być przepisane jako funkcje, aby uniknąć błędnego założenia, że wartość właściwości jest stała i ma ustalony wynik. Kolejnym ograniczeniem jest to, że typy zwrotów kolekcji z wartością null nie są już dozwolone w Room for Kotlin CodeGen.
Ostrzeżenie: możesz zauważyć, że Twoje projekty są bardziej rygorystyczne pod względem wartości null podczas korzystania z Kotlin CodeGen. W narzędziu Kotlin CodeGen wartość null argumentów typu jest ważna, ale w Javie jest ona zazwyczaj ignorowana. Załóżmy na przykład, że masz zwracany typ „Flow<foo\>”, a tabela jest pusta. W Java CodeGen nie spowoduje to żadnych problemów, ale w narzędziu Kotlin CodeGen pojawi się błąd. Aby tego uniknąć, musisz użyć metody „Flow<foo?\>” przy założeniu, że emitowana jest wartość null. </foo?\></foo\>
- Nowy artefakt wtyczki Room Gradle został dodany do pokoju o identyfikatorze
androidx.room
. Rozwiązuje on istniejące problemy dotyczące pokoju związane z danymi wejściowymi i danymi wyjściowymi schematów za pomocą opcji procesora adnotacji Gradle. Więcej informacji znajdziesz w informacjach o wersji sali 2.6.0-alfa02. - W przypadku KSP obsługiwane są teraz klasy wartości w elementach dotyczących sal. (4194095)
- Typy zwracanych map zagnieżdżonych w funkcjach DAO są teraz obsługiwane w sekcji Pokój. (I13f48, 203008711)
Wersja 2.6.0-rc01
20 września 2023 r.
Aplikacja androidx.room:room-*:2.6.0-rc01
została zwolniona. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.
Wersja 2.6.0-beta01
23 sierpnia 2023 r.
Aplikacja androidx.room:room-*:2.6.0-beta01
została zwolniona. Wersja 2.6.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Obsługiwanie wyjątku
SQLite
w przypadku specjalnego przypadku, który wystąpił podczas upserta, gdy wyjątek2067 SQLITE_CONSTRAINT_UNIQUE
zostanie wywołany podczas upserta, powinien wykonać aktualizację przez upsert. (If2849, b/243039555)
Wersja 2.6.0-alfa03
9 sierpnia 2023 r.
Aplikacja androidx.room:room-*:2.6.0-alpha03
została zwolniona. Wersja 2.6.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
- Typy zwracanych map zagnieżdżonych w funkcjach DAO są teraz obsługiwane w sekcji Pokój. (I13f48, 203008711)
Zmiany w interfejsie API
- Utworzono nową adnotację typu o nazwie
@MapColumn
, która zastąpiła adnotację@MapInfo
, która została już wycofana. W przypadku każdej nazwy kolumny (keyColumnName
,valueColumnName
lub obu) podanej w adnotacji@MapInfo
musisz zadeklarować adnotację@MapColumn
tylko zcolumnName
i użyć adnotacji dla określonego argumentu typu, do którego się on odwołuje (klucz lub wartość mapy), w zwracanym typie funkcji DAO. Dzieje się tak, ponieważ adnotacja@MapColumn
jest używana bezpośrednio w argumentu typu w obrębie zwracanego typu funkcji DAO, a nie w samej funkcji, takiej jak@MapInfo
. Więcej informacji znajdziesz w dokumentacji@MapColumn
. (Ib0305, b/203008711) - Zaktualizowano pliki interfejsu API, aby dodać adnotacje do pomijania zgodności (I8e87a, b/287516207)
- Interfejsy API wtyczki Room Gradle zostały zaktualizowane, aby nie zawsze wymagały konfiguracji poszczególnych wariantów. Oznacza to, że wtyczka może akceptować globalną lokalizację dla wszystkich wariantów bez tworzenia wielu katalogów. Umożliwia to płynniejszą migrację, ale jest też wystarczająco elastyczna, aby ręcznie konfigurować smaki lub schematy typów kompilacji, a jednocześnie zachować zalety wtyczki (kompilacje możliwe do odtworzenia i zapisywane w pamięci podręcznej). (I09d6f, b/278266663)
Poprawki błędów
- Usunięto lukę w zabezpieczeniach potencjalnej wycieku pamięci w
QueryInterceptorStatement
. (I193d1). - Naprawiono nieprawidłowe działanie funkcji
QueryInterceptorDatabase execSQL()
. (Iefdc8)
Wersja 2.6.0-alfa02
21 czerwca 2023 r.
Aplikacja androidx.room:room-*:2.6.0-alpha02
została zwolniona. Wersja 2.6.0-alpha02 zawiera te zatwierdzenia.
Wtyczka Room Gradle
Ta nowa wersja zawiera nowy artefakt wtyczki Room Gradle o identyfikatorze androidx.room
, który rozwiązuje różne problemy z funkcją Room dotyczące danych wejściowych i wyjściowych schematów za pomocą opcji procesora adnotacji Gradle. Wtyczka Room Gradle konfiguruje projekt w taki sposób, aby generowały schematy wykorzystywane podczas automatycznej migracji i wyniki zadań kompilacji, które są prawidłowo skonfigurowane pod kątem możliwości odtwarzania i buforowania. Wtyczka udostępnia DSL do skonfigurowania lokalizacji schematu podstawowego:
room {
schemaDirectory("$projectDir/schemas/")
}
Wtyczka skonfiguruje kompilator Room, różne zadania kompilacji i jego backendy (javac, KAPT, KSP), aby umieszczały pliki schematu w folderach ze schematami, np. schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Tak jak zwykle pliki te są rejestrowane w repozytorium w celu użycia ich do weryfikacji i automatycznej migracji. Po przejściu na korzystanie z wtyczki zamiast opcji procesora adnotacji istniejące pliki schematów muszą zostać skopiowane do wygenerowanych katalogów rodzajów danych utworzonych przez wtyczkę. Jest to jednorazowa migracja, którą należy wykonać ręcznie. Dokumentacja schematu na developers.android.com zostanie w przyszłości zaktualizowana, gdy rozwiążemy problem, a wtyczka będzie stabilna, więc warto spróbować.
Zmiany w interfejsie API
- Interfejs
RoomDatabase.QueryCallback
został zdefiniowany jako działający interfejs umożliwiający wykorzystanie konwersji SAM. (Iab8ea, b/281008549)
Poprawki błędów
- Rozwiązywanie problemów powstałych podczas tworzenia instancji bazy danych w Robolectric po migracji źródeł Room z Javy do Kotlin. (Ic053c, b/274924903)
Wersja 2.6.0-alfa01
22 marca 2023 r.
Aplikacja androidx.room:room-*:2.6.0-alpha01
została zwolniona. Wersja 2.6.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Obsługa klas wysokiej jakości w sali dla KSP. Pokój może teraz obsługiwać klasy wartości w elementach. (4194095)
- Generowanie kodu Kotlin(lub „Kotlin CodeGen”) można teraz włączyć w pokoju (4297ec0). Aby włączyć Kotlin CodeGen w pokoju, dodaj nazwę opcji
room.generateKotlin
do opcji procesora dla KSP. Więcej informacji o przekazywaniu opcji dotyczących podmiotu przetwarzającego w przypadku KSP znajdziesz w dokumentacji KSP.
Uwaga: jeśli używasz narzędzia Kotlin CodeGen, pamiętaj, że zostały dodane dodatkowe ograniczenia. Właściwości abstrakcyjne jako metody pobierania danych DAO lub zapytania DAO w Kotlin CodeGen są niedozwolone i powinny być przepisane jako funkcje, aby uniknąć błędnego założenia, że wartość właściwości jest stała i ma ustalony wynik. Kolejnym ograniczeniem jest to, że typy zwrotów kolekcji z wartością null nie są już dozwolone w Room for Kotlin CodeGen.
Ostrzeżenie: możesz zauważyć, że Twoje projekty są bardziej rygorystyczne pod względem wartości null podczas korzystania z Kotlin CodeGen. W narzędziu Kotlin CodeGen wartość null argumentów typu jest ważna, ale w Javie jest ona zazwyczaj ignorowana. Załóżmy na przykład, że masz zwracany typ „Flow<foo\>”, a tabela jest pusta. W Java CodeGen nie spowoduje to żadnych problemów, ale w narzędziu Kotlin CodeGen pojawi się błąd. Aby tego uniknąć, musisz użyć metody „Flow<foo?\>” przy założeniu, że emitowana jest wartość null. </foo?\></foo\>
Zmiany w interfejsie API
- Ochrona przed niesensownym wykorzystaniem zbiorów z wartością null w typach zwracanych metod DAO. (I777dc, b/253271782, b/259426907)
- Dodaj interfejs API do tworzenia przepływu, który generuje zmiany w module śledzenia unieważnień. Interfejs API przydaje się do tworzenia strumieni, które muszą reagować na zmiany w bazie danych. (I8c790, b/252899305)
Poprawki błędów
- Nie zezwalaj na właściwości abstrakcyjne jako metody pobierania DAO lub zapytania DAO w programie Codegen Kotlin. Zamiast tego należy je przepisać jako funkcje, aby uniknąć błędnego zakładania, że wartość właściwości jest stała i ma ustalony wynik przechowywany. (If6a13, b/127483380, b/257967987)
Wersja 2.5.2
Wersja 2.5.2
21 czerwca 2023 r.
Aplikacja androidx.room:room-*:2.5.2
została zwolniona. Wersja 2.5.2 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązano problem ze zgodnością pliku kotlinx-metadata-jvm. (386d5c)
- Napraw błąd, który powoduje, że funkcja Room zgłasza błąd podczas użycia w teście Robolectric. (f79bea, b/274924903)
Wersja 2.5.1
Wersja 2.5.1
22 marca 2023 r.
Aplikacja androidx.room:room-*:2.5.1
została zwolniona. Wersja 2.5.1 zawiera te zatwierdzenia.
Poprawki błędów
- Nie sprawdzaj katalogu nadrzędnego bazy danych w
FrameworkSQLiteHelper
, jeśli baza danych jest już otwarta. (5de86b8) - Użyj testu
isOpenInternal
, aby sprawdzić, czy baza danych jest już otwarta. (E91fb35) - Dostępna jest teraz lepsza obsługa zgłoszeń zgłaszanych w pokoju
acquireTransactionThread()
. (219f98b). Podczas zawieszania transakcji Room używa wątku od wykonawcy transakcji, uruchamia w niej pętlę zdarzeń i wysyła do niej zawieszanie operacji na bazie danych, aby wszystkie te działania były wewnątrz koordynacji transakcji. Zazwyczaj wątek transakcji jest inny niż ten, w którym rozpoczęła się transakcja, ale w niektórych przypadkach są one takie same. Na potrzeby obsługi takich przypadków rezonatorawithTransaction()
został zmodyfikowany tak, aby nie wymagał już zadania kontrolnego. Zamiast tego wykonuje blok zawieszający transakcji z elementurunBlocking
w wątku transakcji.
Wersja 2.5.0
Wersja 2.5.0
22 lutego 2023 roku
Opublikowano androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
i androidx.room:room-paging-rxjava3:2.5.0
. Wersja 2.5.0 zawiera te zatwierdzenia.
Wersja 2.5.0
11 stycznia 2023 r.
Aplikacja androidx.room:room-*:2.5.0
została zwolniona. Wersja 2.5.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.4.0
- Wszystkie źródła
room-runtime
zostały przekonwertowane z języka Java na Kotlin. Jeśli Twój kod znajduje się w kotlinie, mogą wystąpić problemy ze zgodnością źródła z powodu konwersji biblioteki na Kotlin. Na przykład znana zmiana niekompatybilna ze źródłem polega na tym, że wInvalidationTracker
musisz teraz zadeklarowaćonInvalidate()
w poluObserver
, aby mieć parametr typuSet
, a nieMutableSet
. Ponadto niektóre metody getter zostały przekonwertowane na właściwości wymagające składni dostępu do właściwości w plikach Kotlin. Jeśli wystąpią poważne niezgodności, zgłoś błąd. - Dodaliśmy nową adnotację skrótu
@Upsert
, która próbuje wstawić encję w przypadku braku konfliktu unikalności lub zaktualizować element w przypadku konfliktu. (I7aaab, b/241964353) - Dodaliśmy nowe artefakty stronicowania pokoju
room-paging-rxjava2
,room-paging-rxjava3
iroom-paging-guava
, aby zapewnić pomoc na potrzeby strony w pokojach. - Dodano interfejsy API do określania nazw tabel kluczy i wartości w celu ich ujednoznacznienia w języku
@MapInfo
(Icc4b5).
Wersja 2.5.0-rc01
7 grudnia 2022 r.
Aplikacja androidx.room:room-*:2.5.0-rc01
została zwolniona. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.
- Ta wersja jest taka sama jak
2.5.0-beta02
.
Wersja 2.5.0-beta02
9 listopada 2022 r.
Aplikacja androidx.room:room-*:2.5.0-beta02
została zwolniona. Wersja 2.5.0-beta02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Poprawiono różne interfejsy API, które przyjmują argumenty zapytania z argumentu niezmiennego (
Array<Any?>
) do kontrawariancji (Array<out Any?>
), aby dopasować działanie tablicy w Javie. (b/253531073)
Wersja 2.5.0-beta01
5 października 2022 r.
Aplikacja androidx.room:room-*:2.5.0-beta01
została zwolniona. Wersja 2.5.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Ogranicz minimalną wersję obsługującą
@Upsert
do interfejsu API 16. Wynika to z braku możliwości określenia tożsamości w przypadku konfliktu z ograniczeniem klucza głównego w starszych interfejsach API. (I5f67f, b/243039555)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że tabele cieni były nieprawidłowo wyeksportowane do plików
.json
schematu, co powodowało ich uszkodzenie. (I4f83b, b/246751839)
Wersja 2.5.0-alfa03
24 sierpnia 2022 r.
Aplikacja androidx.room:room-*:2.5.0-alpha03
została zwolniona. Wersja 2.5.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy nową adnotację skrótu
@Upsert
, która próbuje wstawić encję w przypadku braku konfliktu unikalności lub zaktualizować element w przypadku konfliktu. (I7aaab, b/241964353)
Poprawki błędów
- Podczas sprawdzania ograniczenia klucza obcego poddanego automatycznej migracji pokój będzie teraz zgłaszać żądanie
SQLiteConstraintException
zamiastIllegalStateException
. (I328dd) - Popraw niezgodną zmianę źródła Kotlin dla metod pobierania / właściwości
getOpenHelper
,getQueryExecutor
igetTransactionExecutor
. (Iad0ac)
Wersja 2.5.0-alfa02
1 czerwca 2022 r.
Aplikacja androidx.room:room-*:2.5.0-alpha02
została zwolniona. Wersja 2.5.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano nowe artefakty usługi
room-paging
room-paging-rxjava2
,room-paging-rxjava3
iroom-paging-guava
do obsługi stron w pokoju (41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,6}603
Zmiany w interfejsie API
- Cała domena
room-runtime
została przekonwertowana z Javy na Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, ﮯb/2Uwaga: mogą występować problemy ze zgodnością źródła z powodu konwersji biblioteki na Kotlin. Jeśli Twój kod był w kotlin i dzwonił do starej wersji Room, nowa wersja będzie musiała obsługiwać takie przypadki. Na przykład znana zmiana niekompatybilna ze źródłem polega na tym, że w
InvalidationTracker
musisz teraz zadeklarowaćonInvalidate()
w poluObserver
, aby mieć parametr typuSet
, a nieMutableSet
. - Dodano interfejsy API do określania nazw tabel kluczy i wartości w celu ich ujednoznacznienia w języku
@MapInfo
(Icc4b5). - Rozwiąż problem ze zgodnością źródła, aby ponownie zezwolić na
@Ignore
w metodach pobierania usług. (Ifc2fb)
Poprawki błędów
- Zduplikowany algorytm heurystyczny rozstrzygania kolumn. Pokój będzie teraz próbować rozwiązać niejednoznaczne kolumny w zapytaniu z wieloma mapami. Dzięki temu polecenia JOIN z tabelami zawierającymi tabele o tej samej nazwie mogą być prawidłowo zmapowane na obiekt danych wyników. (I4b444, b/201306012, b/212279118)
Wersja 2.5.0-alfa01
23 lutego 2022 r.
Aplikacja androidx.room:room-*:2.5.0-alpha01
została zwolniona. Wersja 2.5.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Rozwiązaliśmy problem, który powodował, że użycie sali
@IntDef
nie było egzekwowane w źródłach Kotlin. (I75f41, b/217951311) - Rozwiązaliśmy problem ze zgodnością źródła, który powodował ponowne zezwalanie na
@Query
w metodach pobierania usług. (I0a09b) - Przekonwertowano zasób typu Common z Javy na Kotlin. (I69c48, b/206858235)
Uwaga: mogą wystąpić problemy ze zgodnością źródła, ponieważ niektóre usługi zostały przeniesione do obiektów towarzyszących podczas konwersji biblioteki do usługi Kotlin. Jeśli Twój kod był w kotlin i używał starej wersji Room, nowa wersja będzie potrzebować sufiksu „.Companion” w celu uzyskania dostępu do tych właściwości.
- Przekonwertowano migrację sal z Javy do Kotlin. (I2724b, b/206858622)
- Przekonwertowano
paging
powiązanych plików w programieroom-runtime
z języka Java na Kotlin. (I82fc8, b/206859668) - Dodano interfejs API do blokowania wielu procesów i używania na poziomie FrameworkSQLite*, aby chronić tworzenie i migracje baz danych w wielu procesach po raz pierwszy. (Ied267, b/193182592)
Poprawki błędów
- Dodano obsługę właściwości wewnętrznych w źródłach Kotlin.
Jest to drobna zmiana sposobu działania funkcji Room, w której używa się nazwy źródłowej funkcji, a jednocześnie dopasowuje je do właściwości w postaci pobierających/seterów (wcześniej korzystała z nazwy JVM funkcji, która różni się w przypadku funkcji/właściwości wewnętrznych).
Jeśli używasz niestandardowych adnotacji
@JvmName
do dopasowywania metod pobierania i seterów do właściwości prywatnych, po aktualizacji dokładnie sprawdź wygenerowany kod (If6531, b/205289020)
Wersja 2.4.3
Wersja 2.4.3
27 lipca 2022 roku
Aplikacja androidx.room:room-*:2.4.3
została zwolniona. Wersja 2.4.3 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd, który powodował, że aplikacja Room nie rozpoznaje funkcji zawieszania w Kotlin w wersji 1.7 (b/236612358).
Wersja 2.4.2
Wersja 2.4.2
23 lutego 2022 r.
Aplikacja androidx.room:room-*:2.4.2
została zwolniona. Wersja 2.4.2 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawianie problemu z generowaniem kodu dla funkcji zawieszania
@Transaction
Dao z treścią, która generuje domyślną metodę interfejsu w związku z kompilacją za pomocą metody-Xjvm-default=all
lub jej odpowiednika. (Ia4ce5) - Naprawianie błędu polegającego na tym, że sala generuje kod dla metody zapytania typu
Array<ByteArray>
zwracającego typ. (If086e, b/213789489)
Wersja 2.4.1
Wersja 2.4.1
12 stycznia 2022 r.
Aplikacja androidx.room:room-*:2.4.1
została zwolniona. Wersja 2.4.1 zawiera te zatwierdzenia.
Poprawki błędów
- Dodano obsługę właściwości wewnętrznych w źródłach Kotlin.
Jest to drobna zmiana sposobu działania funkcji Room, w której używa się nazwy źródłowej funkcji, a jednocześnie dopasowuje je do właściwości w postaci pobierających/seterów (wcześniej korzystała z nazwy JVM funkcji, która różni się w przypadku funkcji/właściwości wewnętrznych).
Jeśli używasz niestandardowych adnotacji
@JvmName
do dopasowywania metod pobierania i seterów do właściwości prywatnych, po aktualizacji dokładnie sprawdź wygenerowany kod (If6531, b/205289020)
Wersja 2.4.0
Wersja 2.4.0
15 grudnia 2021 roku
Aplikacja androidx.room:room-*:2.4.0
została zwolniona. Wersja 2.4.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.3.0
- Automatyczne migracje: sala udostępnia teraz interfejs API do automatycznego generowania migracji, o ile są eksportowane schematy. Aby poinformować usługę, że sala powinna wygenerować automatyczną migrację, można zadeklarować wersje, z których i do których chcesz przenieść nową usługę
@Database#autoMigrations
. Gdy sala potrzebuje dodatkowych informacji o zmianach nazw lub usunięcia tabel i kolumn, adnotacja@AutoMigration
może zadeklarować klasę specyfikacji zawierającą takie dane wejściowe. Więcej informacji znajdziesz w dokumentacji@AutoMigration
. - Wstrzykiwanie zależności w automatycznych migracji:
@ProvidedAutoMigrationSpec
to nowy interfejs API do deklarowania, żeAutoMigrationSpec
będzie dostarczany w czasie działania przezRoomDatabase.Builder#addAutoMigrationSpec()
. Dzięki temu platforma wstrzykiwania zależności może udostępniać te specyfikacje, gdy potrzebne są złożone zależności. - Pomoc pomocnicza podczas testów migracji automatycznych migracji: interfejs
MigrationTestHelper
sali został zaktualizowany w celu obsługi automatycznej migracji przez udostępnienie nowego interfejsu API konstruktora, który otrzymuje testowaną klasę bazy danych. Dzięki temu pomocnik może automatycznie dodać migracje automatyczne w ten sam sposób podczasrunMigrationsAndValidate
. - Obsługa stron w pokoju: udostępniliśmy pakiet
androidx.room:room-paging
, który zapewnia natywny poziom obsługi stron w wersji 3.0 w przypadku zapytań dotyczących sal zwracających wartośćandroidx.paging.PagingSource
. - Relacyjne metody zapytań: pokój obsługuje teraz metody zwracania typu
@Dao
wielu map, przydatne w przypadku instrukcji JOIN. Obsługiwane typy map multi toMap
,SparseArray
,LongSparseArray
orazImmutableMap
,ImmutableSetMultimap
iImmutableListMultimap
Guawy.
Wersja 2.4.0-rc01
Grudzień 1, 2021
Aplikacja androidx.room:room-*:2.4.0-rc01
została zwolniona. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.
Nowe funkcje
- Zaktualizuj zależność pokoju od KSP do
1.6.0-1.0.1
, aby zapewnić obsługę Kotlin 1.6
Wersja 2.4.0-beta02
17 listopada 2021 r.
Aplikacja androidx.room:room-*:2.4.0-beta02
została zwolniona. Wersja 2.4.0-beta02 zawiera te zatwierdzenia.
Nowe funkcje
- W @MapInfo dodaliśmy obsługę SparseArray i LongSparseArray. (Ic91a2b/138910317)
Poprawki błędów
- Dodaliśmy nowy analizator TypeConverter, który uwzględnia informacje o nullingu w typach. Te informacje są dostępne tylko w KSP, więc są domyślnie włączone tylko w KSP. Jeśli powodują jakiekolwiek problemy, możesz je wyłączyć, przekazując do podmiotu przetwarzającego adnotacje room.useNullAwareTypeAnalysis=false. Jeśli tak się stanie, zgłoś błąd w pliku, ponieważ w przyszłości ta flaga zostanie usunięta. W nowym analizatorze TypeConverter sugeruje się udostępnianie tylko nienull odbierających typów konwersji, ponieważ nowy analizator może zakończyć je testem o wartości null. Pamiętaj, że nie ma to wpływu na użytkowników używających KAPT lub Javy jako procesorów adnotacji (w przeciwieństwie do KSP) nie ma informacji o dopuszczalności w typach. (Ia88f9, b/193437407)
- Naprawa błędu, który powodował, że aplikacja Room nie kompilowała się z błędem SQL, gdy jednostka FTS zadeklarowała, że korzysta z tokenizatora ICU. (I00db9, b/201753224)
- Rozwiązaliśmy problem dotyczący automatycznych migracji, który dotyczył dodania nowej kolumny do umieszczonego elementu między wersjami. (I5fcb1b/193798291)
- Rozwiązaliśmy problem dotyczący zwracanych typów zapytań relacyjnych w zapytaniach LEFT JOIN. Dzięki tym zmianom, jeśli obecne jest mapowanie 1-wiele, zbiór zwrócony dla klucza nie będzie zawierał nieprawidłowego obiektu wartości, jeśli nie znajdzie się on w kursorze. Jeśli nie zostaną znalezione żadne prawidłowe wartości, klucz zostanie zmapowany na pusty zbiór. (Id5552b/201946438).
- Rozwiązaliśmy problem z automatyczną migracją, gdy nie udało się zmienić znaczenia słów kluczowych SQLite w nazwach kolumn. (Idbed4b/197133152).
Wersja 2.4.0-beta01
13 października 2021 r.
Aplikacja androidx.room:room-*:2.4.0-beta01
została zwolniona. Wersja 2.4.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że w przypadku automatycznej migracji nie dodano nowych kolumn, gdy inna tabela w tej samej automatycznej migracji miała też nową kolumnę o tej samej nazwie. (Ia5db5, b/200818663)
- Implementacja PagingSource wygenerowana przez stronicowanie pokoju korzysta teraz z
queryExecutor
przekazywanego przezRoomDatabase.Builder
, więc można go zastąpić zamiastDispatchers.IO
wcześniej. (Iae259)
Wersja 2.4.0-alfa05
29 września 2021 r.
Aplikacja androidx.room:room-*:2.4.0-alpha05
została zwolniona. Wersja 2.4.0-alpha05 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano wbudowany konwerter dla UUID. (I671e8, b/73132006)
Zmiany w interfejsie API
Dodaliśmy nową właściwość do adnotacji TypeConverters, aby umożliwić programistom wyłączenie wbudowanych konwerterów Enum i UUID. Domyślnie te konwertery są włączone, ale możesz je wyłączyć na określonym zakresie lub w całej bazie danych. Szczegółowe informacje znajdziesz w dokumentacji TypeConverters. (36ae9e, b/195413406)
Obsługa par klucz-wartość niepochodzących od POJO w przypadku typów zwrotów obejmujących wiele map w DAO za pomocą adnotacji
@MapInfo
. (I4d704)
Wartość @MapInfo
będzie wymagana, gdy klucz lub kolumna wartości na mapie zawiera jedną kolumnę. Zobacz przykład:
@MapInfo(valueColumn = "songCount")
@Query("""
SELECT *, COUNT(mSongId) as songCount
FROM Artist JOIN Song ON Artist.artistName = Song.artist
GROUP BY artistName
""")
fun getArtistAndSongCounts(): Map<Artist, Integer>
- Jeśli używasz strony Paging3 z pomieszczeniem, ustaw
room-paging
jako wymagany artefakt. (Ieaffe)
Poprawki błędów
- Rozwiązano problem, który powodował, że wyniki zapytań z wieloma mapami nie były poprawnie uporządkowane, gdy zapytanie zawierało klauzulę ORDER BY kolumny z klucza mapy. (I6b887)
Wkład z zewnątrz
- Dodano nowy interfejs API do określania kolejności indeksu w indeksie @Index. Dziękujemy Nikity Zhelonkin. (I033fc)
Wersja 2.4.0-alfa04
21 lipca 2021 r.
Aplikacja androidx.room:room-*:2.4.0-alpha04
została zwolniona. Wersja 2.4.0-alpha04 zawiera te zatwierdzenia.
Nowe funkcje
Room obsługuje teraz metody zwracania wielu typów map
@Dao
, co jest przydatne w przypadku instrukcji JOIN. Obsługiwane typy map multi toMap
orazImmutableMap
,ImmutableSetMultimap
iImmutableListMultimap
Guawy.Oto przykłady zapytań z wieloma mapami:
Mapa relacji jeden do jednego
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
Mapa relacji jeden do wielu (standardowa mapa wielu map)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
Wynik z wieloma mapami może być też podany w obsługiwanych asynchronicznych typach zwracanych typów, takich jak
LiveData
,Observable
Rx lubFlow
.
Podział na pokoje
Udostępniamy
androidx.room:room-paging
, która zapewnia natywną obsługę Stron 3.0 w przypadku zapytań dotyczących sal zwracających wartośćandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
Ten artefakt zastępuje implementację
androidx.paging.PagingSource
wygenerowaną przez Room usługą utworzoną na podstawie interfejsów API Paging 3.0. Nowa implementacja PagingSource analizuje klucze w inny sposób, dlatego każdy klucz przesłany ręcznie do klasy PagingSource w salach musi uwzględniać tę zmianę działania, w tym klucz startowy przekazany przez konstruktor Pager. Zaczniemy ładować strony zKey
, gdzieKey
będzie pierwszym wczytywanym elementem. Odbiega to od obecnego działania, w którym elementLoadParams.Refresh.Key
jest traktowany jako pozycja przewijania, a elementy są ładowane zarówno przed kluczem, jak i po nim.Artefakt jest opcjonalny, a rezygnacja spowoduje przywrócenie dotychczasowej obsługi strony 3.0, która została wprowadzona w pokoju 2.3. W przyszłości ten artefakt nie będzie jednak opcjonalny dla użytkowników korzystających z funkcji Room z Pagingiem 3.0. Aby wyrazić zgodę, dodaj do ścieżki zajęć nowy artefakt stronicowania pokoi. Jeśli używasz Gradle, możesz dodać do pliku build.gradle ten fragment kodu:
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Poprawki błędów
- Naprawiono problem z automatyczną migracją związany z naruszeniem zasad dotyczących kluczy obcych. (b/190113935)
Wersja 2.4.0-alfa03
16 czerwca 2021 r.
Aplikacja androidx.room:room-*:2.4.0-alpha03
została zwolniona. Wersja 2.4.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Zaktualizuj
MigrationTestHelper
sali, aby umożliwić obsługę automatycznych migracji, udostępniając nowy interfejs API konstruktora, który otrzymuje testowaną klasę bazy danych. Dzięki temu pomocnik może automatycznie dodać migracje automatyczne w ten sam sposób podczasrunMigrationsAndValidate
.
Poprawki błędów
Naprawiono problem z natywną biblioteką SQLite w pokoju, aby obsługiwać elementy M1 firmy Apple. (b/174695268
Naprawiono błąd, który powodował, że funkcja Room nie zwracała błędów, gdy zwracaną funkcją @Transaction była aktywność (I56ddd, b/190075899).
Naprawiono problem z indeksami podczas automatycznej migracji. b/177673291
Aktualizacje zależności
- Obsługa KSP w sali zależy teraz od KSP
1.5.10-1.0.0-beta01
. (1ecb11, b/160322705)
Wersja 2.4.0-alfa02
5 maja 2021 roku
Aplikacja androidx.room:room-*:2.4.0-alpha02
została zwolniona. Wersja 2.4.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
@ProvidedAutoMigrationSpec
to nowy interfejs API służący do deklarowania, żeAutoMigrationSpec
będzie udostępniany w czasie działania przezRoomDatabase.Builder#addAutoMigrationSpec()
. Dzięki temu platforma wstrzykiwania zależności może udostępniać te specyfikacje, gdy potrzebne są złożone zależności.
Poprawki błędów
- Napraw błąd związany z automatyczną migracją, która powoduje, że migracja
@DatabaseView
nie jest prawidłowo odtwarzana.
Wkład z zewnątrz
- Napraw błąd w funkcji
JournalMode.TRUNCATE
sali, w wyniku którego wywołanie zwrotneInvalidationTracker
było czasami wywoływane nieprawidłowo, za późno lub w ogóle nie. Dziękujemy:Uli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
Wersja 2.4.0-alfa01
21 kwietnia 2021 r.
Aplikacja androidx.room:room-*:2.4.0-alpha01
została zwolniona. Wersja 2.4.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Automatyczne migracje: sala udostępnia teraz interfejs API do automatycznego generowania migracji, o ile są eksportowane schematy. Aby poinformować usługę, że sala powinna wygenerować automatyczną migrację, można zadeklarować wersje, z których i do których chcesz przenieść nową usługę
@Database#autoMigrations
. Gdy sala potrzebuje dodatkowych informacji o zmianach nazw lub usunięcia tabel i kolumn, adnotacja@AutoMigration
może zadeklarować klasę specyfikacji zawierającą takie dane wejściowe. Więcej informacji znajdziesz w dokumentacji@AutoMigration
.
Poprawki błędów
- Napraw błąd polegający na tym, że element
defaultValue
z dodatkowym nawiasem był nieprawidłowo weryfikowany podczas weryfikacji schematu pokoju. b/182284899
Wersja 2.3.0
Wersja 2.3.0
21 kwietnia 2021 r.
Aplikacja androidx.room:room-*:2.3.0
została zwolniona. Wersja 2.3.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.2.0
- Wbudowana obsługa Enum: pokój będzie teraz domyślnie używać konwertera Enum na ciąg znaków i odwrotnie, jeśli nie zostanie podany żaden typ przelicznika. Jeśli istnieje już konwerter typów dla wyliczenia, funkcja Room ma priorytet, aby użyć jej zamiast domyślnej listy.
- Wywołanie zwrotne zapytania: funkcja Room Database udostępnia teraz ogólny interfejs API wywołania zwrotnego RoomDatabase.QueryCallback, który jest używany, gdy zapytania mają być wykonywane, co może być przydatne przy logowaniu się w kompilacjach debugowania. Wywołanie zwrotne można ustawić w systemie
RoomDatabase.Builder#setQueryCallback()
. - Ulepszenia w wersji wstępnej: Room ma teraz interfejsy API do tworzenia bazy danych, która korzysta ze wstępnie spakowanej bazy danych odczytywanej ze strumienia wejściowego. Pozwala to na przykład w sytuacji, gdy baza danych przed pakietem jest skompresowana gzip.
- Użytkownicy dokonujący konwersji typu: pokój ma teraz interfejsy API umożliwiające udostępnianie wystąpień konwerterów typów, dzięki którym aplikacja może kontrolować swoje inicjowanie. Aby oznaczyć konwerter typów, który zostanie udostępniony do obsługi sali, użyj nowej adnotacji @ProvidedTypeConverter.
- Obsługa RxJava3: pokój obsługuje teraz typy RxJava3. Podobnie jak w przypadku RxJava2, można zadeklarować metody DAO, których typ zwrotu to Flowable, Single, Maybe i Completable. Dostępny jest też nowy artefakt
androidx.room:room-rxjava3
do obsługi RxJava3. - Obsługa etapu 3.0: pokój będzie teraz obsługiwać generowanie implementacji metod z adnotacjami
@Query
, których typ zwrotu toandroidx.paging.PagingSource
.
Wersja 2.3.0-rc01
24 marca 2021 r.
Aplikacja androidx.room:room-*:2.3.0-rc01
została zwolniona. Wersja 2.3.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono problem, który uniemożliwiał wykorzystanie zapytań w przepływie koronacji utworzonych przez salę w bloku z zawieszonym blokiem
withTransaction
. (I797bf)
Wersja 2.3.0-beta03
10 marca 2021 r.
Aplikacja androidx.room:room-*:2.3.0-beta03
została zwolniona. Wersja 2.3.0-beta03 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano przyrostową kompilację w przypadku KSP. (I031c1, b/176453350)
Poprawki błędów
- Naprawiono błąd, który powodował, że utworzenie PagingSource w wątku głównym mogło aktywować błąd ANR. (I42b74, b/181221318)
- Poprawiono widoczność pakietu
@ExperimentalRoomApi
na publiczny, a nie prywatny. (b/181356119)
Wkład z zewnątrz
- Zezwalaj na akceptowanie przez pokój typu zwracania POJO w metodzie DAO z adnotacjami
@Query
, gdy jest ona również oznaczona adnotacją@SkipQueryVerification
. Pokój podejmie starania, aby wynik zapytania został przekonwertowany na zwracany typ POJO w taki sam sposób jak w przypadku metody DAO z adnotacjami@RawQuery
. Dziękujemy: „Markus Riegel | hey@marcorei.com”. (I45acb)
Wersja 2.3.0-beta02
18 lutego 2021 r.
Aplikacja androidx.room:room-*:2.3.0-beta02
została zwolniona. Wersja 2.3.0-beta02 zawiera te zatwierdzenia.
Nowe funkcje
Sala ma teraz eksperymentalną obsługę KSP przetwarzania symboli Kotlin.
KSP zastępuje procesory adnotacji natywnie uruchamiające procesory adnotacji w kompilatorze Kotlin, co znacznie skraca czas kompilacji.
Aby używać narzędzia Room z KSP, możesz zastosować wtyczkę KSP Gradle i zastąpić konfigurację
kapt
w pliku kompilacji ciągiemksp
. Na przykład zamiastkapt 'androidx.room:room-compiler:2.3.0-beta02'
użyjksp 'androidx.room:room-compiler:2.3.0-beta02'
. Więcej informacji znajdziesz w dokumentacji KSP.Uwaga: ponieważ KSP ma charakter eksperymentalny, zalecamy dalsze używanie KAPT w kodzie produkcyjnym. Skrócenie czasu kompilacji jest dostępne tylko wtedy, gdy nie ma innych procesorów, które korzystają z KAPT. Informacje o znanych problemach znajdziesz w artykule b/160322705.
Wersja 2.3.0-beta01
27 stycznia 2021 r.
Aplikacja androidx.room:room-*:2.3.0-beta01
została zwolniona. Wersja 2.3.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- Automatycznie zamykane bazy danych: sala ma teraz możliwość zamykania baz danych, które nie są używane po upływie określonego czasu. To jest funkcja eksperymentalna, którą można włączyć, wywołując
RoomDatabase.Builder#setAutoCloseTimeout()
. Ta funkcja jest przydatna w przypadku aplikacji z wieloma bazami danych.
Poprawki błędów
- Naprawiono błąd, który powodował, że metody Dao z wieloma metodami
@Update
lub@Delete
z różnymi strategiami konfliktu generowały kod tylko z jedną ze strategii, skutecznie ignorując zdefiniowaną strategię. (/I0b90d, b/176138543)
Wersja 2.3.0-alfa04
16 grudnia 2020 roku
Aplikacja androidx.room:room-*:2.3.0-alpha04
została zwolniona. Wersja 2.3.0-alpha04 zawiera te zatwierdzenia.
Nowe funkcje
- Usługa Room udostępnia teraz ogólny interfejs API do wywołań zwrotnych
RoomDatabase.QueryCallback
, przydatny w przypadku zapytań, które mają być wykonywane, co może być przydatne przy logowaniu się w kompilacjach do debugowania. Wywołanie zwrotne można ustawić w systemieRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - Jeśli nie podasz żadnej wartości, sala będzie teraz domyślnie używać konwertera typu Enum na ciąg znaków i odwrotnie. Jeśli istnieje już konwerter typów dla wyliczenia, funkcja Room ma priorytet, aby użyć jej zamiast domyślnej listy. (b/73132006)
Znany problem
- Jeśli dla wartości Enum istnieje już konwerter jednokierunkowy do odczytu, sala może przypadkowo użyć wbudowanego konwertera String na Enum, co może być niepożądane. Jest to znany problem, który można rozwiązać, przełączając konwerter dwukierunkowy. Zobacz: b/175707691
Poprawki błędów
- Naprawiono błąd polegający na tym, że w nowszych wersjach JDK funkcja sali była błędnie wyłączana przyrostowe przetwarzanie adnotacji. (b/171387388)
- Rozwiązaliśmy problem z znajdowaniem wygenerowanych zajęć w przypadku korzystania z wielu modułów ładowania zajęć. Dziękujemy za poprawienie błędu „Serendipity | 892449346@qq.com” (b/170141113).
- Naprawiono błąd, który powodował, że funkcja Room generowała nieprawidłowy kod, gdy zasób Kotlin
@Dao
miał klasę bazową zawierającą elementy ogólne w JVM. (b/160258066)
Wkład z zewnątrz
- Jeśli tryb WAL jest włączony, a interfejs API ma wartość 16 lub więcej, będzie teraz domyślnie używać
beginTransactionNonExclusive
. Dzięki utwórowi „Ahmed I. Khalil | ahmedibrahimkhali@gmail.com” (b/126258791)
Wersja 2.3.0-alfa03
14 października 2020 r.
Aplikacja androidx.room:room-*:2.3.0-alpha03
została zwolniona. Wersja 2.3.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
Sala ma teraz interfejsy API umożliwiające stosowanie instancji konwerterów typów, aby aplikacja mogła kontrolować ich inicjowanie. Aby oznaczyć konwerter typu przekazywany do sali konferencyjnej, użyj nowej adnotacji
@ProvidedTypeConverter
. Dziękuję za adres „mzgreen yairobbe@gmail.com”. (Ie4fa5, b/121067210)Room ma teraz interfejsy API umożliwiające tworzenie bazy danych przy użyciu gotowej bazy danych odczytywanej ze strumienia wejściowego. Pozwala to na przykład w sytuacji, gdy baza danych przed pakietem jest skompresowana gzip. Dziękujemy adresowi „Ahmed El-Helw ahmedre@gmail.com” (3e6792, b/146911060)
Zmiany w interfejsie API
Dodano brakujący element docelowy do adnotacji
@ForeignKey
, co uniemożliwia jej użycie poza adnotacją@Entity
. (Iced1e)Pole
mCallbacks
w regionieRoomDatabase.java
jest teraz ukryte. (D576cb, b/76109329)
Poprawki błędów
Zaktualizuj dokumentację TypeConverters, aby wyjaśnić, że typ konwersji można używać tylko do konwertowania kolumn i pól, a nie wierszy. (I07c56, b/77307836)
Aktualizacja aplikacji DaoProcessor w celu naprawienia błędu kompilatora w Dao za pomocą ogólnego typu supermodelu z „podstawami” Kotlin. (Ice6bb, b/160258066)
Zaktualizuj dokumentację metod dodawania i usuwania obserwatorów w celu wyjaśnienia wątków (Ifd1d9, b/153948821)
Naprawiono problem z nieprawidłową weryfikacją tabel FTS, które zadeklarowały kolumnę z wierszami zawierającymi informacje o salach. (d62ebc, b/145858914)
Treści opublikowane przez użytkowników z zewnątrz
Napraw problemy z językiem tureckim (5746e3) i b/68159494
Aby uniknąć problemów w Androidzie Lollipop, zastąp
ConcurrentHashMap
wRoomDatabase
elementemCollections.synchronizedMap()
(d1cfc7, b/162431855)Dodaj wywołanie zwrotne onOpenPrepackagedDatabase w przypadku kopiowania gotowej bazy danych. (I1ba74, b/148934423)
Wersja 2.3.0-alfa02
22 lipca 2020 r.
Aplikacja androidx.room:room-*:2.3.0-alpha02
została zwolniona. Wersja 2.3.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Obsługa RxJava3: pokój obsługuje teraz typy RxJava3. Podobnie jak w przypadku RxJava2, można zadeklarować metody DAO, których typ zwrotu to Flowable, Single, Maybe i Completable. Dostępny jest też nowy artefakt
androidx.room:room-rxjava3
do obsługi RxJava3. (b/152427884)
Zmiany w interfejsie API
- Zadeklarowanie
@TypeConverter
w klasie obiektu Kotlin jest teraz obsługiwane. (b/151110764) - Opcja przyrostowego przetwarzania adnotacji sali jest teraz domyślnie WŁĄCZONA. (b/112110217)
Wersja 2.3.0-alfa01
10 czerwca 2020 r.
Aplikacja androidx.room:room-*:2.3.0-alpha01
została zwolniona. Wersja 2.3.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
Obsługa etapu 3.0: sala będzie teraz obsługiwać generowanie implementacji dla
@Query
z adnotacjami, których typ zwrotu toandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Zmiany w interfejsie API
@RewriteQueriesToDropUnusedColumns
to nowa, wygodna adnotacja, która umożliwia modyfikowanie odwzorowania „*” w zapytaniu przez funkcję Room, dzięki czemu nieużywane kolumny z wyniku są usuwane.- Opcja procesora
room.expandProjection
została wycofana. Używaj usługi@RewriteQueriesToDropUnusedColumns
jako zamiennika zapytań optymalizujących sale za pomocą przewidywania gwiazdek. Pamiętaj, że funkcja@RewriteQueriesToDropUnusedColumns
nie zastępuje oferowanego rozwiązania konfliktu kolumnroom.expandProjection
w przypadku typów zwracanych, które zawierały pola@Embedded
.
Poprawki błędów
- Naprawiono błąd, który powodował, że funkcja Room nie wykrywała prawidłowo wersji JDK używanej do włączenia przyrostowego procesora adnotacji. Dzięki Blaz Solar (ja@blaz.solar) (b/155215201)
- Funkcja Room zawiera teraz zależność ANTLR z procesorem adnotacji, aby uniknąć konfliktów wersji z innymi procesorami, które również używają ANTLR. (b/150106190)
Wersja 2.2.6
Wersja 2.2.6
16 grudnia 2020 roku
Aplikacja androidx.room:room-*:2.2.6
została zwolniona. Wersja 2.2.6 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd polegający na tym, że w nowszych wersjach JDK funkcja sali była błędnie wyłączana przyrostowe przetwarzanie adnotacji. (b/171387388)
Wersja 2.2.5
Wersja 2.2.5
18 marca 2020 r.
Aplikacja androidx.room:room-*:2.2.5
została zwolniona. Wersja 2.2.5 zawiera te zatwierdzenia.
Poprawki błędów
- Zmień ustawienia
MultiInstanceInvalidationService
w directBootAware. Dzięki adresowi „Mygod contact-git@mygod.be” (b/148240967) - Naprawiono błąd, który powodował awarię po włączeniu unieważniania wielu instancji, gdy baza danych zawierała element FTS. (b/148969394)
- Rozwiązaliśmy problem, który występował podczas wczytywania bibliotek natywnych SQLite w procesorze adnotacji Room, który powodował awarię kompilatora w wyniku kompilacji równoległych. (b/146217083)
Wersja 2.2.4
Wersja 2.2.4
19 lutego 2020 r.
Opublikowano androidx.room:room-common:2.2.4
, androidx.room:room-compiler:2.2.4
, androidx.room:room-guava:2.2.4
, androidx.room:room-ktx:2.2.4
, androidx.room:room-migration:2.2.4
, androidx.room:room-runtime:2.2.4
, androidx.room:room-rxjava2:2.2.4
i androidx.room:room-testing:2.2.4
. Wersja 2.2.4 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono problem z zawieszaniem transakcji, w wyniku którego dochodziło do zakleszczenia, jeśli współprogram został anulowany szybko przed rozpoczęciem transakcji. (b/148181325)
- Naprawiono problem z nieprawidłowym użyciem @Generated podczas tworzenia za pomocą pakietu JDK 9. (b/146538330)
- Naprawiono błąd, który powodował, że funkcja Room generowała nieprawidłowy kod, gdy interfejs DAO w Kotlin miał konkretną funkcję. (b/146825845)
Wersja 2.2.3
Wersja 2.2.3
18 grudnia 2019 r.
Aplikacja androidx.room:room-*:2.2.3
została zwolniona. Wersja 2.2.3 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd polegający na tym, że funkcja Room nie sprawdzała bazy danych, która nie została poddana żadnej migracji i zawierała starszy hasz z indeksami w schemacie. (b/139306173)
Wersja 2.2.2
Wersja 2.2.2
20 listopada 2019 r.
Aplikacja androidx.room:room-*:2.2.2
została zwolniona. Wersja 2.2.2 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd, który powodował, że zebranie relacji jeden do jednego z ponad 999 wierszami powodowało zwracanie powiązanych elementów Room o wartości null. (b/143105450)
Wersja 2.2.1
Wersja 2.2.1
23 października 2019 r.
Aplikacja androidx.room:room-*:2.2.1
została zwolniona. Wersja 2.2.1 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd, który powodował, że pokój błędnie ostrzegał przed sytuacją
CURSOR_MISMATCH
przy włączonej opcji kompilatoraexpandProjection
. (b/140759491) - Dodaliśmy mechanizm ponawiania służący do obsługi brakującej biblioteki natywnej używanej do weryfikowania zapytań podczas kompilacji.
Wersja 2.2.0
Wersja 2.2.0
9 października 2019 r.
Aplikacja androidx.room:room-*:2.2.0
została zwolniona. Wersja 2.2.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.1.0
- Wstępnie spakowana baza danych: w
RoomDatabase.Builder
dostępne są teraz 2 nowe interfejsy API do tworzenia komponentówRoomDatabase
na podstawie już wypełnionego pliku bazy danych.createFromAsset()
oznacza, że wstępnie wypełniony plik bazy danych znajduje się w folderze zasobów pliku APK, acreateFromFile()
– gdy plik znajduje się w dowolnej lokalizacji. Wykorzystanie tych interfejsów API zmienia zachowanie niszczycielskich migracji w taki sposób, że podczas migracji zastępczej usługa Room spróbuje ponownie skopiować wstępnie wypełnioną bazę danych, jeśli jest to możliwe. W przeciwnym razie po prostu usunie i ponownie utworzy wszystkie tabele. b/62185732 - Domyślne wartości schematu:
@ColumnInfo
ma teraz nową właściwośćdefaultValue
, której można użyć do określenia domyślnej wartości kolumny. Wartości domyślne są częścią schematu bazy danych i zostaną zweryfikowane podczas migracji, jeśli zostaną określone. b/64088772 - Relacje wiele do wielu:
@Relation
ma teraz nową właściwośćassociateBy
, która przyjmuje nową adnotację@Junction
, używaną do zadeklarowania relacji, która musi zostać spełniona za pomocą tabeli połączeń (zwanej też tabelą złączenia). b/69201917 - Relacje jeden do jednego: ograniczenie w polach POJO z adnotacjami
@Relation
, które są typuList
lubSet
, zostało zniesione, co umożliwia prezentowanie relacji jednowartościowych. b/62905145 - Jednostka docelowa: adnotacje DAO
@Insert
,@Update
i@Delete
mają teraz nową właściwośćtargetEntity
, która umożliwia określenie tabeli docelowej, na której ma działać metoda DAI. Dzięki temu parametry tych metod DAO mogą być dowolnymi POJO, które będą interpretowane jako elementy częściowe. W praktyce umożliwia to częściowe wstawianie, usuwanie i aktualizowanie. b/127549506 - Przepływ kalorii: metody DAO (
@Query
) mogą teraz być zwracanymi typemFlow<T>
. Zwrócony przepływ ponownie wygeneruje nowy zestaw wartości, jeśli tabele obserwacji w zapytaniu zostaną unieważnione. Zadeklarowanie funkcji DAO ze zwracanym typemChannel<T>
jest błędem. Zamiast tego zalecamy użycie funkcjiFlow
, a następnie użycie funkcji sąsiadujących do przekonwertowania funkcjiFlow
na typChannel
. b/130428884 - Procesor przyrostowych adnotacji Gradle: sala jest teraz procesorem adnotacji izolującym adnotacje Gradle. Możliwość przyrostu wartości można włączyć za pomocą opcji procesora
room.incremental
. Więcej informacji znajdziesz w sekcji poświęconej opcjom kompilatora pokoi. Jeśli napotkasz jakieś problemy, zgłoś błąd tutaj. Planujemy domyślnie włączyć możliwość przyrostu w przyszłości w wersji stabilnej. b/112110217 - Rozwijanie prognoz: dodaliśmy nową, eksperymentalną opcję kompilatora
room.expandProjection
, która powoduje, że funkcja Room przeredaguje zapytanie z odwzorowaniem gwiazdy tak, aby zawierała tylko kolumny zwróconego typu POJO. Przykład dla metody DAO z@Query("SELECT * FROM Song")
, która zwraca POJO o nazwieSongIdAndTitle
z tylko 2 polami. Następnie funkcja Room zmieni zapytanie w tabeliSELECT id, title FROM Song
w taki sposób, by pobrać minimalny zestaw kolumn wymaganych do zwracanego typu danych. Eliminuje to ostrzeżenieCURSOR_MISMATCH
, które pojawia się, gdy zapytanie zwraca dodatkowe kolumny, które nie pasują do żadnego pola w zwracanym typie POJO.
Wersja 2.2.0-rc01
5 września 2019 r.
Aplikacja androidx.room:room:2.2.0-rc01
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Brak zmian publicznych od pokoju 2.2.0-beta01
.
Wersja 2.2.0-beta01
22 sierpnia 2019 r.
Aplikacja androidx.room:room-*:2.2.0-beta01
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Naprawiono błąd, który powodował, że zapytanie Coroutine Flow przestało przesyłać nowe wartości po pewnym czasie. (b/139175786)
- Naprawiliśmy błąd polegający na tym, że funkcja Room nie akceptowała kodu skrótu schematu podczas otwierania bazy danych, w której nie nastąpiła migracja od sali 1.0, co powodowało awarię środowiska wykonawczego z powodu nieprawidłowego schematu. (b/139306173)
Wersja 2.2.0-alfa02
7 sierpnia 2019 r.
Aplikacja androidx.room:room-*:2.2.0-alpha02
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Przepływ kalorii: metody DAO (
@Query
) mogą teraz być zwracanymi typemFlow<T>
. Zwrócony przepływ ponownie wygeneruje nowy zestaw wartości, jeśli tabele obserwacji w zapytaniu zostaną unieważnione. Zadeklarowanie funkcji DAO ze zwracanym typemChannel<T>
jest błędem. Zamiast tego zalecamy użycie funkcjiFlow
, a następnie użycie funkcji sąsiadujących do przekonwertowania funkcjiFlow
na typChannel
. b/130428884 - Rozwijanie prognoz: dodaliśmy nową, eksperymentalną opcję kompilatora
room.expandProjection
, która powoduje, że funkcja Room przeredaguje zapytanie z odwzorowaniem gwiazdy tak, aby zawierała tylko kolumny zwróconego typu POJO. Przykład dla metody DAO z@Query("SELECT * FROM Song")
, która zwraca POJO o nazwieSongIdAndTitle
z tylko 2 polami. Następnie funkcja Room zmieni zapytanie w tabeliSELECT id, title FROM Song
w taki sposób, by pobrać minimalny zestaw kolumn wymaganych do zwracanego typu danych. Eliminuje to ostrzeżenieCURSOR_MISMATCH
, które pojawia się, gdy zapytanie zwraca dodatkowe kolumny, które nie pasują do żadnego pola w zwracanym typie POJO. onDestructiveMigrate
to nowy interfejs API wywołania zwrotnego dodany doRoomDatabase.Callback
na potrzeby niszczycielskiej migracji bazy danych przez funkcję Room. b/79962330
Poprawki błędów
- Naprawiono błąd, który powodował, że usługa Room generowała nieprawidłowy kod przy użyciu metody ustawiania pól, gdy pole jest chronione. b/136194628
- Naprawiono błąd, który powodował, że element BillingationTracker zgłaszał NPE w drugim procesie po włączeniu unieważnienia wielu instancji i zatrzymaniu usługi unieważniania. b/137454915
- Naprawiono błąd, który powodował, że funkcja Room nie mogła prawidłowo identyfikować zwracanego typu zwracanych funkcji zawieszania z adnotacją
@RawQuery
. b/137878827 - Zaktualizowano wygenerowany kod dla funkcji
@Relation
, gdy powiązany klucz jest typu BLOB, aby użyć porównywalnej funkcjiByteBuffer
. b/137881998 - Naprawiono błąd, który powodował, że funkcja Room zgłaszała brak elementów wprowadzających w POJO jako parametrów encji
@Insert
,@Update
i@Delete
. b/138664463 - Naprawiliśmy błąd polegający na tym, że funkcja Room zgłaszała brak metod pobierania i seterów w ignorowanej kolumnie przez
@Entity
, gdy klasa encji była używana w niektórych metodach DAO. b/138238182 - Naprawiliśmy błąd polegający na tym, że funkcja Room nie konwertowała nazwanych argumentów wiązania na argumenty pozycjonujące, co powodowało wystąpienie wyjątku w środowisku wykonawczym w przypadku wykonywania zapytania z ponownie użytymi parametrami. b/137254857
Wersja 2.2.0-alfa01
10 lipca 2019 r.
Nowe funkcje
- Wstępnie spakowana baza danych: w
RoomDatabase.Builder
dostępne są teraz 2 nowe interfejsy API do tworzenia komponentówRoomDatabase
na podstawie już wypełnionego pliku bazy danych.createFromAsset()
oznacza, że wstępnie wypełniony plik bazy danych znajduje się w folderze zasobów pliku APK, acreateFromFile()
– gdy plik znajduje się w dowolnej lokalizacji. Wykorzystanie tych interfejsów API zmienia zachowanie niszczycielskich migracji w taki sposób, że podczas migracji zastępczej usługa Room spróbuje ponownie skopiować wstępnie wypełnioną bazę danych, jeśli jest to możliwe. W przeciwnym razie po prostu usunie i ponownie utworzy wszystkie tabele. b/62185732 - Domyślne wartości schematu:
@ColumnInfo
ma teraz nową właściwośćdefaultValue
, której można użyć do określenia domyślnej wartości kolumny. Wartości domyślne są częścią schematu bazy danych i zostaną zweryfikowane podczas migracji, jeśli zostaną określone. b/64088772Uwaga: jeśli schemat bazy danych zawiera już wartości domyślne, takie jak te dodane za pomocą
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, i decydujesz się zdefiniować wartości domyślne za pomocą parametru@ColumnInfo
dla tych samych kolumn, może być konieczne przeprowadzenie migracji, aby zweryfikować nieuwzględnione wartości domyślne. Więcej informacji znajdziesz w artykule na temat migracji sal. - Relacje wiele do wielu:
@Relation
ma teraz nową właściwośćassociateBy
, która przyjmuje nową adnotację@Junction
, używaną do zadeklarowania relacji, która musi zostać spełniona za pomocą tabeli połączeń (zwanej też tabelą złączenia). b/69201917 - Relacje jeden do jednego: ograniczenie w polach POJO z adnotacjami
@Relation
, które są typuList
lubSet
, zostało zniesione, co umożliwia prezentowanie relacji jednowartościowych. b/62905145 - Jednostka docelowa: adnotacje DAO
@Insert
,@Update
i@Delete
mają teraz nową właściwośćtargetEntity
, która umożliwia określenie tabeli docelowej, na której ma działać metoda DAI. Dzięki temu parametry tych metod DAO mogą być dowolnymi POJO, które będą interpretowane jako elementy częściowe. W praktyce umożliwia to częściowe wstawianie, usuwanie i aktualizowanie. b/127549506 - Procesor przyrostowych adnotacji Gradle: sala jest teraz procesorem adnotacji izolującym adnotacje Gradle. Możliwość przyrostu wartości można włączyć za pomocą opcji procesora
room.incremental
. Więcej informacji znajdziesz w sekcji poświęconej opcjom kompilatora pokoi. Jeśli napotkasz jakieś problemy, zgłoś błąd tutaj. Planujemy domyślnie włączyć możliwość przyrostu w przyszłości w wersji stabilnej. b/112110217
Poprawki błędów
- Pokój nie będzie już przekazywać funkcji
EmptySetResultException
do globalnego modułu obsługi błędów po usunięciu strumienia Rx zapytania przed zakończeniem zapytania. b/130257475 - Naprawiono błąd, który powodował, że funkcja Room wyświetlała nieprawidłowy komunikat o błędzie, gdy funkcja zawieszania DAO z adnotacją
@RawQuery
nie miała typu zwracanego kodu. b/134303897 - Sala nie będzie już generować adapterów DAO z nieprzetworzonymi typami. b/135747255
Wersja 2.1.0
Wersja 2.1.0
13 czerwca 2019 r.
Sala 2.1.0 została zwolniona bez zmian z 2.1.0-rc01
. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Ważne zmiany od wersji 2.0.0
- FTS: sala obsługuje teraz elementy z tabelą mapowania FTS3 lub FTS4. Do klas z adnotacjami
@Entity
można teraz dodać adnotacje@Fts3
lub@Fts4
, aby zadeklarować klasę za pomocą pełnotekstowej tabeli wyszukiwania mapowania. Opcje FTS umożliwiające dalsze dostosowanie są dostępne w ramach metod adnotacji. - Widoki: pokój umożliwia teraz deklarowanie klasy jako zapisanego zapytania (nazywanego też widokiem danych) przy użyciu adnotacji
@DatabaseView
. - Kursy: metody DAO można teraz zawieszać funkcje. Aby korzystać z tej funkcji, uwzględnij w zależności
room-ktx
. Artefakt ktx udostępnia też funkcję rozszerzeniaRoomDatabase.withTransaction
do wykonywania transakcji w bazie danych w ramach współużytkowania. - Wartość automatyczna: pokój umożliwia teraz deklarowanie klas z adnotacjami AutoValue jako encji i ważnych miejsc. Adnotacje dotyczące sal
@PrimaryKey
,@ColumnInfo
,@Embedded
i@Relation
można teraz zadeklarować w metodach abstrakcyjnych klasy z adnotacjami automatycznymi. Pamiętaj, że aby można było prawidłowo je odczytać, adnotacji musi towarzyszyć im też@CopyAnnotations
. - Dodatkowa obsługa asynchroniczna: metody DAO z adnotacjami
@Insert
,@Delete
lub@Update
oraz@Query
zawierające instrukcjeINSERT
,DELETE
lubUPDATE
obsługują teraz typy zwrotów RxCompletable
,Single
iMaybe
oraz typ zwrotu GuawyListenableFuture
. Metody te mogą też być zawieszane. enableMultiInstanceInvalidation
to nowy interfejs API wRoomDatabase.Builder
, który umożliwia unieważnianie wielu instancji RoomDatabase przy użyciu tego samego pliku bazy danych.fallbackToDestructiveMigrationOnDowngrade
to nowy interfejs API wRoomDatabase.Builder
, który automatycznie odtwarza bazę danych w przypadku przejścia na niższą wersję.ignoredColumns
to nowy interfejs API w adnotacji@Entity
, który umożliwia wyświetlanie ignorowanych pól według nazwy.- Sala będzie teraz prawidłowo używać głównego konstruktora Kotlina w klasach danych, dzięki czemu nie trzeba będzie zadeklarować właściwości jako
vars
.
Wersja 2.1.0-rc01
29 maja 2019 r.
Poprawki błędów
- Naprawiliśmy błąd inicjowania sali, który mógł występować w wyniku już skonfigurowanej konfiguracji temp_store. b/132602198
- Naprawiliśmy ostrzeżenie o wykorzystaniu cudzysłowu w przypadku użytkowników korzystających z SQLite w wersji 3.27.0 lub nowszej. b/131712640
- Naprawiliśmy błąd, który powodował awarię modułu DeleteationTracker w sytuacji, gdy równolegle odbywało się wielokrotne sprawdzanie unieważnienia. b/133457594
Wersja 2.1.0-beta01
7 maja 2019 r.
Wersja androidx.room 2.1.0-beta01
została opublikowana bez zmian w wersjach 2.1.0–alfa07. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Wersja 2.1.0-alfa07
25 kwietnia 2019 r.
Zmiany w interfejsie API lub zachowaniu
- Funkcja rozszerzenia
RoomDatabase.withTransaction
została zmieniona tak, aby nie przyjmowała już bloków funkcyjnych z odbiornikiemCoroutineScope
. Zapobiega to pomijaniu dodatkowego koducoroutineScope { }
wymaganego do jednoczesnego uruchamiania elementów w bloku transakcji.
Poprawki błędów
- Naprawiono błąd, który powodował, że funkcja Room nie mogła dopasować elementu TypeConverter dla funkcji DAO Kotlin zawierającej parametr typu kolekcji. b/122066791
Wersja 2.1.0-alfa06
22 marca 2019 r.
Zmiany w interfejsie API lub zachowaniu
- Zapytania dotyczące transakcji asynchronicznych są teraz serializowane, aby usługa Room nie używała więcej niż 1 wątku do wykonywania transakcji w bazie danych.
Element
RoomDatabase.Builder.setTransactionExecutor(Executor)
został dodany, aby umożliwić skonfigurowanie używania wykonawcy do obsługi transakcji. RoomDatabase.runInTransaction(Callable)
nie będzie już obejmować zaznaczonych wyjątków do wyjątków RuntimeExceptions. b/128623748
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że moduł do śledzenia unieważnień zatrzymywał obserwację tabeli treści po dodaniu obserwatorów zarówno do tabeli treści, jak i zewnętrznej tabeli FTS. b/128508917
- Zaktualizowaliśmy gramatykę SQLite pokoju, aby pasowała do SQLite 3.24.0. b/110883668
Wersja 2.1.0-alfa05
13 marca 2019 r.
Nowe funkcje
- Funkcja rozszerzenia
RoomDatabase.withTransaction
umożliwia bezpieczne przeprowadzanie transakcji w bazie danych w ramach współpracy. Funkcje rozszerzeń sal oraz obsługa współprogramów są dostępne w artefakcieroom-ktx
. - Nieabstrakcyjne metody DAO z adnotacjami
@Transaction
mogą być teraz zawieszane funkcji. b/120241587
Zmiany w interfejsie API lub zachowaniu
- Nazwa artefaktu
room-coroutines
została zmieniona naroom-ktx
i ma taką samą nazwę jak inne artefakty Androidax. beginTransaction
,setTransactionSuccessful
iendTransaction
w językuRoomDatabase
zostały wycofane i zastąpione przezrunInTransaction
i funkcję rozszerzeniaroom-ktx
withTransaction
.
Poprawki błędów
- Naprawiono błąd polegający na tym, że argumenty tokenizatora były pomijane, jeśli używany tokenizator był prosty. b/125427014
- Naprawiono błąd, który powodował, że funkcja Room nie mogła prawidłowo identyfikować funkcji zawieszania z parametrami, które są klasą wewnętrzną. b/123767877
- Naprawiliśmy błąd, który powodował, że odroczona metoda DAO
@Query
z instrukcjamiINSERT
,UPDATE
lubDELETE
z niecierpliwością przygotowywała zapytanie w wątku głównym. b/123695593 - Naprawiono różne błędy, które powodowały, że sala generowała nieprawidłowy kod w przypadku niektórych funkcji zawieszania. b/123466702 i b/123457323
- Naprawiono błąd, który powodował, że wycofane metody nie były prawidłowo pomijane w wygenerowanym kodzie. b/117602586
- Zaktualizowano zależność z pomieszczeniami z pakietu androidx.sqlite do wersji 1.0.2, która zawiera poprawki ułatwiające prawidłową obsługę uszkodzonych baz danych. b/124476912
Znane problemy
- Pokój 2.1.0–alfa05 zależy od artefaktu
kotlinx-metadata-jvm
, który nie jest obecnie dostępny w Maven Central (KT-27991). Możesz rozwiązać tę zależność, dodając plikmaven { url "https://kotlin.bintray.com/kotlinx/" }
do repozytoriów projektu.
Wersja 2.1.0-alfa04
25 stycznia 2019 r.
Nowe funkcje
- Metody DAO z adnotacjami
@Query
zawierające instrukcjeINSERT
,UPDATE
lubDELETE
mogą teraz zwracać typy asynchroniczneSingle
,Mayble
,Completable
iListenableFuture
. Mogą też być funkcjami zawieszania. b/120227284
Zmiany w interfejsie API lub zachowaniu
- Jeśli nieabstrakcyjna metoda DAO z adnotacją
@Transaction
zwraca typ asynchroniczny, np.Single
,Mayble
,Completable
,LiveData
lubListenableFuture
, funkcja Room zwraca błąd. Ponieważ transakcje są ograniczone do wątków, obecnie nie można rozpocząć i zakończyć transakcji dotyczącej funkcji, która mogłaby odpowiadać zapytaniom w różnych wątkach. b/120109336 - Funkcje
OnConflictStrategy.FAIL
iOnConflictStrategy.ROLLBACK
mają wartość@Deprecated
, ponieważ nie działają poprawnie z obecnymi powiązaniami SQLite na Androidzie. b/117266738
Poprawki błędów
- Naprawiono błąd, który powodował, że funkcja Room nie używała poprawnie obiektu TypeConverter zwracającego typ, jeśli metoda DAO była funkcją zawieszania. b/122988159
- Naprawiono błąd, który powodował, że funkcja Room nieprawidłowo rozpoznawała dziedziczone funkcje zawieszania jako niezawieszone. b/122902595
- Naprawiono błąd, który powodował, że funkcja Room generowała nieprawidłowy kod, gdy pole
@Embedded
znajdowało się w klasie nadrzędnej i było używane w wielu klasach podrzędnych. b/121099048 - Rozwiązaliśmy problem, który powodował, że baza danych ulegała zakleszczeniu podczas wywoływania funkcji zawieszania DAO między
beginTransaction()
aendTransaction()
. b/120854786
Wersja 2.1.0-alfa03
4 grudnia 2018 r.
Zmiany w interfejsie API
- Funkcja FTS
tokenizer
w@Fts3
/@Fts4
przyjmuje teraz ciąg znaków, a nie Enum. Dzięki temu sala może używać niestandardowych tokenizatorów. Wbudowane tokenizatory są nadal zdefiniowane wFtsOptions
jako stałe w postaci ciągu znaków. b/119234881
Nowe funkcje
- Kursy: metody DAO można teraz zawieszać funkcje. Aby umożliwić obsługę funkcji zawieszania w sali, udostępniliśmy nowy artefakt
room-coroutines
. b/69474692 - Metody DAO z adnotacjami
@Insert
,@Delete
lub@Update
obsługują teraz zwracany typListenableFuture
. b/119418331
Poprawki błędów
- Naprawiono błąd, który powodował, że funkcja Room próbowała nieprawidłowo znaleźć konstruktor z kolumnami we właściwości
ignoredColumns
obiektu@Entity
. b/119830714 - Naprawiliśmy błąd, który powodował, że funkcja Room nie oznaczała parametrów metody DAO jako ostatecznej implementacji. b/118015483
- Naprawiono błąd, który powodował awarię procesora sali podczas zgłaszania błędu w zapytaniu zawierającym symbole specjalne. b/119520136
- Poprawiliśmy błąd, który powodował, że funkcja Room odrzucała inne implementacje
Collection
jako argumenty wyrażeniaIN
. b/119884035 - Naprawiliśmy błąd, który powodował, że funkcja LiveData zwracana z pokoju gromadziła niepotrzebne śmieci, jeśli są obserwowane na zawsze. Nie emitowały już nowych danych. b/74477406
- Zaktualizowano blokadę ekranu urządzenia
RoomDatabase
, aby ograniczyć rywalizację o blokadę. b/117900450
Wersja 2.1.0-alfa02
30 października 2018 r.
Nowe funkcje
- Dodano obsługę odwołania do
@DatabaseView
w@Relation
. b/117680932
Poprawki błędów
- Naprawiliśmy błąd polegający na tym, że pokój przeprowadzał operacje wejścia-wyjścia dysku w wątku głównym w przypadku subskrybowania i usuwania typu zwrotu Rx. b/117201279
- Naprawiono błąd, który powodował, że funkcja Room nie znalazła odpowiedniego konwertera odpowiedniego typu dla pola w klasie encji Kotlin. b/111404868
- Naprawiono błąd, który powodował, że funkcja Room generowała nieprawidłowy kod dla implementacji interfejsu
DAO
z domyślną metodą Kotlin bez argumentów. b/117527454 - Zaktualizowaliśmy parser gramatyki SQLite w pokoju, naprawiając problem z wydajnością, który powodowałby długie czasy kompilacji. b/117401230
Wersja 2.1.0-alfa01
8 października 2018 r.
Nowe funkcje
- FTS: sala obsługuje teraz elementy z tabelą mapowania FTS3 lub FTS4. Do klas z adnotacjami
@Entity
można teraz dodać adnotacje@Fts3
lub@Fts4
, aby zadeklarować klasę z mapowaniem pełnotekstowej tabeli wyszukiwania. Opcje FTS umożliwiające dalsze dostosowanie są dostępne w metodach adnotacji. b/62356416 - Widoki danych: w sali można teraz deklarować klasę jako zapisane zapytanie (nazywane też widokiem danych) z użyciem adnotacji @DatabaseView. b/67033276
- Wartość automatyczna: pokój obsługuje teraz deklarowanie klas z adnotacjami AutoValue jako encji i POJO. Adnotacje dotyczące sal
@PrimaryKey
,@ColumnInfo
,@Embedded
i@Relation
można teraz zadeklarować w metodach abstrakcyjnych klasy z adnotacjami automatycznymi. Pamiętaj, że do tych adnotacji musi towarzyszyć atrybut@CopyAnnotations
, aby można było je poprawnie odczytać. b/62408420 - Dodatkowa obsługa typów zwrotów Rx: metody DAO z adnotacjami
@Insert
,@Delete
lub@Update
obsługują teraz typy zwrotów RxCompletable
,Single<T>
iMaybe<T>
. b/63317956 - Typy stałe z
@Relation
: pola z adnotacjami, które wcześniej@Relation
musiały być konfigurowane, ale teraz mogą być parametrami konstruktora. enableMultiInstanceInvalidation
: to nowy interfejs API wRoomDatabase.Builder
, który umożliwia unieważnianie wielu wystąpień RoomDatabase przy użyciu tego samego pliku bazy danych. Ten mechanizm unieważniania wielu instancji działa również w wielu procesach. b/62334005fallbackToDestructiveMigrationOnDowngrade
: to nowy interfejs API wRoomDatabase.Builder
, który automatycznie odtwarza bazę danych w przypadku przejścia na niższą wersję. b/110416954ignoredColumns
: to nowy interfejs API w adnotacji@Entity
, który może służyć do wyświetlania ignorowanych pól według nazwy. Ta opcja jest przydatna do ignorowania pól dziedziczonych w encji. b/63522075
Zmiany w interfejsie API lub zachowaniu
mCallback
imDatabase
w saliRoomDatabase
to teraz@Deprecated
i zostaną usunięte z następnej głównej wersji pokoju. b/76109329
Poprawki błędów
- Rozwiązaliśmy 2 problemy, które powodowały, że podczas inicjowania sala nie mogła prawidłowo przywrócić danych z uszkodzonej bazy danych lub nieprawidłowej migracji. b/111504749 i b/111519144
- Usługa Room będzie teraz prawidłowo używać głównego konstruktora Kotlin w klasach danych, dzięki czemu nie trzeba będzie zadeklarować pól jako
vars
. b/105769985
Wersja 2.0.0
Wersja 2.0.0
1 października 2018 r.
Wersja androidx.room 2.0.0
została opublikowana bez zmian z wersji 2.0.0-rc01.
Wersja 2.0.0-rc01
20 września 2018 r.
Wersja androidx.room 2.0.0-rc01
została opublikowana bez zmian z wersji 2.0.0-beta01.
Wersja 2.0.0-beta01
2 lipca 2018 r.
Zmiany w interfejsie API lub zachowaniu
- Dodano
RoomDatabase.Builder.setQueryExecutor()
, aby umożliwić dostosowanie miejsca wykonywania zapytań - Dodano obsługę RxJava2
Observable
- Wygenerowane implementacje DAO i bazy danych są już ostateczne
Poprawki błędów
- Podaj nazwę klasy/pola w błędzie „Nie można znaleźć metody pobierania dla pola” b/73334503
- Poprawiono wsteczną zgodność RoomOpenHelper ze starszymi wersjami pokoju b/110197391
Zależności sprzed AndroidaX
W wersjach pokoju starszych niż AndroidX dołącz te zależności:
dependencies {
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
// optional - RxJava support for Room
implementation "android.arch.persistence.room:rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "android.arch.persistence.room:guava:$room_version"
// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
}
Wersja 1.1.1
Wersja 1.1.1
19 czerwca 2018 r.
Pokój 1.1.1
jest taki sam jak pokój 1.1.1-rc1
.
Wersja 1.1.1-rc1
16 maja 2018 r.
Jeśli używasz migracji, zdecydowanie zalecamy użycie pokoju 1.1.1-rc1
zamiast 1.1.0
.
Naprawiono błąd, który powodował, że sala nie obsługiwała prawidłowo inicjowania po migracji b/79362399
Wersja 1.1.0
Wersja 1.1.0-beta3
19 kwietnia 2018 r.
Poprawki błędów
- Poprawianie błędu kompilacji, gdy POJO w Kotlin odwołuje się do encji relacji zdefiniowanej w Javie b/78199923
Wersja 1.1.0-beta2
5 kwietnia 2018 r.
Poprawki błędów
Naprawiliśmy krytyczny błąd w implementacjach
Single
iMaybe
sali, w którym dochodziło do ponownego wykorzystania zapytania z wyprzedzeniem, co powodowało problemy w przypadku dodania więcej niż 1 obserwatora do zwracanego zdarzeniaSingle
lubMaybe
. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] nie będzie zgłaszać
VACUUM
bazy danych, jeśli zostanie ona wywołana w ramach transakcji. b/77235565
Wersja 1.1.0-beta1
21 marca 2018 r.
Zmiany w interfejsie API
- Z opinii na temat weryfikacji interfejsu API wynika, że
@RawQuery
nie akceptuje już przekazywaniaString
jako parametru zapytania. Musisz użyć [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (Zobacz [SimpleSQLiteQuery][ref-SimpleSQLiteQuery], aby łatwo utworzyć instancję [SupportSQLiteQuery][ref-SupportSQLiteQuery] z obsługą argumentów). - Metoda [fallbackToDestructiveMigrateFrom][ref-fallbackToDestructiveMigrateFrom] RoomDatabase.Builder teraz akceptuje metodę
vararg int
zamiastvararg Integer
.
Poprawki błędów
- [RoomDatabase.clearAllTables][ref-clearAllTables] próbuje teraz przywrócić spację w systemie operacyjnym przez ustawienie punktu kontrolnego zapisywania logów z prośbą o zgodę i
VACUUM
użycie bazy danych. - [
@RawQuery
][ref-RawQuery] akceptuje teraz dowolne elementy Pojo dla właściwościobservedEntities
, o ile Pojo odwołuje się do co najmniej jednego elementu w polachEmbedded
lubRelation
. b/74041772 - Strona dla sali: implementacja DataSource w pokoju prawidłowo obsługuje zależności z wieloma tabelami (np. relacje i złączenia). Wcześniej te działania nie aktywowały nowych wyników lub mogły się nie skompilować. b/74128314
Wersja 1.1.0-alfa1
22 stycznia 2018 r.
Nowe funkcje
RawQuery
: ten nowy interfejs API zezwala metodom@Dao
na otrzymywanie SQL jako parametru zapytania b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: ten nowy interfejs API w usłudzeRoomDatabase.Builder
daje bardziej szczegółową kontrolę nad tym, w którym początkowym okresie migracje zawierające niszczycielskie wersje schematu są dozwolone (w porównaniu z faktyczną migrację zastępcząToDestructiveMigrate) b/64989640- Sala obsługuje teraz tylko nowsze interfejsy API stron (w wersji alfa-4 lub nowszej), a wycofane interfejsy
LivePagedListProvider
nie są już obsługiwane. Aby korzystać z nowej wersji alfa pokoju, musisz użyć podziału na stronyalpha-4
lub wyższego poziomu i przejść zLivePagedListProvider
naLivePagedListBuilder
(w miarę możliwości).
Poprawki błędów
- Ulepszona obsługa typów Kotlin Kapt. b/69164099
- Kolejność pól nie unieważnia już schematu. b/64290754