Room
Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
16 lipca 2025 r. | 2.7.2 | - | - | 2.8.0-alpha01 |
Deklarowanie zależności
Aby dodać zależność od Room, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven Google.
Zależności biblioteki Room obejmują testowanie migracji Room i Room RxJava.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle
aplikacji lub modułu:
Kotlin
dependencies { val room_version = "2.7.2" implementation("androidx.room:room-runtime:$room_version") // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See Add the KSP plugin to your project ksp("androidx.room:room-compiler:$room_version") // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor("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") }
Groovy
dependencies { def room_version = "2.7.2" implementation "androidx.room:room-runtime:$room_version" // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP) // See KSP Quickstart to add KSP to your build ksp "androidx.room:room-compiler:$room_version" // If this project only uses Java source, use the Java annotationProcessor // No additional plugins are necessary annotationProcessor "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" }
Informacje o korzystaniu z wtyczki KAPT znajdziesz w dokumentacji KAPT.
Informacje o korzystaniu z wtyczki KSP znajdziesz w dokumentacji szybkiego wprowadzenia do 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 (czyli modułów Gradle tylko w języku Java lub Kotlin) możesz użyć zależności androidx.room:room-common
, aby korzystać z adnotacji Room.
Konfigurowanie opcji kompilatora
Room ma te opcje procesora adnotacji:
room.schemaLocation |
directory
Umożliwia eksportowanie schematów bazy danych do plików JSON w podanym katalogu. Więcej informacji znajdziesz w sekcji Migracje pokoi. |
room.incremental |
boolean
Włącza przyrostowy procesor adnotacji Gradle. Wartością domyślną jest true .
|
room.generateKotlin |
boolean
Generuj pliki źródłowe Kotlin zamiast Java. Wymaga KSP. Wartość domyślna to true w wersji 2.7.0.
Więcej informacji znajdziesz w informacjach o wersji 2.6.0, w której wprowadzono tę funkcję.
|
Korzystanie z wtyczki Gradle do obsługi Room
W przypadku biblioteki Room w wersji 2.6.0 i nowszej możesz użyć wtyczki Room Gradle Plugin, aby skonfigurować opcje kompilatora Room. Wtyczka konfiguruje projekt w taki sposób, aby wygenerowane schematy (które są wynikiem zadań kompilacji i są używane do automatycznych migracji) były prawidłowo skonfigurowane pod kątem powtarzalnych i możliwych do buforowania kompilacji.
Aby dodać wtyczkę, w pliku kompilacji Gradle najwyższego poziomu zdefiniuj wtyczkę i jej wersję.
Groovy
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
.
Groovy
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 oraz różnych zadań kompilacji i ich backendów (javac, KAPT, KSP) w taki sposób, aby pliki schematu były zapisywane w folderach z odmianami, np. schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Te pliki powinny być
sprawdzane w repozytorium, aby można było ich używać do weryfikacji i automatycznej migracji.
Niektórych opcji nie można skonfigurować we wszystkich wersjach wtyczki Room Gradle, mimo że są one obsługiwane przez kompilator Room. W tabeli poniżej znajdziesz listę wszystkich opcji i wersję wtyczki Room Gradle, w której dodano obsługę konfigurowania tej opcji za pomocą rozszerzenia room
. Jeśli Twoja wersja jest starsza lub 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 używasz wtyczki Room Gradle lub opcja, której potrzebujesz, nie jest obsługiwana przez Twoją wersję wtyczki, możesz skonfigurować Room za pomocą opcji procesora adnotacji, jak opisano w sekcji Dodawanie zależności kompilacji. Sposób określania opcji adnotacji zależy od tego, czy w przypadku biblioteki Room używasz KSP czy KAPT.
Groovy
// 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... ) } } } }
room.schemaLocation
jest katalogiem, a nie typem pierwotnym, więc podczas dodawania tej opcji musisz użyć CommandLineArgumentsProvider
, aby Gradle wiedział o tym katalogu podczas sprawdzania aktualności.
W artykule Migracja bazy danych Room znajdziesz pełną implementację CommandLineArgumentsProvider
, która podaje lokalizację schematu.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 2.8
Wersja 2.8.0-alpha01
16 lipca 2025 r.
Zostanie wycofaneandroidx.room:room-*:2.8.0-alpha01
Wersja 2.8.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Dodano nowy artefakt
androidx.room:room-sqlite-wrapper
, który zawiera interfejsy API do pobierania otokiSupportSQLiteDatabase
elementuRoomDatabase
ze skonfigurowanym elementemSQLiteDriver
. Aby uzyskać otokę, użyj nowej funkcji rozszerzeniaRoomDatabase.getSupportWrapper()
. Jest to artefakt zgodności, który umożliwia korzystanie zSupportSQLiteDatabase
, zwykle uzyskiwanego zRoomDatabase.openHelper.writableDatabase
, nawet jeśli baza danych Room jest skonfigurowana zSQLiteDriver
. Ten moduł opakowujący jest przydatny w przypadku stopniowej migracji baz kodu, które chcą wdrożyćSQLiteDriver
, ale w dużym stopniu korzystają z interfejsów APISupportSQLite
, a jednocześnie chcą wykorzystaćBundledSQLiteDriver
. (Icf6ac) - Dodanie platform KMP dla Watch OS i TV OS (I228f6, b/394238801)
Poprawki błędów
- Naprawiono zakleszczenie, które mogło sporadycznie występować podczas korzystania z zawieszania transakcji i
AndroidSQLiteDriver
. (b/415006268)
Wersja 2.7
Wersja 2.7.2
18 czerwca 2025 r.
Zostanie wycofaneandroidx.room:room-*:2.7.2
Wersja 2.7.2 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że podczas przetwarzania źródeł natywnych za pomocą KSP wartości adnotacji były odczytywane nieprawidłowo, a czasami brakowało eksportów schematu. (b/416549580)
- Naprawiono błąd, w którym komentarze na początku kodu SQL powodowały wykonywanie instrukcji tak, jakby były zapytaniami do odczytu. (b/413061402)
- Rozwiązaliśmy problem z nieudaną konfiguracją wtyczki Gradle Room z powodu pustego katalogu schematu. (b/417823384)
- Nie zgłaszaj już błędu
SQLiteException
, gdy uzyskanie połączenia trwa zbyt długo. Zamiast tego biblioteka wyśle komunikat dziennika. Zamiast zgłaszać wyjątek, rejestruje on zdarzenia w dzienniku, gdy pętle w iOS są zawieszane, co powoduje, że Room błędnie interpretuje limit czasu, który występuje w przypadku procedury Kotlin Coroutine uzyskującej połączenie. Zapobiega to zgłaszaniu wyjątku, gdy aplikacja na iOS jest uruchamiana w tle, a później wznawiana w trakcie operacji na bazie danych. (b/422448815)
Wersja 2.7.1
23 kwietnia 2025 r.
Zostanie wycofaneandroidx.room:room-*:2.7.1
Wersja 2.7.1 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd
IndexOutOfBoundsException
podczas weryfikacji dostarczonego konwertera typów. (b/409804755). - Obsługa
RoomDatabase.runInTransaction()
, gdySQLiteDriver
jest skonfigurowany w pokoju. (b/408364828).
Wersja 2.7.0
9 kwietnia 2025 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0
Wersja 2.7.0 zawiera te zmiany.
Ważne zmiany od wersji 2.6.0
- Obsługa Kotlin Multiplatform (KMP): w tej wersji Room został przekształcony w bibliotekę Kotlin Multiplatform (KMP). Obecnie obsługiwane platformy to Android, iOS, JVM (komputery), Mac i Linux. Więcej informacji o tym, jak zacząć korzystać z Room KMP, znajdziesz w oficjalnej dokumentacji Room KMP. W ramach obsługi KMP bibliotekę Room można też skonfigurować za pomocą
SQLiteDriver
. Informacje o tym, jak przenieść istniejącą aplikację do interfejsów API sterownika i biblioteki Room KMP, znajdziesz w dokumentacji migracji. - Generowanie kodu w Kotlinie w KSP jest domyślnie włączone, jeśli przetwarzanie odbywa się za pomocą KSP. W przypadku projektów korzystających tylko z KAPT lub Javy Room nadal będzie generować źródła w Javie.
- Kotlin 2.0 i KSP2: biblioteka Room jest teraz przeznaczona dla języka Kotlin 2.0 i wymaga, aby projekty były kompilowane w Kotlinie 2.0 lub w języku w równoważnej lub nowszej wersji. Dodaliśmy też obsługę KSP2, która jest zalecana w przypadku korzystania z Room w wersji Kotlin 2.0 lub nowszej.
Wersja 2.7.0-rc03
26 marca 2025 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-rc03
Wersja 2.7.0-rc03 zawiera te zmiany.
Poprawki błędów
- Nie zgłaszaj już wyjątku
InterruptedException
, gdy wątek zostanie przerwany podczas wykonywania interfejsów API blokujących Room, w tym funkcji blokujących DAO (b/400584611). - Ponowne wdrożenie puli połączeń Room w celu złagodzenia problemów z
SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection.
i podobnych (b/380088809).
Wersja 2.7.0-rc02
12 marca 2025 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-rc02
Wersja 2.7.0-rc02 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd automatycznej migracji, która nieprawidłowo obsługiwała nową kolumnę w tabeli FTS. (b/348227770, Ic53f3)
- Naprawiono błąd kompilatora Rooma spowodowany błędem
NullPointerException
podczas przetwarzania źródeł innych niż JVM za pomocą KSP. (b/396607230, I693c9) - Rozwiązaliśmy problem, który powodował, że Room nie unieważniał tabel po zakończeniu korzystania z połączenia zapisu. (b/340606803, I73ef6)
Wersja 2.7.0-rc01
26 lutego 2025 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-rc01
Wersja 2.7.0-rc01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że Room nie ustawiał wartości
busy_timeout
w początkowym połączeniu z bazą danych, co prowadziło do problemów zSQLException: Error code: 5, message: database is locked
(I93208, b/380088809). - Naprawiono problem w kompilatorze Room, który powodował awarię procesora KSP podczas przetwarzania natywnych zestawów źródeł (np. iOS) w Kotlinie 2.1.x i KSP1 (I883b8, b/396607230).
Wersja 2.7.0-beta01
12 lutego 2025 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-beta01
Wersja 2.7.0-beta01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z
RoomDatabase.inTransaction()
otwieraniem zamkniętej bazy danych, gdy nie powinno to mieć miejsca. Jeśli baza danych jest zamknięta, funkcja powinna szybko zwracać wartość false (b/325432967). - Naprawiono awarię (
IllegalArgumentException: not a valid name
) kompilatora Room podczas przetwarzania funkcji DAO z klasami wbudowanymi lub wartościami Kotlin (b/388299754). - Do artefaktu JVM
room-runtime
dodaj reguły Proguard, aby domyślny konstruktor wygenerowanej implementacji bazy danych nie został usunięty, ponieważ jest używany przez domyślną inicjację Room, która korzysta z odbicia (b/392657750).
Wersja 2.7.0-alpha13
29 stycznia 2025 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha13
Wersja 2.7.0-alpha13 zawiera te zmiany.
Zmiany w interfejsie API
- Biblioteka Room jest teraz kierowana na język Kotlin w wersji 2.0 i wymaga, aby projekty były też kompilowane w Kotlinie 2.0 lub w równoważnej lub nowszej wersji języka. (I8efb0, b/315461431, b/384600605)
Poprawki błędów
- Rozwiązaliśmy problem w konstruktorze bazy danych Room KMP, który występował, gdy w Androidzie używano prostej nazwy zamiast ścieżki, a ścieżka do pliku bazy danych nie znajdowała się w katalogu danych aplikacji. (I83315, b/377830104)
- Rozwiązano problem z wtyczką Gradle Room, w którym konfigurowanie danych wejściowych i wyjściowych schematu powodowało problem w projektach na Androida:
property 'inputDirectory' is final and cannot be changed any further.
(1dbb4c, b/376071291) - Dodaliśmy obsługę KSP2 we wtyczce Room Gradle, rozwiązując problem polegający na tym, że wtyczka nieprawidłowo konfigurowała katalog schematu. (Iec3c4, b/379159770)
Wkład zewnętrzny
- Rozwiązaliśmy problem z integracją paginacji
Room
, który powodował skoki interfejsu, gdy początkowy klucz do odświeżenia był zbyt blisko końca listy. Dzięki Evie! (I2abbe, b/389729367)
Wersja 2.7.0-alpha12
11 grudnia 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha12
Wersja 2.7.0-alpha12 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaj eksperymentalny interfejs API
RoomDatabase.Builder.setInMemoryTrackingMode()
, aby skonfigurować, czy Room będzie używać tabeli w pamięci do śledzenia unieważnień. (I2a9b2, b/185414040)
Poprawki błędów
- Migracje destrukcyjne usuwają teraz widoki, aby zapewnić ich ponowne utworzenie, co sprawia, że działanie przy włączonym ustawieniu
allowDestructiveMigrationForAllTables
(domyślnym w KMP) jest zgodne z dotychczasowym działaniem przy wyłączonym ustawieniu. (0a3e83, b/381518941)
Wersja 2.7.0-alpha11
30 października 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha11
Wersja 2.7.0-alpha11 zawiera te zmiany.
Zmiany w interfejsie API
- Wróć do nowo dodanego podpisu metody
convertRows()
, aby była to funkcja zawieszania, która otrzymujeRawRoomQuery
na potrzeby stronicowania pomieszczeń. (Ie57b5, b/369136627)
Poprawki błędów
- Rozwiązaliśmy problem z paginacją w pokoju, który powodował generowanie nieprawidłowego kodu w przypadku użycia znaku
@Relation
w połączeniu ze znakiemPagingSource
.
Wersja 2.7.0-alpha10
16 października 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha10
Wersja 2.7.0-alpha10 zawiera te zmiany.
Zmiany w interfejsie API
- Utwórz wewnętrzną klasę
ByteArrayWrapper
, która będzie obsługiwać relacje zByteBuffer
na platformach innych niż Android i JVM. (I75543, b/367205685) - Dodaj
SQLiteStatement.getColumnType()
wraz z różnymi stałymi wynikówSQLITE_DATA_*
, aby umożliwić pobieranie typu danych kolumny. (I1985c, b/369636251)
Wersja 2.7.0-alpha09
2 października 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha09
Wersja 2.7.0-alpha09 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z implementacją
room-paging
w KMP, który powodowałError code: 8, message: attempt to write a readonly database
z powodu rozpoczęcia transakcji zapisu na połączeniu odczytu. (b/368380988)
Wersja 2.7.0-alpha08
18 września 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha08
Wersja 2.7.0-alpha08 zawiera te zmiany.
Nowe funkcje
- Artefakty
room-paging
zostały przeniesione, aby były zgodne z KMP. (Ib8756, b/339934824) - Interfejs API
invalidationTrackerFlow()
został ujednolicony jako interfejs API własnyInvalidationTracker.createFlow()
i jest teraz dostępny w przypadku zestawów źródeł innych niż Android w projektach KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)
Zmiany w interfejsie API
- Wszystkie ostrzeżenia i komunikaty o błędach w Room, które zawierają słowo
Cursor
, zostały usunięte lub zastąpione, ponieważCursor
nie jest już dokładnym ogólnym terminem w wersji Room na platformy KMP. (Id8cd9, b/334087492)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że biblioteka Room KMP próbowała emitować kod przy użyciu znaku
UUID
na platformach innych niż JVM. (b/362994709) - Rozwiązaliśmy problem z wtyczką Room Gradle, który powodował błąd „Cannot change attributes of configuration … after it has been locked for mutation” (Nie można zmienić atrybutów konfiguracji … po zablokowaniu możliwości modyfikacji) podczas używania jej w projekcie KMP z Compose Multiplatform. (b/343408758)
Wersja 2.7.0-alpha07
21 sierpnia 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha07
Wersja 2.7.0-alpha07 zawiera te zmiany.
Nowe funkcje
- Wtyczka Room Gradle będzie teraz automatycznie dodawać wyeksportowane schematy do źródeł zasobów testów instrumentacji Androida, aby można było ich używać w
MigrationTestHelper
.
Poprawki błędów
- Usunięto problem z wygenerowaną wartością „actual” w przypadku funkcji
RoomDatabaseConstructor
, w której brakowało modyfikatora „actual” w funkcjiinitialize
, jeśli taka funkcja została też zastąpiona w deklaracji „expect”. (359631627) - Rozwiązaliśmy problem polegający na tym, że wygenerowana wartość „actual” w przypadku
RoomDatabaseConstructor
nie odpowiadała widoczności deklaracji „expect”. (358138953)
Wersja 2.7.0-alpha06
7 sierpnia 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha06
Wersja 2.7.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Zmień konfigurację tworzenia instancji
RoomDatabase
w projekcie KMP.
Ze względu na model kompilacji Kotlin 2.0 strategia odwoływania się do funkcji, która ma zostać wygenerowana i nosi nazwę instantiateImpl()
, nie jest już możliwa. Wprowadzamy 2 nowe interfejsy API: @ConstructedBy
i RoomDatabaseConstructor
, które zastępują strategię instantiateImpl()
. Nowa strategia wygląda tak:
Określ obiekt expect, który implementuje
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
Połącz obiekt z
@Database
deklaracją za pomocą@ConstructedBy
.@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
Utwórz nową instancję bazy danych, ale bez przekazywania argumentu fabrycznego
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Rozwiązuje problemy b/316978491, b/338446862 i b/342905180
- Obsługa
@RawQuery
w Room KMP przez dodanie nowego interfejsu API o nazwieRoomRawQuery
, który jest podobny doSupportSQLiteQuery
pod względem przechowywania surowego ciągu SQL i funkcji wiązania argumentów z instrukcją. Funkcje z adnotacjami@RawQuery
mogą teraz przyjmować jako pojedynczy parametr wartośćRoomRawQuery
. (Iea844, b/330586815) - Dodaj przeciążenie
setQueryCallback()
, które akceptujeCoroutineContext
. (Id66ff, b/309996304) - Dodano obsługę
linuxArm64
platform Kotlin Multiplatform (I139d3, b/338268719)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że biblioteka Room nieprawidłowo generowała wywołanie funkcji
recursiveFetchArrayMap
w przypadku platform innych niż Android. (710c36, b/352482325) - Rozwiązaliśmy problem, który czasami powodował, że w projekcie KMP biblioteka Room zgłaszała wyjątek „Timed out attempting a connection” (Przekroczono limit czasu podczas próby nawiązania połączenia). (fa72d0, b/347737870)
- Rozwiązaliśmy problem z automatyczną migracją, który powodował zbyt wczesne sprawdzanie kluczy obcych, zanim inne tabele zmieniły schematy, aby dostosować się do nowych kluczy obcych. (7672c0, b/352085724)
Wersja 2.7.0-alpha05
10 lipca 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha05
Wersja 2.7.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Zmieniono nazwę
SQLiteKt
naSQLite
iBundledSQLiteKt
naBundledSQLite
. (I8b501)
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że
RoomDatabase
zawieszał się lub zwracał błąd z przekroczeniem limitu czasu połączenia podczas korzystania zAndroidSQLiteDriver
.
Wersja 2.7.0-alpha04
12 czerwca 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha04
Wersja 2.7.0-alpha04 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że procesor adnotacji Room generował niezgodny kod KMP, gdy w obiekcie DAO zdefiniowano typ zwracany multi-map. (b/340983093)
- Rozwiązaliśmy problem, który powodował, że biblioteka Room nie mogła znaleźć wygenerowanej implementacji bazy danych, jeśli klasa z adnotacją
@Database
nie miała pakietu. (b/342097292) - Naprawiliśmy problem, który powodował błąd
ConcurrentModificationException
, gdy włączone było automatyczne zamykanie i unieważnianie wielu instancji, a baza danych była automatycznie zamykana z powodu braku aktywności.
Wersja 2.7.0-alpha03
29 maja 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha03
Wersja 2.7.0-alpha03 zawiera te zmiany.
Poprawki błędów
- Rozwiązanie różnych problemów związanych z Kotlinem 2.0 i KSP 2.0. Pamiętaj, że obsługa języka Kotlin 2.0 z KSP 2 nie jest jeszcze w pełni gotowa, a zespół pracuje nad różnymi interfejsami API i zmianami w działaniu nowego kompilatora. (b/314151707)
Wersja 2.7.0-alpha02
14 maja 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha02
Wersja 2.7.0-alpha02 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy różne problemy z KSP.
Wersja 2.7.0-alpha01
1 maja 2024 r.
Zostanie wycofaneandroidx.room:room-*:2.7.0-alpha01
Wersja 2.7.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Obsługa Kotlin Multiplatform (KMP): w tej wersji Room został przekształcony w bibliotekę Kotlin Multiplatform (KMP). Chociaż wciąż musimy popracować nad tą funkcją, w tej wersji wprowadzamy nową wersję Room, w której większość funkcji została ujednolicona (dostosowana do wielu platform). Obecnie obsługiwane platformy to Android, iOS, JVM (komputery), Mac i Linux. W przyszłych wersjach Room brakujące funkcje na nowo obsługiwanych platformach zostaną uzupełnione.
Więcej informacji o tym, jak zacząć korzystać z Room KMP, znajdziesz w oficjalnej dokumentacji Room KMP.
- Generowanie kodu w Kotlinie w KSP jest domyślnie włączone, jeśli przetwarzanie odbywa się za pomocą KSP. W przypadku projektów korzystających tylko z KAPT lub Javy Room nadal będzie generować źródła w Javie.
Zmiany w interfejsie API
- Dodano przeciążenie funkcji
Room.databaseBuilder()
, które przyjmuje parametr lambda przeznaczony do użycia z funkcją wygenerowaną przez Room, aby uniknąć używania odbicia podczas tworzenia instancji wygenerowanej implementacjiRoomDatabase
. Przykładowe użycie:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Do narzędzia do tworzenia dodano interfejs API do konfigurowania pokoju z
CoroutineContext
:RoomDatabase.Builder.setQueryCoroutineContext
. Pamiętaj, żeRoomDatabase
można skonfigurować tylko za pomocą wykonawców korzystających zsetQueryExecutor
lub z kontekstu korutyny, ale nie z obu tych metod jednocześnie. - Dodaliśmy interfejs API do konfigurowania pokoju za pomocą sterownika
SQLite
:RoomDatabase.Builder.setDriver()
. Więcej informacji o interfejsieSQLite
Driver API znajdziesz w dokumentacji SQLite KMP. - Dodaliśmy interfejsy API umożliwiające dostęp do bazowego
SQLiteConnection
z interfejsów API sterownika:RoomDatabase.useReaderConnection
iRoomDatabase.useWriterConnection
. - Wywołania zwrotne związane z Varios Room mają teraz przeciążoną wersję, która zamiast
SupportSQLiteDatabase
otrzymujeSQLiteConnection
. Są one przeznaczone do zastąpienia podczas migracji do projektu KMP. Więcej informacji o migracji użycia biblioteki Room w aplikacji na Androida do wspólnego modułu KMP znajdziesz w przewodniku po migracji. Wywołania zwrotne to: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 artefaktemandroidx.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.
Zostanie wycofaneandroidx.room:room-*:2.6.1
Wersja 2.6.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem w wygenerowanym kodzie, który powodował, że wartość domyślna kolumn typu Double w
EntityCursorConverter
była ustawiana na 0 zamiast 0,0. Uwzględniliśmy też potencjalną poprawkę podobnego przypadku brzegowego w przypadku kolumn typu Float. (Id75f5, b/304584179) - Wyjątki zgłaszane przez wczytywanie
PagingSource
będą teraz propagowane jakoLoadStateUpdate
typuLoadResult.Error
zawierający obiekt Throwable. Ten stan błędu można zaobserwować za pomocąPagingDataAdapter.loadStateFlow(Views)
lubLazyPagingItems.loadState(Compose)
. Pamiętaj, że jest to zmiana w zachowaniu, ponieważ w przeszłości błędy wczytywania były zgłaszane jako wyjątek wywoływany przez metodę DAO, która spowodowała wczytywanie. (I93887, b/302708983)
Wersja 2.6.0
18 października 2023 r.
Zostanie wycofaneandroidx.room:room-*:2.6.0
Wersja 2.6.0 zawiera te zmiany.
Ważne zmiany od wersji 2.5.0
- W Room KSP jest teraz dostępna opcja włączania generowania kodu w Kotlinie („Kotlin CodeGen”). (4297ec0). Aby włączyć generowanie kodu w Kotlinie w Room, dodaj nazwę opcji
room.generateKotlin
do opcji procesora dla KSP. Więcej informacji o przekazywaniu opcji procesora do KSP znajdziesz w dokumentacji KSP.
Uwaga: podczas korzystania z Kotlin CodeGen należy pamiętać, że dodano dodatkowe ograniczenia. Właściwości abstrakcyjne jako metody pobierające DAO lub zapytania DAO w Kotlin CodeGen są niedozwolone. Zamiast tego należy je przepisać jako funkcje, aby uniknąć fałszywego przekonania, że wartość właściwości jest niezmienna i ma stały zapisany wynik. Kolejnym dodanym ograniczeniem jest to, że w Room dla Kotlin CodeGen nie są już dozwolone typy zwracane kolekcji dopuszczające wartość null.
Ostrzeżenie: podczas korzystania z Kotlin CodeGen możesz zauważyć, że Twoje projekty są bardziej rygorystyczne pod względem możliwości przyjmowania wartości null. W przypadku generowania kodu w Kotlinie ważna jest możliwość przyjmowania wartości null przez argumenty typu, podczas gdy w przypadku Javy jest to w większości przypadków ignorowane. Załóżmy na przykład, że masz typ zwracany `Flow<foo\>`, a tabela jest pusta. W przypadku generowania kodu w języku Java nie spowoduje to żadnych problemów, ale w przypadku generowania kodu w języku Kotlin pojawi się błąd. Aby tego uniknąć, musisz użyć `Flow<foo?\>`, zakładając, że emitowana jest wartość null. </foo?\></foo\>
- Do biblioteki Room dodano nowy artefakt wtyczki Gradle Room o identyfikatorze
androidx.room
, który rozwiązuje różne problemy z biblioteką Room związane z wejściami i wyjściami schematów za pomocą opcji procesora adnotacji Gradle. Więcej informacji znajdziesz w informacjach o wersji 2.6.0-alpha02 biblioteki Room. - Klasy wartości w jednostkach Room są teraz obsługiwane w KSP. (4194095)
- Typy zwracane zagnieżdżonych map w funkcjach DAO są teraz obsługiwane w bibliotece Room. (I13f48, 203008711)
Wersja 2.6.0-rc01
20 września 2023 r.
Zostanie wycofaneandroidx.room:room-*:2.6.0-rc01
Wersja 2.6.0-rc01 zawiera te zmiany.
Wersja 2.6.0-beta01
23 sierpnia 2023 r.
Zostanie wycofaneandroidx.room:room-*:2.6.0-beta01
Wersja 2.6.0-beta01 zawiera te zmiany.
Poprawki błędów
- Obsługa wyjątku
SQLite
podczas operacji upsert, gdy podczas operacji upsert wystąpi wyjątek2067 SQLITE_CONSTRAINT_UNIQUE
. W takim przypadku operacja upsert powinna wykonać aktualizację. (If2849, b/243039555)
Wersja 2.6.0-alpha03
9 sierpnia 2023 r.
Zostanie wycofaneandroidx.room:room-*:2.6.0-alpha03
Wersja 2.6.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Typy zwracane zagnieżdżonych map w funkcjach DAO są teraz obsługiwane w bibliotece Room. (I13f48, 203008711)
Zmiany w interfejsie API
- Utworzono nowy typ adnotacji o nazwie
@MapColumn
, który zastępuje wycofany już typ@MapInfo
. W przypadku każdej nazwy kolumny (keyColumnName
,valueColumnName
lub obu) podanej w adnotacji@MapInfo
musisz zadeklarować adnotację@MapColumn
zawierającą tylkocolumnName
i użyć jej w argumencie określonego typu, do którego się odwołujesz (klucza lub wartości mapy) w typie zwracanym funkcji DAO. Dzieje się tak, ponieważ adnotacja@MapColumn
jest używana bezpośrednio w argumencie typu w typie zwracanym funkcji DAO, a nie w samej funkcji, jak w przypadku adnotacji@MapInfo
. Więcej informacji znajdziesz w@MapColumn
dokumentacji. (Ib0305, b/203008711) - Zaktualizowano pliki interfejsu API, aby dodać adnotacje dotyczące wyłączenia zgodności (I8e87a, b/287516207).
- Interfejsy API wtyczki Room Gradle zostały zaktualizowane, aby nie zawsze wymagać konfiguracji dla każdego wariantu. Oznacza to, że wtyczka może akceptować globalną lokalizację dla wszystkich wariantów bez tworzenia wielu katalogów, co umożliwia płynniejsze migracje, ale jest też wystarczająco elastyczna, aby ręcznie konfigurować wersje lub tworzyć schematy typów, zachowując jednocześnie zalety wtyczki (powtarzalne i możliwe do buforowania kompilacje). (I09d6f, b/278266663)
Poprawki błędów
- Usunęliśmy potencjalną lukę w zabezpieczeniach związaną z wyciekiem pamięci w
QueryInterceptorStatement
. (I193d1) - Naprawiliśmy nieprawidłowe działanie funkcji
QueryInterceptorDatabase execSQL()
. (Iefdc8)
Wersja 2.6.0-alpha02
21 czerwca 2023 r.
Zostanie wycofaneandroidx.room:room-*:2.6.0-alpha02
Wersja 2.6.0-alpha02 zawiera te zmiany.
Wtyczka Gradle Room
Ta nowa wersja zawiera nowy artefakt wtyczki Room Gradle o identyfikatorze androidx.room
, który rozwiązuje różne problemy z 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 wygenerowane schematy używane do automatycznej migracji i będące wynikiem zadań kompilacji były prawidłowo skonfigurowane pod kątem powtarzalnych i możliwych do buforowania kompilacji. Wtyczka udostępnia DSL do konfigurowania lokalizacji schematu podstawowego:
room {
schemaDirectory("$projectDir/schemas/")
}
Wtyczka skonfiguruje następnie kompilator Room oraz różne zadania kompilacji i ich komponenty backendu (javac, KAPT, KSP) tak, aby pliki schematu były zapisywane w folderach z odmianami, np. schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Jak zwykle te pliki są przechowywane w repozytorium i używane do weryfikacji oraz automatycznej migracji. Po przejściu na wtyczkę zamiast opcji procesora adnotacji istniejące pliki schematu należy skopiować do wygenerowanych katalogów wersji utworzonych przez wtyczkę. Jest to jednorazowa operacja migracji, którą należy wykonać ręcznie. Dokumentacja schematu na stronie developers.android.com zostanie zaktualizowana w przyszłości, gdy uwzględnimy opinie i wtyczka osiągnie stabilną wersję. Zachęcamy do jej wypróbowania.
Zmiany w interfejsie API
RoomDatabase.QueryCallback
został zdefiniowany jako interfejs funkcyjny, który umożliwia korzystanie z konwersji SAM. (Iab8ea, b/281008549)
Poprawki błędów
- Rozwiązanie problemu, który pojawiał się podczas tworzenia instancji bazy danych w Robolectric po migracji źródeł Room z Javy na Kotlin. (Ic053c, b/274924903)
Wersja 2.6.0-alpha01
22 marca 2023 r.
Zostanie wycofaneandroidx.room:room-*:2.6.0-alpha01
Wersja 2.6.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Obsługa klas wartości w Room w przypadku KSP. Biblioteka Room obsługuje teraz klasy wartości w elementach. (4194095)
- Generowanie kodu w Kotlinie(lub „Kotlin CodeGen”) można teraz włączyć w Roomie (4297ec0). Aby włączyć generowanie kodu w Kotlinie w Room, dodaj nazwę opcji
room.generateKotlin
do opcji procesora dla KSP. Więcej informacji o przekazywaniu opcji procesora do KSP znajdziesz w dokumentacji KSP.
Uwaga: podczas korzystania z Kotlin CodeGen należy pamiętać, że dodano dodatkowe ograniczenia. Właściwości abstrakcyjne jako metody pobierające DAO lub zapytania DAO w Kotlin CodeGen są niedozwolone. Zamiast tego należy je przepisać jako funkcje, aby uniknąć fałszywego przekonania, że wartość właściwości jest niezmienna i ma stały zapisany wynik. Kolejnym dodanym ograniczeniem jest to, że w Room dla Kotlin CodeGen nie są już dozwolone typy zwracane kolekcji dopuszczające wartość null.
Ostrzeżenie: podczas korzystania z Kotlin CodeGen możesz zauważyć, że Twoje projekty są bardziej rygorystyczne pod względem możliwości przyjmowania wartości null. W przypadku generowania kodu w Kotlinie ważna jest możliwość przyjmowania wartości null przez argumenty typu, podczas gdy w przypadku Javy jest to w większości przypadków ignorowane. Załóżmy na przykład, że masz typ zwracany `Flow<foo\>`, a tabela jest pusta. W przypadku generowania kodu w języku Java nie spowoduje to żadnych problemów, ale w przypadku generowania kodu w języku Kotlin pojawi się błąd. Aby tego uniknąć, musisz użyć `Flow<foo?\>`, zakładając, że emitowana jest wartość null. </foo?\></foo\>
Zmiany w interfejsie API
- Zapobieganie bezsensownemu używaniu kolekcji dopuszczających wartość null w typach zwracanych metod DAO. (I777dc, b/253271782, b/259426907)
- Dodaj interfejs API do tworzenia przepływu, który emituje zmiany w obserwatorze unieważnienia. Interfejs API jest przydatny do tworzenia strumieni, które muszą reagować na zmiany w bazie danych. (I8c790, b/252899305)
Poprawki błędów
- W przypadku generowania kodu w Kotlinie nie zezwalaj na właściwości abstrakcyjne jako metody pobierające DAO ani zapytania DAO. Zamiast tego należy je przepisać jako funkcje, aby uniknąć fałszywego przekonania, że wartość właściwości jest niezmienna i ma stały zapisany wynik. (If6a13, b/127483380, b/257967987)
Wersja 2.5.2
Wersja 2.5.2
21 czerwca 2023 r.
Zostanie wycofaneandroidx.room:room-*:2.5.2
Wersja 2.5.2 zawiera te zmiany.
Poprawki błędów
- Rozwiąż problem z niezgodnością z biblioteką kotlinx-metadata-jvm. (386d5c)
- Rozwiązaliśmy problem, który powodował, że Room zgłaszał błąd podczas używania w teście Robolectric. (f79bea, b/274924903)
Wersja 2.5.1
Wersja 2.5.1
22 marca 2023 r.
Zostanie wycofaneandroidx.room:room-*:2.5.1
Wersja 2.5.1 zawiera te zmiany.
Poprawki błędów
- Jeśli baza danych jest już otwarta, unikaj sprawdzania katalogu nadrzędnego bazy danych w
FrameworkSQLiteHelper
. (5de86b8) - Podczas sprawdzania, czy baza danych jest już otwarta, użyj znaku
isOpenInternal
. (e91fb35) - Ulepszona obsługa przypadku ponownego wejścia w
acquireTransactionThread()
funkcjiRoom
jest już dostępna. (219f98b). Podczas transakcji zawieszającej Room używa wątku z wykonawcy transakcji, uruchamia w nim pętlę zdarzeń i wysyła do niej zawieszające operacje na bazie danych, aby wszystkie były zamknięte w rutynie transakcji. Zwykle oczekuje się, że wątek transakcji różni się od wątku, który ją rozpoczął, ale w niektórych przypadkach są one takie same. Aby obsługiwać takie przypadki ponownego wejścia, usługawithTransaction()
została zmodyfikowana tak, aby nie polegała już na zadaniu kontrolnym. Zamiast tego będzie wykonywać blok transakcji wstrzymującej w ramach usługirunBlocking
w wątku transakcji.
Wersja 2.5.0
Wersja 2.5.0
22 lutego 2023 roku
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
są zwalniane. Wersja 2.5.0 zawiera te zmiany.
Wersja 2.5.0
11 stycznia 2023 r.
Zostanie wycofaneandroidx.room:room-*:2.5.0
Wersja 2.5.0 zawiera te zmiany.
Ważne zmiany od wersji 2.4.0
- Wszystkie źródła
room-runtime
zostały przekonwertowane z Javy na Kotlin. Pamiętaj, że jeśli Twój kod jest napisany w Kotlinie, możesz napotkać problemy ze zgodnością źródła z powodu konwersji biblioteki na Kotlin. Przykładem znanej zmiany powodującej niezgodność jest to, że wInvalidationTracker
musisz teraz zadeklarowaćonInvalidate()
wObserver
, aby mieć parametr typuSet
, a nieMutableSet
. Dodatkowo niektóre metody pobierające zostały przekształcone we właściwości wymagające w plikach Kotlin składni dostępu do właściwości. Jeśli wystąpią poważne problemy z niezgodnością, zgłoś błąd. - Dodano nową adnotację skrótu
@Upsert
, która próbuje wstawić encję, jeśli nie ma konfliktu niepowtarzalności, lub zaktualizować encję, jeśli taki konflikt występuje. (I7aaab, b/241964353) - Dodaliśmy nowe artefakty stronicowania pokoju
room-paging-rxjava2
,room-paging-rxjava3
iroom-paging-guava
, które są obsługiwane w stronicowaniu pokoju. - Dodano interfejsy API do podawania nazw tabel kluczy i wartości w celu jednoznacznego określenia w
@MapInfo
(Icc4b5).
Wersja 2.5.0-rc01
7 grudnia 2022 r.
Zostanie wycofaneandroidx.room:room-*:2.5.0-rc01
Wersja 2.5.0-rc01 zawiera te zmiany.
- Ta wersja jest identyczna z wersją
2.5.0-beta02
.
Wersja 2.5.0-beta02
9 listopada 2022 r.
Zostanie wycofaneandroidx.room:room-*:2.5.0-beta02
Wersja 2.5.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Naprawiono różne interfejsy API, które przyjmują argumenty zapytania z niezmienniczych (
Array<Any?>
) na kontrawariantne (Array<out Any?>
), aby dopasować je do zachowania tablic w języku Java. (b/253531073)
Wersja 2.5.0-beta01
5 października 2022 r.
Zostanie wycofaneandroidx.room:room-*:2.5.0-beta01
Wersja 2.5.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Ogranicz minimalną wersję obsługującą
@Upsert
do interfejsu API 16. Wynika to z niemożności wykrycia konfliktu ograniczenia klucza podstawowego w starszych interfejsach API. (I5f67f, b/243039555)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował nieprawidłowe eksportowanie tabel cieni do plików schematu
.json
, co powodowało ich uszkodzenie. (I4f83b, b/246751839)
Wersja 2.5.0-alpha03
24 sierpnia 2022 r.
Zostanie wycofaneandroidx.room:room-*:2.5.0-alpha03
Wersja 2.5.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Dodano nową adnotację skrótu
@Upsert
, która próbuje wstawić encję, jeśli nie ma konfliktu niepowtarzalności, lub zaktualizować encję, jeśli taki konflikt występuje. (I7aaab, b/241964353)
Poprawki błędów
- Podczas automatycznej migracji sprawdzającej ograniczenie klucza obcego biblioteka Room będzie teraz zgłaszać błąd
SQLiteConstraintException
zamiastIllegalStateException
. (I328dd) - Naprawianie niezgodnej zmiany w kodzie źródłowym Kotlin dla funkcji pobierającej lub właściwości
getOpenHelper
,getQueryExecutor
igetTransactionExecutor
. (Iad0ac)
Wersja 2.5.0-alpha02
1 czerwca 2022 r.
Zostanie wycofaneandroidx.room:room-*:2.5.0-alpha02
Wersja 2.5.0-alpha02 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy nowe artefakty
room-paging
:room-paging-rxjava2
,room-paging-rxjava3
iroom-paging-guava
, które obsługują stronicowanie pokoju.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)
Zmiany w interfejsie API
- Cały kod
room-runtime
został przekonwertowany z Javy na Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)Uwaga: ze względu na przekształcenie biblioteki w Kotlin możesz napotkać problemy z niezgodnością źródła. Jeśli kod był napisany w Kotlinie i wywoływał starą wersję Room, nowa wersja będzie musiała obsługiwać te przypadki. Przykładem znanej zmiany powodującej niezgodność jest to, że w
InvalidationTracker
musisz teraz zadeklarowaćonInvalidate()
wObserver
, aby mieć parametr typuSet
, a nieMutableSet
. - Dodano interfejsy API do podawania nazw tabel kluczy i wartości w celu jednoznacznego określenia w
@MapInfo
(Icc4b5). - Rozwiąż problem ze zgodnością źródła, aby ponownie zezwolić na używanie znaku
@Ignore
w metodach pobierających właściwości. (Ifc2fb)
Poprawki błędów
- Algorytm heurystyczny rozwiązywania problemu zduplikowanych kolumn. Room będzie teraz próbować rozwiązywać niejednoznaczne kolumny w zapytaniu multimap. Dzięki temu złączenia z tabelami zawierającymi tabele o tej samej nazwie mogą być prawidłowo mapowane na obiekt danych wynikowych. (I4b444, b/201306012, b/212279118)
Wersja 2.5.0-alpha01
23 lutego 2022 r.
Zostanie wycofaneandroidx.room:room-*:2.5.0-alpha01
Wersja 2.5.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Rozwiązaliśmy problem, który powodował, że w kodzie źródłowym w języku Kotlin nie było wymuszane używanie biblioteki Room
@IntDef
. (I75f41, b/217951311) - Rozwiązaliśmy problem ze zgodnością źródła, aby ponownie zezwolić na używanie znaku
@Query
w metodach pobierających właściwości. (I0a09b) - Przekonwertowano moduł room-common z Javy na Kotlin. (I69c48, b/206858235)
Uwaga: podczas konwersji biblioteki na język Kotlin możesz napotkać problemy z niezgodnością źródeł, ponieważ niektóre właściwości zostały przeniesione do obiektów towarzyszących. Jeśli kod był napisany w języku Kotlin i wywoływał starą wersję biblioteki Room, nowa wersja będzie wymagać sufiksu „.Companion” podczas uzyskiwania dostępu do tych właściwości.
- Przeniesiono migrację pokoi z Javy na Kotlin. (I2724b, b/206858622)
- Przekonwertowano
paging
powiązanych plików wroom-runtime
z Javy na Kotlin. (I82fc8, b/206859668) - Dodano interfejs API do blokowania i używania wielu procesów na poziomie FrameworkSQLite*, aby chronić tworzenie bazy danych po raz pierwszy i migracje w wielu procesach. (Ied267, b/193182592)
Poprawki błędów
- Dodaliśmy obsługę właściwości wewnętrznych w kodzie źródłowym w języku Kotlin.
Jest to niewielka zmiana w bibliotece Room, która będzie używać nazwy źródłowej funkcji podczas dopasowywania jej do właściwości jako getterów/setterów (wcześniej używała nazwy JVM funkcji, która jest inna w przypadku funkcji/właściwości wewnętrznych).
Jeśli używasz niestandardowych adnotacji
@JvmName
do dopasowywania metod pobierających i ustawiających 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
Zostanie wycofaneandroidx.room:room-*:2.4.3
Wersja 2.4.3 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że Room nie rozpoznawał funkcji zawieszających w Kotlinie 1.7 (b/236612358).
Wersja 2.4.2
Wersja 2.4.2
23 lutego 2022 r.
Zostanie wycofaneandroidx.room:room-*:2.4.2
Wersja 2.4.2 zawiera te zmiany.
Poprawki błędów
- Rozwiązano problem z generowaniem kodu dla funkcji zawieszania Dao
@Transaction
z treścią, która generuje domyślną metodę interfejsu z powodu kompilacji za pomocą-Xjvm-default=all
lub podobnego narzędzia. (Ia4ce5) - Rozwiązanie problemu, w którym biblioteka Room generuje kod dla metody zapytania o typ zwracany
Array<ByteArray>
. (If086e, b/213789489)
Wersja 2.4.1
Wersja 2.4.1
12 stycznia 2022 r.
Zostanie wycofaneandroidx.room:room-*:2.4.1
Wersja 2.4.1 zawiera te zmiany.
Poprawki błędów
- Dodaliśmy obsługę właściwości wewnętrznych w kodzie źródłowym w języku Kotlin.
Jest to niewielka zmiana w bibliotece Room, która będzie używać nazwy źródłowej funkcji podczas dopasowywania jej do właściwości jako getterów/setterów (wcześniej używała nazwy JVM funkcji, która jest inna w przypadku funkcji/właściwości wewnętrznych).
Jeśli używasz niestandardowych adnotacji
@JvmName
do dopasowywania metod pobierających i ustawiających 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
Zostanie wycofaneandroidx.room:room-*:2.4.0
Wersja 2.4.0 zawiera te zmiany.
Ważne zmiany od wersji 2.3.0
- Automatyczne migracje: Room udostępnia teraz interfejs API do automatycznego generowania migracji, o ile schematy są eksportowane. Aby poinformować bibliotekę Room, że ma wygenerować automatyczną migrację, można użyć nowej właściwości
@Database#autoMigrations
, aby zadeklarować wersje, z których i do których ma nastąpić automatyczna migracja. Jeśli biblioteka Room potrzebuje dodatkowych informacji o tabelach oraz zmianach nazw lub usuwaniu kolumn, adnotacja@AutoMigration
może zadeklarować klasę specyfikacji zawierającą takie dane wejściowe. Więcej informacji znajdziesz w@AutoMigration
dokumentacji. - Wstrzykiwanie zależności w automatycznych migracjach:
@ProvidedAutoMigrationSpec
to nowy interfejs API do deklarowania, żeAutoMigrationSpec
będzie dostarczany w czasie działania za pomocąRoomDatabase.Builder#addAutoMigrationSpec()
. Umożliwia to platformie wstrzykiwania zależności dostarczanie takich specyfikacji, gdy wymagają one złożonych zależności. - Obsługa automatycznych migracji w narzędziu Migration Test Helper: biblioteka Room w wersji
MigrationTestHelper
została zaktualizowana, aby obsługiwać automatyczne migracje. Wprowadziliśmy nowy interfejs API konstruktora, który otrzymuje klasę testowanej bazy danych. Dzięki temu narzędzie może automatycznie dodawać automatyczne migracje w ten sam sposób podczasrunMigrationsAndValidate
. - Obsługa biblioteki Room Paging:
androidx.room:room-paging
została udostępniona, zapewniając natywną obsługę biblioteki Paging 3.0 w przypadku zapytań Room zwracającychandroidx.paging.PagingSource
. - Metody zapytań relacyjnych: Room obsługuje teraz metody zwracające typy multimap
@Dao
, które są przydatne w przypadku instrukcji JOIN. Obsługiwane typy multimap toMap
,SparseArray
iLongSparseArray
, a takżeImmutableMap
,ImmutableSetMultimap
iImmutableListMultimap
z biblioteki Guava.
Wersja 2.4.0-rc01
1 grudnia 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.4.0-rc01
Wersja 2.4.0-rc01 zawiera te zmiany.
Nowe funkcje
- Zaktualizuj zależność Room od KSP do
1.6.0-1.0.1
, aby obsługiwać język Kotlin w wersji 1.6.
Wersja 2.4.0-beta02
17 listopada 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.4.0-beta02
Wersja 2.4.0-beta02 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy obsługę SparseArray i LongSparseArray w @MapInfo. (Ic91a2b/138910317)
Poprawki błędów
- Dodaliśmy nowy analizator TypeConverter, który uwzględnia informacje o możliwości przyjmowania wartości null w typach. Ponieważ te informacje są dostępne tylko w KSP, są domyślnie włączone tylko w tej usłudze. Jeśli powoduje to problemy, możesz wyłączyć tę funkcję, przekazując do procesora adnotacji wartość room.useNullAwareTypeAnalysis=false. Jeśli tak się stanie, zgłoś błąd, ponieważ ten tag zostanie w przyszłości usunięty. W przypadku tego nowego analizatora TypeConverter zalecamy podawanie tylko niepustych odbiorczych konwerterów typów, ponieważ nowy analizator może opakować je sprawdzaniem wartości null. Pamiętaj, że nie ma to wpływu na użytkowników, którzy używają KAPT lub Javy jako procesorów adnotacji (w przeciwieństwie do KSP), ponieważ nie mają informacji o możliwości przyjmowania wartości null w typach. (Ia88f9, b/193437407)
- Naprawiliśmy błąd, który powodował, że Room nie kompilował się z błędem SQL, gdy jednostka FTS zadeklarowana do używania tokenizera ICU. (I00db9, b/201753224)
- Rozwiązano problem z automatyczną migracją dotyczący nowej kolumny dodanej do osadzonego obiektu Entity między wersjami. (I5fcb1b/193798291)
- Rozwiązaliśmy problem dotyczący typów zwracanych przez metodę zapytań relacyjnych w zapytaniach LEFT JOIN. W przypadku tych zmian, gdy występuje mapowanie 1:wiele, kolekcja zwrócona dla klucza nie będzie zawierać nieprawidłowego obiektu wartości, jeśli nie zostanie on znaleziony w kursorze. Jeśli nie zostaną znalezione żadne prawidłowe wartości, klucz zostanie zmapowany na pustą kolekcję. (Id5552b/201946438)
- Rozwiązaliśmy problem z automatyczną migracją, w wyniku którego słowa kluczowe SQLite nie były zmieniane w nazwach kolumn. (Idbed4b/197133152)
Wersja 2.4.0-beta01
13 października 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.4.0-beta01
Wersja 2.4.0-beta01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że automatyczne migracje nie dodawały nowych kolumn, gdy inna tabela w tej samej automatycznej migracji również miała nową kolumnę o tej samej nazwie. (Ia5db5, b/200818663)
- Implementacja PagingSource wygenerowana przez bibliotekę room-paging używa teraz
queryExecutor
przekazywanego przezRoomDatabase.Builder
, więc można ją zastąpić, zamiastDispatchers.IO
jak wcześniej. (Iae259)
Wersja 2.4.0-alpha05
29 września 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.4.0-alpha05
Wersja 2.4.0-alpha05 zawiera te zmiany.
Nowe funkcje
- Dodano wbudowany konwerter typów dla UUID. (I671e8, b/73132006)
Zmiany w interfejsie API
Dodaliśmy do adnotacji TypeConverters nową właściwość, która umożliwia programistom wyłączanie wbudowanych konwerterów Enum i UUID. Domyślnie te konwertery są włączone, ale możesz je wyłączyć w określonym zakresie lub w całej bazie danych. Szczegóły znajdziesz w dokumentacji TypeConverters. (36ae9e, b/195413406)
Obsługa kluczy/wartości innych niż POJO w przypadku typów zwracanych Multimap w obiektach DAO za pomocą adnotacji
@MapInfo
. (I4d704)
@MapInfo
będzie wymagane, gdy kolumna klucza lub wartości mapy pochodzi z jednej kolumny. 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>
- Ustaw
room-paging
jako wymagany artefakt podczas korzystania z Paging3 z Room. (Ieaffe)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że wyniki zapytań dotyczących wielu map nie były prawidłowo uporządkowane, gdy zapytanie zawierało klauzulę ORDER BY kolumny z klucza mapy. (I6b887)
Wkład zewnętrzny
- Dodano nowy interfejs API do określania kolejności indeksu w @Index. Dziękujemy Nikicie Żelonkinowi. (I033fc)
Wersja 2.4.0-alpha04
21 lipca 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.4.0-alpha04
Wersja 2.4.0-alpha04 zawiera te zmiany.
Nowe funkcje
Room obsługuje teraz metody zwracające wiele map
@Dao
, które są przydatne w przypadku instrukcji JOIN. Obsługiwane typy multimap toMap
orazImmutableMap
,ImmutableSetMultimap
iImmutableListMultimap
z biblioteki Guava.Oto przykłady zapytań dotyczących wielu map:
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 wieloelementowa)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
Wynik multimapy może być też opakowany w obsługiwane asynchroniczne typy zwracane, takie jak
LiveData
,Observable
Rx lubFlow
korutyny.
Room-Paging
androidx.room:room-paging
, która zapewnia natywną obsługę biblioteki Paging 3.0 w przypadku zapytań Room zwracającychandroidx.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 bibliotekę Room implementacją opartą na interfejsach Paging 3.0 API. Nowa implementacja PagingSource analizuje klucze w inny sposób, więc każdy klucz dostarczony ręcznie do PagingSource w Room musi uwzględniać tę zmianę w działaniu, w tym initialKey przekazywany przez konstruktor Pager. Strony zaczną się wczytywać odKey
, a pierwszym wczytanym elementem będzieKey
. Odbiega to od dotychczasowego działania, w którymLoadParams.Refresh.Key
jest traktowany jako pozycja przewijania użytkownika, a elementy są wczytywane zarówno przed kluczem, jak i po nim.Artefakt jest opcjonalny, a rezygnacja z niego spowoduje powrót do dotychczasowej obsługi biblioteki Paging 3.0, która została wprowadzona w Room 2.3. W przyszłej wersji dla użytkowników korzystających z biblioteki Room z paginacją w wersji 3.0 ten artefakt stanie się jednak wymagany. Aby włączyć tę funkcję, dodaj nowy artefakt room-paging do ścieżki klasy. 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
- Rozwiązanie problemu z automatyczną migracją dotyczącego obsługi naruszeń klucza obcego. (b/190113935)
Wersja 2.4.0-alpha03
16 czerwca 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.4.0-alpha03
Wersja 2.4.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Zaktualizuj bibliotekę Room
MigrationTestHelper
, aby obsługiwała automatyczne migracje, udostępniając nowy interfejs API konstruktora, który otrzymuje testowaną klasę bazy danych. Dzięki temu narzędzie może automatycznie dodawać automatyczne migracje w ten sam sposób podczasrunMigrationsAndValidate
.
Poprawki błędów
Rozwiązaliśmy problem z natywną biblioteką SQLite w Roomie, aby obsługiwała ona chipy Apple M1. (b/174695268
Rozwiązaliśmy problem polegający na tym, że biblioteka Room nie zgłaszała błędu, gdy typem zwracanym funkcji @Transaction był Flow (I56ddd, b/190075899).
Rozwiązaliśmy problem z automatyczną migracją dotyczący indeksów. b/177673291
Aktualizacje zależności
- Obsługa kluczowych cech produktu w Roomie zależy teraz od kluczowych cech produktu
1.5.10-1.0.0-beta01
. (1ecb11, b/160322705)
Wersja 2.4.0-alpha02
5 maja 2021 roku
Zostanie wycofaneandroidx.room:room-*:2.4.0-alpha02
Wersja 2.4.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
@ProvidedAutoMigrationSpec
to nowy interfejs API do deklarowania, żeAutoMigrationSpec
będzie udostępniany w czasie działania za pomocąRoomDatabase.Builder#addAutoMigrationSpec()
. Umożliwia to platformie wstrzykiwania zależności dostarczanie takich specyfikacji, gdy wymagają one złożonych zależności.
Poprawki błędów
- Rozwiązaliśmy problem z automatyczną migracją, który powodował, że
@DatabaseView
nie były prawidłowo odtwarzane.
Wkład zewnętrzny
- Rozwiązaliśmy problem w
JournalMode.TRUNCATE
RoomieJournalMode.TRUNCATE
, który powodował, że wywołanie zwrotneInvalidationTracker
czasami było wywoływane nieprawidłowo, zbyt późno lub wcale. DziękiUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
Wersja 2.4.0-alpha01
21 kwietnia 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.4.0-alpha01
Wersja 2.4.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Automatyczne migracje: Room udostępnia teraz interfejs API do automatycznego generowania migracji, o ile schematy są eksportowane. Aby poinformować bibliotekę Room, że ma wygenerować automatyczną migrację, można użyć nowej właściwości
@Database#autoMigrations
, aby zadeklarować wersje, z których i do których ma nastąpić automatyczna migracja. Jeśli biblioteka Room potrzebuje dodatkowych informacji o tabelach oraz zmianach nazw lub usuwaniu 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
- Rozwiązaliśmy problem polegający na tym, że schemat Room nieprawidłowo weryfikował
defaultValue
z dodatkowymi nawiasami. b/182284899
Wersja 2.3.0
Wersja 2.3.0
21 kwietnia 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.3.0
Wersja 2.3.0 zawiera te zmiany.
Ważne zmiany od wersji 2.2.0
- Wbudowana obsługa wyliczeń: jeśli nie podasz konwertera typu, Room będzie domyślnie używać konwertera typu wyliczenie na ciąg znaków i odwrotnie. Jeśli konwerter typu dla wyliczenia już istnieje, Room będzie go używać w pierwszej kolejności.
- Wywołanie zwrotne zapytania: Room udostępnia teraz ogólny interfejs API wywołania zwrotnego RoomDatabase.QueryCallback, który jest wywoływany, gdy zapytania mają zostać wykonane. Może to być przydatne do logowania w wersjach debugowania. Wywołanie zwrotne można ustawić za pomocą
RoomDatabase.Builder#setQueryCallback()
. - Gotowe ulepszenie: Room ma teraz interfejsy API do tworzenia bazy danych przy użyciu gotowej bazy danych odczytanej ze strumienia wejściowego. Umożliwia to obsługę przypadków, w których wstępnie spakowana baza danych jest skompresowana za pomocą gzip.
- Dostarczone konwertery typów: Room ma teraz interfejsy API do dostarczania instancji konwerterów typów, dzięki czemu aplikacja może kontrolować ich inicjowanie. Aby oznaczyć konwerter typów, który będzie udostępniany Roomowi, użyj nowej adnotacji @ProvidedTypeConverter.
- Obsługa RxJava3: Room obsługuje teraz typy RxJava3. Podobnie jak w przypadku RxJava2 możesz deklarować metody DAO, których typem zwracanym są Flowable, Single, Maybe i Completable. Dodatkowo dostępny jest nowy artefakt
androidx.room:room-rxjava3
, który obsługuje RxJava3. - Obsługa biblioteki Paging 3.0: Room będzie teraz obsługiwać generowanie implementacji metod oznaczonych adnotacją
@Query
, których typem zwracanym jestandroidx.paging.PagingSource
.
Wersja 2.3.0-rc01
24 marca 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.3.0-rc01
Wersja 2.3.0-rc01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który uniemożliwiał wykorzystywanie w bloku zawieszającym
withTransaction
zapytań Coroutine Flow utworzonych przez Room. (I797bf)
Wersja 2.3.0-beta03
10 marca 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.3.0-beta03
Wersja 2.3.0-beta03 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy obsługę kompilacji przyrostowej w przypadku KSP. (I031c1, b/176453350)
Poprawki błędów
- Naprawiono błąd, który powodował, że tworzenie obiektu PagingSource w wątku głównym mogło wywołać błąd ANR. (I42b74, b/181221318)
- Zmieniono widoczność
@ExperimentalRoomApi
na publiczną zamiast prywatnej w pakiecie. (b/181356119)
Wkład zewnętrzny
- Umożliwia akceptowanie przez Room typu zwracanego POJO w metodzie DAO z adnotacją
@Query
, jeśli ma ona też adnotację@SkipQueryVerification
. Room postara się przekonwertować wynik zapytania na typ zwracany POJO w taki sam sposób, jak w przypadku metody DAO z adnotacją@RawQuery
. Dzięki „Markus Riegel | hey@marcorei.com”. (I45acb)
Wersja 2.3.0-beta02
18 lutego 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.3.0-beta02
Wersja 2.3.0-beta02 zawiera te zmiany.
Nowe funkcje
Room ma teraz eksperymentalną obsługę przetwarzania symboli w języku Kotlin KSP.
KSP zastępuje KAPT i umożliwia natywne uruchamianie procesorów adnotacji w kompilatorze Kotlin, co znacznie skraca czas kompilacji.
Aby używać biblioteki Room z KSP, możesz zastosować wtyczkę KSP Gradle i zastąpić konfigurację
kapt
w pliku kompilacji konfiguracjąksp
. 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.Pamiętaj, że KSP jest w fazie eksperymentalnej, więc w przypadku kodu produkcyjnego zalecamy używanie KAPT. Skrócenie czasu kompilacji jest możliwe tylko wtedy, gdy nie ma innych procesorów, które korzystają z KAPT. Znane problemy znajdziesz na stronie b/160322705.
Wersja 2.3.0-beta01
27 stycznia 2021 r.
Zostanie wycofaneandroidx.room:room-*:2.3.0-beta01
Wersja 2.3.0-beta01 zawiera te zmiany.
Nowe funkcje
- Automatyczne zamykanie baz danych: Room może teraz zamykać bazy danych, do których nie uzyskano dostępu przez określony czas. Jest to funkcja eksperymentalna, którą można włączyć, dzwoniąc pod numer
RoomDatabase.Builder#setAutoCloseTimeout()
. Ta funkcja jest przydatna w przypadku aplikacji z wieloma bazami danych.
Poprawki błędów
- Naprawiono problem, w którym metody Dao z wieloma metodami
@Update
lub@Delete
z różnymi strategiami rozwiązywania konfliktów generowały kod tylko z jedną ze strategii, ignorując zdefiniowaną. (/I0b90d, b/176138543)
Wersja 2.3.0-alpha04
16 grudnia 2020 roku
Zostanie wycofaneandroidx.room:room-*:2.3.0-alpha04
Wersja 2.3.0-alpha04 zawiera te zmiany.
Nowe funkcje
- Biblioteka Room udostępnia teraz ogólny interfejs API wywołania zwrotnego
RoomDatabase.QueryCallback
, który jest wywoływany, gdy zapytania mają zostać wykonane. Może to być przydatne do rejestrowania informacji w wersjach debugowania. Wywołanie zwrotne można ustawić za pomocąRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - Jeśli nie podasz konwertera typu, Room będzie domyślnie używać konwertera typu Enum na String i odwrotnie. Jeśli konwerter typu dla wyliczenia już istnieje, Room będzie go używać w pierwszej kolejności. (b/73132006)
Znany problem
- Jeśli dla wyliczenia istnieje już jednokierunkowy konwerter typu do odczytu, Room może przypadkowo użyć wbudowanego konwertera typu String na Enum, co może być niepożądane. Jest to znany problem, który można rozwiązać, tworząc konwerter dwukierunkowy. Zobacz: b/175707691
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że Room nieprawidłowo wyłączał przyrostowe przetwarzanie adnotacji w nowszych wersjach JDK. (b/171387388)
- Rozwiązaliśmy problem z biblioteką Room, która nie znajdowała wygenerowanej klasy, gdy używano wielu programów ładujących klasy. Dziękujemy za poprawkę „Serendipity | 892449346@qq.com”! (b/170141113)
- Rozwiązaliśmy problem, który powodował, że biblioteka Room generowała nieprawidłowy kod, gdy klasa Kotlin
@Dao
miała klasę bazową, której typy ogólne były typami prostymi w JVM. (b/160258066)
Wkład zewnętrzny
- Jeśli tryb WAL jest włączony, a interfejs API ma wartość 16 lub większą, Room będzie domyślnie używać
beginTransactionNonExclusive
. Dziękujemy „Ahmedowi I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)
Wersja 2.3.0-alpha03
14 października 2020 r.
Zostanie wycofaneandroidx.room:room-*:2.3.0-alpha03
Wersja 2.3.0-alpha03 zawiera te zmiany.
Nowe funkcje
Biblioteka Room ma teraz interfejsy API do udostępniania instancji konwerterów typów, dzięki czemu aplikacja może kontrolować ich inicjowanie. Aby oznaczyć konwerter typów, który będzie udostępniany Roomowi, użyj nowej adnotacji
@ProvidedTypeConverter
. Dziękujemy użytkownikowi „mzgreen yairobbe@gmail.com”. (Ie4fa5, b/121067210)Biblioteka Room ma teraz interfejsy API do tworzenia bazy danych przy użyciu gotowej bazy danych odczytanej ze strumienia wejściowego. Umożliwia to obsługę przypadków, w których wstępnie spakowana baza danych jest skompresowana za pomocą gzip. Podziękowania dla „Ahmed El-Helw ahmedre@gmail.com” (3e6792, b/146911060)
Zmiany w interfejsie API
Dodano brakujący cel do adnotacji
@ForeignKey
, co uniemożliwia jej używanie poza adnotacją@Entity
. (Iced1e)Pole
mCallbacks
w tabeliRoomDatabase.java
jest teraz ukryte. (d576cb, b/76109329)
Poprawki błędów
Aktualizacja dokumentacji TypeConverters, aby wyjaśnić, że TypeConverters można używać tylko do konwertowania kolumn lub pól, a nie wierszy. (I07c56, b/77307836)
Aktualizacja DaoProcessor w celu naprawienia błędu kompilatora w Dao z ogólnym typem nadrzędnym z „typami prostymi” w Kotlinie. (Ice6bb, b/160258066)
Aktualizacja dokumentacji metod dodawania i usuwania obserwatorów w celu wyjaśnienia kwestii związanych z wątkami (Ifd1d9, b/153948821)
Rozwiązaliśmy problem z nieprawidłowym sprawdzaniem przez bibliotekę Room tabel FTS, które deklarowały kolumnę rowid. (d62ebc, b/145858914)
Wkład zewnętrzny
Rozwiązanie problemów z wielkością liter w przypadku języka tureckiego (5746e3), b/68159494
Zastąp znak
ConcurrentHashMap
wRoomDatabase
znakiemCollections.synchronizedMap()
, aby uniknąć problemów na Androidzie Lollipop (d1cfc7, b/162431855).Dodaj wywołanie zwrotne onOpenPrepackagedDatabase, które będzie wywoływane po skopiowaniu wstępnie przygotowanej bazy danych. (I1ba74, b/148934423)
Wersja 2.3.0-alpha02
22 lipca 2020 r.
Zostanie wycofaneandroidx.room:room-*:2.3.0-alpha02
Wersja 2.3.0-alpha02 zawiera te zmiany.
Nowe funkcje
- Obsługa RxJava3: Room obsługuje teraz typy RxJava3. Podobnie jak w przypadku RxJava2 możesz deklarować metody DAO, których typem zwracanym są Flowable, Single, Maybe i Completable. Dodatkowo dostępny jest nowy artefakt
androidx.room:room-rxjava3
, który obsługuje RxJava3. (b/152427884)
Zmiany w interfejsie API
- Deklarowanie
@TypeConverter
w klasie obiektu Kotlin jest teraz obsługiwane. (b/151110764) Room
Opcja przyrostowego przetwarzania adnotacji jest teraz domyślnie WŁĄCZONA. (b/112110217)
Wersja 2.3.0-alpha01
10 czerwca 2020 r.
Zostanie wycofaneandroidx.room:room-*:2.3.0-alpha01
Wersja 2.3.0-alpha01 zawiera te zmiany.
Nowe funkcje
Obsługa biblioteki Paging 3.0: Room będzie teraz obsługiwać generowanie implementacji metod oznaczonych adnotacją
@Query
, których typem zwracanym jestandroidx.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 sprawia, że Room przepisuje projekcję „*” w zapytaniu w taki sposób, aby usunąć nieużywane kolumny w wyniku.- Opcja procesora
room.expandProjection
została wycofana. Użyj@RewriteQueriesToDropUnusedColumns
jako zamiennika zapytań optymalizujących pomieszczenia z projekcjami gwiazd. Pamiętaj, że@RewriteQueriesToDropUnusedColumns
nie zastępuje rozwiązania konfliktu kolumnroom.expandProjection
oferowanego w przypadku typów zwracanych, które zawierały pola@Embedded
.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że biblioteka Room nie wykrywała prawidłowo wersji JDK używanej do włączenia przyrostowego procesora adnotacji. Dziękujemy Blaz Solar (me@blaz.solar) (b/155215201)
- Biblioteka Room osadza teraz zależność ANTLR w procesorze 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
Zostanie wycofaneandroidx.room:room-*:2.2.6
Wersja 2.2.6 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że Room nieprawidłowo wyłączał przyrostowe przetwarzanie adnotacji w nowszych wersjach JDK. (b/171387388)
Wersja 2.2.5
Wersja 2.2.5
18 marca 2020 r.
Zostanie wycofaneandroidx.room:room-*:2.2.5
Wersja 2.2.5 zawiera te zmiany.
Poprawki błędów
- Ustaw wartość
MultiInstanceInvalidationService
dla parametru directBootAware. Dziękujemy użytkownikowi „Mygod contact-git@mygod.be” (b/148240967) - Naprawiliśmy błąd, który powodował awarię, gdy włączone było unieważnianie wielu instancji, a baza danych zawierała encję FTS. (b/148969394)
- Rozwiązaliśmy problem z wczytywaniem bibliotek natywnych SQLite w procesorze adnotacji Room, który powodował awarię kompilatora z powodu kompilacji równoległych. (b/146217083)
Wersja 2.2.4
Wersja 2.2.4
19 lutego 2020 r.
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 zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z zawieszaniem transakcji, które mogły ulec zakleszczeniu, jeśli korutyna została szybko anulowana przed rozpoczęciem transakcji. (b/148181325)
- Rozwiązaliśmy problem z nieprawidłowym użyciem adnotacji @Generated podczas kompilacji za pomocą JDK 9. (b/146538330)
- Rozwiązaliśmy problem, który powodował, że biblioteka Room generowała nieprawidłowy kod, gdy interfejs DAO w Kotlinie zawierał konkretną funkcję. (b/146825845)
Wersja 2.2.3
Wersja 2.2.3
18 grudnia 2019 r.
Zostanie wycofaneandroidx.room:room-*:2.2.3
Wersja 2.2.3 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że biblioteka Room nie mogła zweryfikować bazy danych, która nie przeszła żadnej migracji i zawierała w swoim schemacie starszy skrót z indeksami. (b/139306173)
Wersja 2.2.2
Wersja 2.2.2
20 listopada 2019 r.
Zostanie wycofaneandroidx.room:room-*:2.2.2
Wersja 2.2.2 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że w przypadku zbierania relacji jeden do jednego z ponad 999 wierszami biblioteka Room zwracała powiązane elementy o wartości null. (b/143105450)
Wersja 2.2.1
Wersja 2.2.1
23 października 2019 r.
Zostanie wycofaneandroidx.room:room-*:2.2.1
Wersja 2.2.1 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że biblioteka Room nieprawidłowo ostrzegała o
CURSOR_MISMATCH
, gdy opcja kompilatoraexpandProjection
była włączona. (b/140759491) - Dodaliśmy mechanizm ponawiania prób obsługi brakującej biblioteki natywnej używanej do weryfikowania zapytań w czasie kompilacji.
Wersja 2.2.0
Wersja 2.2.0
9 października 2019 r.
Zostanie wycofaneandroidx.room:room-*:2.2.0
Wersja 2.2.0 zawiera te zmiany.
Ważne zmiany od wersji 2.1.0
- Gotowa baza danych: w
RoomDatabase.Builder
dostępne są teraz 2 nowe interfejsy API, które umożliwiają tworzenieRoomDatabase
na podstawie wypełnionego pliku bazy danych.createFromAsset()
oznacza, że wstępnie wypełniony plik bazy danych znajduje się w folderze zasobów pliku APK, acreateFromFile()
oznacza, że plik znajduje się w dowolnej lokalizacji. Użycie tych interfejsów API zmienia zachowanie migracji destrukcyjnych w taki sposób, że podczas migracji powrotnej biblioteka Room próbuje ponownie skopiować wstępnie wypełnioną bazę danych, jeśli jest dostępna. W przeciwnym razie po prostu usuwa i ponownie tworzy 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 w razie potrzeby będą weryfikowane podczas migracji. b/64088772 - Relacje wiele do wielu:
@Relation
ma teraz nową właściwośćassociateBy
, która przyjmuje nową adnotację@Junction
, używaną do deklarowania relacji, która musi być spełniona za pomocą tabeli złączeń (znanej też jako tabela łączeń). b/69201917 - Relacje jeden do jednego: zniesiono ograniczenie dotyczące pól POJO oznaczonych adnotacją
@Relation
, które muszą być typuList
lubSet
. Umożliwia to reprezentowanie relacji z jedną wartością. b/62905145 - Target Entity: 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 DAO. Umożliwia to stosowanie w metodach DAO dowolnych obiektów POJO, które będą interpretowane jako częściowe encje. W praktyce umożliwia to częściowe wstawianie, usuwanie i aktualizowanie.b/127549506 - Coroutines Flow:
@Query
metody DAO mogą teraz zwracać typFlow<T>
. Zwrócony obiekt Flow ponownie wyemituje nowy zestaw wartości, jeśli tabele obserwowane w zapytaniu zostaną unieważnione. Zadeklarowanie funkcji DAO z typem zwracanymChannel<T>
jest błędem. Zamiast tego Room zaleca użycieFlow
, a następnie użycie sąsiednich funkcji do przekształceniaFlow
wChannel
. b/130428884 - Przyrostowy procesor adnotacji Gradle: Room jest teraz izolującym procesorem adnotacji Gradle, a przyrostowość można włączyć za pomocą opcji procesora
room.incremental
. Więcej informacji znajdziesz w sekcji Opcje kompilatora pomieszczeń. Jeśli napotkasz problemy, zgłoś błąd tutaj. W przyszłej wersji stabilnej planujemy domyślnie włączyć możliwość zwiększania wartości. b/112110217 - Rozszerzanie projekcji: dodaliśmy nową eksperymentalną opcję kompilatora
room.expandProjection
, która powoduje, że Room przepisuje zapytanie z projekcją gwiazdkową tak, aby zawierało tylko kolumny w zwracanym typie POJO. Na przykład w przypadku metody DAO z adnotacją@Query("SELECT * FROM Song")
, która zwraca obiekt POJO o nazwieSongIdAndTitle
z tylko 2 polami. Następnie Room przepisze zapytanie naSELECT id, title FROM Song
, tak aby pobrać minimalny zestaw kolumn wymaganych do spełnienia typu zwracanego. Eliminuje to ostrzeżenieCURSOR_MISMATCH
wyświetlane, 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.
Zostanie wycofaneandroidx.room:room:2.2.0-rc01
Listę zmian w tej wersji znajdziesz tutaj.
Brak publicznych zmian od pokoju 2.2.0-beta01
.
Wersja 2.2.0-beta01
22 sierpnia 2019 r.
Zostanie wycofaneandroidx.room:room-*:2.2.0-beta01
Listę zmian w tej wersji znajdziesz tutaj.
Poprawki błędów
- Rozwiązaliśmy błąd, który powodował, że zapytanie Coroutine Flow po pewnym czasie przestawało ponownie emitować nowe wartości. (b/139175786)
- Naprawiliśmy błąd, który powodował, że Room nie akceptował starszego kodu skrótu schematu podczas otwierania bazy danych, która nie była migrowana od czasu Room 1.0, co powodowało awarię w czasie działania z powodu nieprawidłowego schematu. (b/139306173)
Wersja 2.2.0-alpha02
7 sierpnia 2019 r.
Zostanie wycofaneandroidx.room:room-*:2.2.0-alpha02
Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- Coroutines Flow:
@Query
metody DAO mogą teraz zwracać typFlow<T>
. Zwrócony obiekt Flow ponownie wyemituje nowy zestaw wartości, jeśli tabele obserwowane w zapytaniu zostaną unieważnione. Zadeklarowanie funkcji DAO z typem zwracanymChannel<T>
jest błędem. Zamiast tego Room zaleca użycieFlow
, a następnie użycie sąsiednich funkcji do przekształceniaFlow
wChannel
. b/130428884 - Rozszerzanie projekcji: dodaliśmy nową eksperymentalną opcję kompilatora
room.expandProjection
, która powoduje, że Room przepisuje zapytanie z projekcją gwiazdkową tak, aby zawierało tylko kolumny w zwracanym typie POJO. Na przykład w przypadku metody DAO z adnotacją@Query("SELECT * FROM Song")
, która zwraca obiekt POJO o nazwieSongIdAndTitle
z tylko 2 polami. Następnie Room przepisze zapytanie naSELECT id, title FROM Song
, tak aby pobrać minimalny zestaw kolumn wymaganych do spełnienia typu zwracanego. Eliminuje to ostrzeżenieCURSOR_MISMATCH
wyświetlane, 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 destrukcyjnej migracji bazy danych przez Room. b/79962330
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że biblioteka Room generowała nieprawidłowy kod, używając metody jako ustawiającej wartość pola, gdy pole było chronione. b/136194628
- Usunięto błąd, który powodował, że w drugim procesie narzędzie InvalidationTracker zgłaszało wyjątek NPE, gdy włączone było unieważnianie w wielu instancjach, a usługa unieważniania została zamknięta. b/137454915
- Naprawiliśmy błąd polegający na tym, że biblioteka Room nieprawidłowo identyfikowała typ zwracany dziedziczonej funkcji zawieszania oznaczonej adnotacją
@RawQuery
. b/137878827 - Zaktualizowano wygenerowany kod dla
@Relation
, gdy powiązany klucz jest typu BLOB, aby używać porównywalnegoByteBuffer
. b/137881998 - Naprawiliśmy błąd, który powodował, że biblioteka Room zgłaszała brak setterów w obiektach POJO używanych jako parametry encji częściowych w przypadku adnotacji
@Insert
,@Update
i@Delete
. b/138664463 - Naprawiliśmy błąd, który powodował, że Room zgłaszał brak getterów i setterów dla zignorowanej kolumny za pomocą
@Entity
, gdy klasa encji była używana w określonych metodach DAO. b/138238182 - Naprawiliśmy błąd, który powodował, że Room nieprawidłowo konwertował nazwane argumenty powiązania na argumenty pozycyjne, co powodowało wyjątek w czasie działania podczas wykonywania zapytania z ponownie używanymi parametrami. b/137254857
Wersja 2.2.0-alpha01
10 lipca 2019 r.
Nowe funkcje
- Gotowa baza danych: w
RoomDatabase.Builder
dostępne są teraz 2 nowe interfejsy API, które umożliwiają tworzenieRoomDatabase
na podstawie wypełnionego pliku bazy danych.createFromAsset()
oznacza, że wstępnie wypełniony plik bazy danych znajduje się w folderze zasobów pliku APK, acreateFromFile()
oznacza, że plik znajduje się w dowolnej lokalizacji. Użycie tych interfejsów API zmienia zachowanie migracji destrukcyjnych w taki sposób, że podczas migracji powrotnej biblioteka Room próbuje ponownie skopiować wstępnie wypełnioną bazę danych, jeśli jest dostępna. W przeciwnym razie po prostu usuwa i ponownie tworzy 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 w razie potrzeby będą weryfikowane podczas migracji. b/64088772Uwaga: jeśli schemat bazy danych ma już wartości domyślne, np. dodane za pomocą
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, a zdecydujesz się zdefiniować wartości domyślne za pomocą@ColumnInfo
w tych samych kolumnach, może być konieczne przeprowadzenie migracji w celu zweryfikowania nieujętych wartości domyślnych. Więcej informacji znajdziesz w artykule Migracje pokoi. - Relacje wiele do wielu:
@Relation
ma teraz nową właściwośćassociateBy
, która przyjmuje nową adnotację@Junction
, używaną do deklarowania relacji, która musi być spełniona za pomocą tabeli złączeń (znanej też jako tabela łączeń). b/69201917 - Relacje jeden do jednego: zniesiono ograniczenie dotyczące pól POJO oznaczonych adnotacją
@Relation
, które muszą być typuList
lubSet
. Umożliwia to reprezentowanie relacji z jedną wartością. b/62905145 - Target Entity: 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 DAO. Umożliwia to stosowanie w metodach DAO dowolnych obiektów POJO, które będą interpretowane jako częściowe encje. W praktyce umożliwia to częściowe wstawianie, usuwanie i aktualizowanie.b/127549506 - Przyrostowy procesor adnotacji Gradle: Room jest teraz izolującym procesorem adnotacji Gradle, a przyrostowość można włączyć za pomocą opcji procesora
room.incremental
. Więcej informacji znajdziesz w sekcji Opcje kompilatora pomieszczeń. Jeśli napotkasz problemy, zgłoś błąd tutaj. W przyszłej wersji stabilnej planujemy domyślnie włączyć możliwość zwiększania wartości. b/112110217
Poprawki błędów
- Room nie będzie już przekazywać
EmptySetResultException
do globalnego modułu obsługi błędów, gdy strumień Rx zapytania zostanie usunięty przed zakończeniem zapytania. b/130257475 - Naprawiliśmy błąd, który powodował, że Room wyświetlał nieprawidłowy komunikat o błędzie, gdy funkcja DAO zawieszania oznaczona adnotacją
@RawQuery
nie miała typu zwracanego. b/134303897 - Room nie będzie już generować adapterów DAO z typami surowymi. b/135747255
Wersja 2.1.0
Wersja 2.1.0
13 czerwca 2019 r.
Wersja Room 2.1.0 została opublikowana bez zmian w stosunku do wersji 2.1.0-rc01
. Listę zatwierdzeń uwzględnionych w wersji znajdziesz tutaj.
Ważne zmiany od wersji 2.0.0
- FTS: Room obsługuje teraz encje z tabelą mapowania FTS3 lub FTS4. Klasy oznaczone symbolem
@Entity
można teraz dodatkowo oznaczyć symbolem@Fts3
lub@Fts4
, aby zadeklarować klasę z tabelą wyszukiwania pełnotekstowego mapowania. Opcje FTS do dalszego dostosowywania są dostępne w metodach adnotacji. - Widoki: Room obsługuje teraz deklarowanie klasy jako zapisanego zapytania, zwanego też widokiem, za pomocą adnotacji
@DatabaseView
. - Korutyny: metody DAO mogą teraz być funkcjami zawieszania. Aby korzystać z tej funkcji, dodaj
room-ktx
do zależności. Artefakt ktx udostępnia też funkcję rozszerzeniaRoomDatabase.withTransaction
do przeprowadzania transakcji w bazie danych w ramach korutyny. - Auto Value: Room obsługuje teraz deklarowanie klas z adnotacją AutoValue jako encji i POJO. Adnotacje Room
@PrimaryKey
,@ColumnInfo
,@Embedded
i@Relation
można teraz deklarować w metodach abstrakcyjnych klasy z adnotacją @AutoValue. Pamiętaj, że te adnotacje muszą być też poprzedzone znakiem@CopyAnnotations
, aby Room mógł je prawidłowo interpretować. - Dodatkowa obsługa asynchroniczna: metody DAO oznaczone adnotacjami
@Insert
,@Delete
lub@Update
, a także@Query
zawierające instrukcjeINSERT
,DELETE
lubUPDATE
, obsługują teraz typy zwracane RxCompletable
,Single
,Maybe
i typ zwracany GuavyListenableFuture
. Mogą też być funkcjami zawieszania. enableMultiInstanceInvalidation
to nowy interfejs API wRoomDatabase.Builder
, który umożliwia unieważnianie w wielu instancjach klasy RoomDatabase przy użyciu tego samego pliku bazy danych.fallbackToDestructiveMigrationOnDowngrade
to nowy interfejs API wRoomDatabase.Builder
, który automatycznie odtwarza bazę danych w przypadku obniżenia wersji.ignoredColumns
to nowy interfejs API w adnotacji@Entity
, który umożliwia wyświetlanie listy ignorowanych pól według nazwy.- Room będzie teraz prawidłowo używać głównego konstruktora Kotlin w klasach danych, dzięki czemu nie trzeba będzie deklarować właściwości jako
vars
.
Wersja 2.1.0-rc01
29 maja 2019 r.
Poprawki błędów
- Rozwiązaliśmy błąd inicjowania pokoju, który mógł występować z powodu już skonfigurowanego tymczasowego magazynu. b/132602198
- Naprawiono ostrzeżenie o użyciu podwójnego cudzysłowu w przypadku użytkowników SQLite w wersji 3.27.0 i nowszej. b/131712640
- Naprawiliśmy błąd, który powodował awarię klasy InvalidationTracker, gdy równolegle wykonywano wiele sprawdzeń unieważnienia. b/133457594
Wersja 2.1.0-beta01
7 maja 2019 r.
androidx.room 2.1.0-beta01
została wydana bez zmian w porównaniu z wersją 2.1.0-alpha07. Listę zmian w tej wersji znajdziesz tutaj.
Wersja 2.1.0-alpha07
25 kwietnia 2019 r.
Zmiany w interfejsie API i zachowaniu
- Funkcja rozszerzenia
RoomDatabase.withTransaction
została zmieniona tak, aby nie przyjmowała już bloku funkcji zCoroutineScope
jako odbiorcą. Zapobiega to pomijaniu dodatkowego elementu opakowującegocoroutineScope { }
, który jest wymagany do równoczesnego uruchamiania elementów w bloku transakcji.
Poprawki błędów
- Naprawiono błąd, w którym biblioteka Room nie mogła dopasować elementu TypeConverter do funkcji Kotlin DAO zawierającej parametr typu Collection.b/122066791
Wersja 2.1.0-alpha06
22 marca 2019 r.
Zmiany w interfejsie API i zachowaniu
- Zapytania o transakcje asynchroniczne są teraz serializowane, dzięki czemu Room nie używa więcej niż 1 wątku do wykonywania transakcji w bazie danych.
Dodano parametr
RoomDatabase.Builder.setTransactionExecutor(Executor)
, aby umożliwić skonfigurowanie wykonawcy, który ma być używany w przypadku transakcji. RoomDatabase.runInTransaction(Callable)
nie będzie już opakowywać sprawdzonych wyjątków w wyjątki RuntimeException.b/128623748
Poprawki błędów
- Naprawiono błąd, w którym moduł śledzenia unieważnienia przestawał obserwować tabelę treści, jeśli dodano obserwatorów zarówno tabeli treści, jak i zewnętrznej tabeli treści FTS. b/128508917
- Zaktualizowano
Room
gramatykę SQLite, aby była zgodna z SQLite 3.24.0. b/110883668
Wersja 2.1.0-alpha05
13 marca 2019 r.
Nowe funkcje
- Funkcja rozszerzenia
RoomDatabase.withTransaction
umożliwia bezpieczne wykonywanie transakcji w bazie danych w ramach korutyny. Funkcje rozszerzeń pokoju wraz z obsługą korutyn są dostępne w artefakcieroom-ktx
. - Metody DAO niebędące abstrakcyjnymi, które są oznaczone adnotacją
@Transaction
, mogą teraz być funkcjami zawieszania. b/120241587
Zmiany w interfejsie API i zachowaniu
- Artefakt
room-coroutines
został zmieniony naroom-ktx
, aby jego nazwa była zgodna z nazwami innych artefaktów androidx. beginTransaction
,setTransactionSuccessful
iendTransaction
wRoomDatabase
zostały wycofane na rzeczrunInTransaction
i funkcji rozszerzeniaroom-ktx
–withTransaction
.
Poprawki błędów
- Rozwiązaliśmy błąd, który powodował, że argumenty tokenizera były pomijane, jeśli używany był tokenizator SIMPLE. b/125427014
- Naprawiono błąd, w wyniku którego biblioteka Room nie rozpoznawała prawidłowo funkcji zawieszających z parametrami, których typem była klasa wewnętrzna. b/123767877
- Naprawiliśmy błąd, który powodował, że odroczona metoda
@Query
DAO z instrukcjamiINSERT
,UPDATE
lubDELETE
przedwcześnie przygotowywała zapytanie w głównym wątku. b/123695593 - Naprawiono różne błędy, w których biblioteka Room generowała nieprawidłowy kod dla niektórych funkcji zawieszania. b/123466702 i b/123457323
- Naprawiliśmy błąd, który powodował, że w wygenerowanym kodzie nie były prawidłowo pomijane przestarzałe metody. b/117602586
- Zaktualizowano zależność Room od androidx.sqlite do wersji 1.0.2, która zawiera poprawki dotyczące prawidłowej obsługi uszkodzonych baz danych. b/124476912
Znane problemy
- Biblioteka Room w wersji 2.1.0-alpha05 zależy od artefaktu
kotlinx-metadata-jvm
, który nie jest obecnie dostępny w Maven Central (KT-27991). Zależność tę można rozwiązać, dodającmaven { url "https://kotlin.bintray.com/kotlinx/" }
do repozytoriów projektu.
Wersja 2.1.0-alpha04
25 stycznia 2019 r.
Nowe funkcje
- Metody DAO z adnotacją
@Query
zawierające instrukcjeINSERT
,UPDATE
lubDELETE
mogą teraz zwracać typy asynchroniczneSingle
,Mayble
,Completable
iListenableFuture
. Mogą to być też funkcje zawieszające. b/120227284
Zmiany w interfejsie API i zachowaniu
- Room będzie teraz zgłaszać błąd, jeśli nieabstrakcyjna metoda DAO z adnotacją
@Transaction
zwraca typ asynchroniczny, taki jakSingle
,Mayble
,Completable
,LiveData
lubListenableFuture
. Ponieważ transakcje są ograniczone do wątku, Room nie może rozpocząć ani zakończyć transakcji wokół funkcji, która może wykonywać zapytania w różnych wątkach. b/120109336 OnConflictStrategy.FAIL
iOnConflictStrategy.ROLLBACK
są@Deprecated
, ponieważ nie działają zgodnie z oczekiwaniami w przypadku obecnych powiązań SQLite w Androidzie. b/117266738
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że Room nie używał prawidłowo TypeConverter typu zwracanego, jeśli metoda DAO była funkcją zawieszającą. b/122988159
- Usunęliśmy błąd, który powodował, że Room nieprawidłowo identyfikował odziedziczone funkcje zawieszania jako niezawieszające. b/122902595
- Naprawiliśmy błąd, który powodował, że Room generował 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ł zakleszczenie bazy danych podczas wywoływania funkcji zawieszania DAO między
beginTransaction()
aendTransaction()
. b/120854786
Wersja 2.1.0-alpha03
4 grudnia 2018 r.
Zmiany w interfejsie API
- Funkcja FTS
tokenizer
w@Fts3
/@Fts4
przyjmuje teraz ciąg znaków zamiast wyliczenia. Umożliwia to korzystanie z niestandardowych tokenizatorów w Roomie. Wbudowane tokenizatory są nadal zdefiniowane wFtsOptions
jako stałe ciągi znaków. b/119234881
Nowe funkcje
- Korutyny: metody DAO mogą teraz być funkcjami zawieszania. Aby obsługiwać funkcje zawieszania w Room, udostępniliśmy nowy artefakt:
room-coroutines
. b/69474692 - Metody DAO z adnotacjami
@Insert
,@Delete
lub@Update
obsługują terazListenableFuture
jako typ zwracany. b/119418331
Poprawki błędów
- Naprawiliśmy błąd, w którym Room nieprawidłowo próbował znaleźć konstruktor z kolumnami we właściwości
ignoredColumns
klasy@Entity
. b/119830714 - Naprawiliśmy błąd, który powodował, że Room nie oznaczał parametrów metody DAO jako finalnych w wygenerowanej implementacji. b/118015483
- Rozwiązaliśmy problem, który powodował awarię procesora
Room
podczas zgłaszania błędu w zapytaniu zawierającym symbole specjalne. b/119520136 - Naprawiliśmy błąd, który powodował, że Room odrzucał różne implementacje
Collection
jako argumenty wyrażeniaIN
. b/119884035 - Naprawiliśmy błąd, który powodował, że obiekt LiveData zwracany przez Room był usuwany z pamięci, gdy był obserwowany bezterminowo, co uniemożliwiało mu emitowanie nowych danych. b/74477406
- Zaktualizowano blokadę zamknięcia
RoomDatabase
, aby zmniejszyć rywalizację o blokadę. b/117900450
Wersja 2.1.0-alpha02
30 października 2018 r.
Nowe funkcje
- Dodaliśmy obsługę odwoływania się do elementu
@DatabaseView
w elemencie@Relation
. b/117680932
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że biblioteka Room wykonywała operacje wejścia/wyjścia na dysku w wątku głównym podczas subskrybowania i zwalniania typu zwracanego Rx. b/117201279
- Naprawiliśmy błąd polegający na tym, że biblioteka Room nie mogła znaleźć odpowiedniego konwertera typu dla pola w klasie Kotlin. b/111404868
- Rozwiązaliśmy problem, w którym biblioteka Room generowała nieprawidłowy kod dla implementacji interfejsu
DAO
zawierającej domyślną metodę Kotlin bez argumentów. b/117527454 - Zaktualizowano
Room
parser gramatyki SQLite, co rozwiązuje problem z wydajnością, który powodował długi czas kompilacji. b/117401230
Wersja 2.1.0-alpha01
8 października 2018 r.
Nowe funkcje
- FTS: Room obsługuje teraz encje z tabelą mapowania FTS3 lub FTS4. Klasy oznaczone symbolem
@Entity
można teraz dodatkowo oznaczyć symbolem@Fts3
lub@Fts4
, aby zadeklarować klasę z tabelą mapowania wyszukiwania pełnotekstowego. Opcje FTS umożliwiające dalsze dostosowywanie są dostępne w metodach adnotacji. b/62356416 - Widoki: Room obsługuje teraz deklarowanie klasy jako zapisanego zapytania, czyli widoku, za pomocą adnotacji @DatabaseView. b/67033276
- AutoValue: Room obsługuje teraz deklarowanie klas z adnotacją AutoValue jako encji i POJO. Adnotacje Room
@PrimaryKey
,@ColumnInfo
,@Embedded
i@Relation
można teraz deklarować w metodach abstrakcyjnych klasy z adnotacją @AutoValue. Pamiętaj, że te adnotacje muszą być też uzupełnione o parametr@CopyAnnotations
, aby Room mógł je prawidłowo interpretować. b/62408420 - Obsługa dodatkowych typów zwracanych wartości Rx: metody DAO oznaczone adnotacjami
@Insert
,@Delete
lub@Update
obsługują teraz typy zwracanych wartości RxCompletable
,Single<T>
iMaybe<T>
. b/63317956 - Typy niezmienne z
@Relation
: wcześniej biblioteka Room wymagała, aby pola z adnotacją@Relation
były ustawialne, ale teraz mogą to być parametry konstruktora. enableMultiInstanceInvalidation
: nowy interfejs API wRoomDatabase.Builder
, który umożliwia unieważnianie w wielu instancjach klasy RoomDatabase przy użyciu tego samego pliku bazy danych. Ten mechanizm unieważniania wielu instancji działa też w przypadku wielu procesów. b/62334005fallbackToDestructiveMigrationOnDowngrade
: nowy interfejs API wRoomDatabase.Builder
, który automatycznie odtwarza bazę danych w przypadku obniżenia wersji. b/110416954ignoredColumns
: to nowy interfejs API w adnotacji@Entity
, który umożliwia wyświetlanie listy zignorowanych pól według nazwy. Przydatne do ignorowania odziedziczonych pól w elemencie. b/63522075
Zmiany w interfejsie API i zachowaniu
mCallback
imDatabase
wRoomDatabase
są teraz@Deprecated
i zostaną usunięte w następnej głównej wersji biblioteki Room. b/76109329
Poprawki błędów
- Rozwiązaliśmy 2 problemy, które powodowały, że Room nie mógł się prawidłowo odzyskać po uszkodzeniu bazy danych lub nieudanej migracji podczas inicjowania. b/111504749 i b/111519144
- Room będzie teraz prawidłowo używać głównego konstruktora Kotlin w klasach danych, dzięki czemu nie trzeba będzie deklarować pól jako
vars
. b/105769985
Wersja 2.0.0
Wersja 2.0.0
1 października 2018 r.
androidx.room 2.0.0
została wydana bez zmian w porównaniu z wersją 2.0.0-rc01.
Wersja 2.0.0-rc01
20 września 2018 r.
androidx.room 2.0.0-rc01
została wydana bez zmian w stosunku do wersji 2.0.0-beta01.
Wersja 2.0.0-beta01
2 lipca 2018 r.
Zmiany w interfejsie API i zachowaniu
- Dodano
RoomDatabase.Builder.setQueryExecutor()
, aby umożliwić dostosowywanie miejsc, w których są uruchamiane zapytania - Dodano obsługę RxJava2
Observable
- Wygenerowane implementacje DAO i bazy danych są teraz ostateczne
Poprawki błędów
- Określanie nazwy klasy lub pola w komunikacie o błędzie „nie można znaleźć metody pobierającej dla pola” b/73334503
- Naprawiono zgodność wsteczną klasy RoomOpenHelper ze starszymi wersjami biblioteki Room b/110197391
Zależności sprzed AndroidaX
W przypadku wersji Room sprzed Androida X uwzględnij 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.
Sala 1.1.1
jest identyczna z salą 1.1.1-rc1
.
Wersja 1.1.1-rc1
16 maja 2018 r.
Jeśli używasz migracji, zdecydowanie zalecamy używanie biblioteki Room 1.1.1-rc1
zamiast 1.1.0
.
Usunęliśmy błąd, który powodował, że Room nieprawidłowo obsługiwał inicjalizację po migracji b/79362399
Wersja 1.1.0
Wersja 1.1.0-beta3
19 kwietnia 2018 r.
Poprawki błędów
- Naprawiono błąd kompilacji, który występował, gdy obiekt POJO w języku Kotlin odwoływał się do elementu relacji zdefiniowanego w języku Java b/78199923
Wersja 1.1.0-beta2
5 kwietnia 2018 r.
Poprawki błędów
Naprawiono krytyczny błąd w implementacjach
Room
RxSingle
iMaybe
, który powodował przedwczesne ponowne wykorzystanie zapytania, co stwarzało problemy, jeśli do zwróconych instancjiSingle
lubMaybe
dodano więcej niż 1 obserwatora. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] nie
VACUUM
bazy danych, jeśli jest wywoływana w transakcji. b/77235565
Wersja 1.1.0-beta1
21 marca 2018 r.
Zmiany w interfejsie API
- Na podstawie opinii o interfejsie API usługa
@RawQuery
nie akceptuje już przekazywania parametru zapytaniaString
. Musisz użyć [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (Aby łatwo utworzyć instancję [SupportSQLiteQuery][ref-SupportSQLiteQuery] z obsługą argumentów, zobacz [SimpleSQLiteQuery][ref-SimpleSQLiteQuery]). - Metoda [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] klasy RoomDatabase.Builder akceptuje teraz wartość
vararg int
zamiastvararg Integer
.
Poprawki błędów
- [RoomDatabase.clearAllTables][ref-clearAllTables] próbuje teraz zwrócić miejsce do systemu operacyjnego, ustawiając punkt kontrolny WAL i
VACUUM
bazę danych. - [
@RawQuery
][ref-RawQuery] akceptuje teraz dowolny obiekt Pojo w przypadku właściwościobservedEntities
, o ile odwołuje się on do co najmniej 1 encji za pomocą pólEmbedded
lubRelation
. b/74041772 - Stronicowanie: implementacja DataSource w bibliotece Room prawidłowo obsługuje teraz zależności między wieloma tabelami (np. relacje i złączenia). Wcześniej nie powodowały one wyświetlania nowych wyników lub nie można było ich skompilować. b/74128314
Wersja 1.1.0-alpha1
22 stycznia 2018 r.
Nowe funkcje
RawQuery
: ten nowy interfejs API umożliwia metodom@Dao
otrzymywanie SQL jako parametru zapytania b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: ten nowy interfejs API wRoomDatabase.Builder
umożliwia bardziej precyzyjne określanie, od których wersji schematu początkowego można przeprowadzać migracje destrukcyjne (w porównaniu z fallbackToDestructiveMigration). b/64989640- Biblioteka Room obsługuje teraz tylko nowsze interfejsy Paging API (wersja alfa 4 lub nowsza), a nie obsługuje już wycofanych interfejsów
LivePagedListProvider
. Aby korzystać z nowej wersji alfa pokoju, musisz używać pagingualpha-4
lub nowszego i przełączyć się zLivePagedListProvider
naLivePagedListBuilder
, jeśli jeszcze tego nie zrobisz.
Poprawki błędów
- Ulepszona obsługa typów Kapt w języku Kotlin. b/69164099
- Kolejność pól nie unieważnia już schematu. b/64290754