Room

Biblioteka trwałości pomieszczenia udostępnia warstwę abstrakcji zamiast SQLite, która zapewnia bardziej solidny dostęp do bazy danych przy jednoczesnym wykorzystaniu wszystkich możliwości SQLite.
Najnowsza aktualizacja Wersja stabilna Kandydat do publikacji Wersja Beta Wersja alfa
29 listopada 2023 r. 2.6.1 - - -

Deklarowanie zależności

Aby dodać zależność od sali, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.

Zależności dotyczące sal obejmują migracje do pokoi testowych i funkcję RxJava

W pliku build.gradle aplikacji lub modułu dodaj zależności artefaktów, których potrzebujesz:

Odlotowy

dependencies {
    def room_version = "2.6.1"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // To use Kotlin annotation processing tool (kapt)
    kapt "androidx.room:room-compiler:$room_version"
    // To use Kotlin Symbol Processing (KSP)
    ksp "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

Kotlin

dependencies {
    val room_version = "2.6.1"

    implementation("androidx.room:room-runtime:$room_version")
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // To use Kotlin annotation processing tool (kapt)
    kapt("androidx.room:room-compiler:$room_version")
    // To use Kotlin Symbol Processing (KSP)
    ksp("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Więcej informacji o korzystaniu z wtyczki KAPT znajdziesz w dokumentacji KAPT.

Informacje o korzystaniu z wtyczki KSP znajdziesz w krótkiej dokumentacji KSP.

Informacje o korzystaniu z rozszerzeń Kotlin znajdziesz w dokumentacji ktx.

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opcjonalnie w przypadku bibliotek innych niż Android (np. modułów Gradle w języku Java lub Kotlin) możesz korzystać z adnotacji dotyczących sal na platformie androidx.room:room-common.

Konfigurowanie opcji kompilatora

W przypadku sali dostępne są poniższe opcje procesora adnotacji.

room.schemaLocation directory
Umożliwia eksportowanie schematów baz danych do plików JSON w danym katalogu. Więcej informacji znajdziesz w artykule Migracje sal.
room.incremental boolean
Włącza przyrostowy procesor adnotacji w adnotacjach Gradle. Wartość domyślna to true.
room.generateKotlin boolean
Wygeneruj pliki źródłowe Kotlin zamiast Javy. Wymaga KSP. Wartość domyślna to false. Więcej informacji znajdziesz w uwagach do wersji 2.6.0.

Korzystanie z wtyczki Room Gradle

W przypadku Room w wersji 2.6.0 lub nowszej możesz używać wtyczki Room Gradle do konfigurowania opcji kompilatora Room. Wtyczka konfiguruje projekt w taki sposób, aby generowane schematy (które są danymi wyjściowymi zadań kompilacji i są wykorzystywane na potrzeby automatycznej migracji) są prawidłowo skonfigurowane pod kątem możliwości odtwarzania i buforowania.

Aby dodać wtyczkę, w pliku kompilacji najwyższego poziomu Gradle zdefiniuj wtyczkę i jej wersję.

Odlotowy

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

W pliku kompilacji Gradle na poziomie modułu zastosuj wtyczkę i użyj rozszerzenia room.

Odlotowy

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Kotlin

plugins {
    id("androidx.room")
}

android {
    ...
    room {
        schemaDirectory("$projectDir/schemas")
    }
}

Ustawienie schemaDirectory jest wymagane, gdy używasz wtyczki Room Gradle. Spowoduje to skonfigurowanie kompilatora Room, różnych zadań kompilacji oraz backendów (javac, KAPT, KSP), tak aby wyprowadzały pliki schematów do folderów o różnej tematyce, na przykład schemas/flavorOneDebug/com.package.MyDatabase/1.json. Musisz je sprawdzić w repozytorium, aby użyć ich do weryfikacji i automatycznej migracji.

Niektórych opcji nie można skonfigurować we wszystkich wersjach wtyczki Room Gradle, choć są one obsługiwane przez kompilator Room. W tabeli poniżej znajdziesz wszystkie opcje oraz wersję wtyczki Room Gradle, która obsługuje jej konfigurację za pomocą rozszerzenia room. Jeśli wersja jest niższa lub ta opcja nie jest jeszcze obsługiwana, możesz zamiast niej użyć opcji procesora adnotacji.

Opcja Od wersji
room.schemaLocation (pole wymagane) 2.6.0
room.incremental -
room.generateKotlin -

Korzystanie z opcji procesora adnotacji

Jeśli nie korzystasz z wtyczki Room Gradle lub jeśli wybrana opcja nie jest obsługiwana przez Twoją wersję wtyczki, możesz skonfigurować pokój za pomocą opcji procesora adnotacji. Instrukcje znajdziesz w sekcji Dodawanie zależności kompilacji. Sposób określania opcji adnotacji zależy od tego, czy dla sal używasz KSP czy KAPT.

Odlotowy

// For KSP
ksp {
    arg("option_name", "option_value")
    // other otions...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "option_name":"option_value",
                    // other options...
                    ]
            }
        }
    }
}

Kotlin

// For KSP
ksp {
    arg("option_name", "option_value")
    // other options...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "option_name" to "option_value",
                    // other options...
                )
            }
        }
    }
}

Ponieważ room.schemaLocation jest katalogiem, a nie typem podstawowym, podczas dodawania tej opcji należy użyć CommandLineArgumentsProvider, aby Gradle dowiedziała się o tym katalogu podczas przeprowadzania aktualnych kontroli. Opcja Migruj bazę danych sal pokazuje pełną implementację obiektu CommandLineArgumentsProvider, która zawiera lokalizację schematu.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.

Utwórz nowy numer

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 2.6

Wersja 2.6.1

29 listopada 2023 r.

Aplikacja androidx.room:room-*:2.6.1 została zwolniona. Wersja 2.6.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem w wygenerowanym kodzie, w którym domyślna wartość podwójnych kolumn w EntityCursorConverter była ustawiona na 0 zamiast 0,0. Uwzględniliśmy też możliwą poprawkę dotyczącą podobnego rozmiaru liter w kolumnach typu liczba zmiennoprzecinkowa. (Id75f5, b/304584179)
  • Wyjątki zgłoszone z wczytań typu PagingSource będą teraz rozpowszechnione jako LoadStateUpdate z LoadResult.Error zawierających element Throwable. Ten stan błędu można zaobserwować w PagingDataAdapter.loadStateFlow(Views) lub LazyPagingItems.loadState(Compose). Zwróć uwagę, że jest to zmiana w zachowaniu, przy czym wcześniejsze błędy wczytywania będą przechwytywać jako wyjątek zgłoszony przez metodę dao, która spowodowała wczytanie. (I93887, b/302708983)

Wersja 2.6.0

18 października 2023 r.

Aplikacja androidx.room:room-*:2.6.0 została zwolniona. Wersja 2.6.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.5.0

  • Opcja włączenia generowania kodu Kotlin (lub „Kotlin CodeGen”) jest teraz dostępna w usłudze Room KSP. (4297ec0). Aby włączyć Kotlin CodeGen w pokoju, dodaj nazwę opcji room.generateKotlin do opcji procesora dla KSP. Więcej informacji o przekazywaniu opcji dotyczących podmiotu przetwarzającego w przypadku KSP znajdziesz w dokumentacji KSP.

Uwaga: jeśli używasz narzędzia Kotlin CodeGen, pamiętaj, że zostały dodane dodatkowe ograniczenia. Właściwości abstrakcyjne jako metody pobierania danych DAO lub zapytania DAO w Kotlin CodeGen są niedozwolone i powinny być przepisane jako funkcje, aby uniknąć błędnego założenia, że wartość właściwości jest stała i ma ustalony wynik. Kolejnym ograniczeniem jest to, że typy zwrotów kolekcji z wartością null nie są już dozwolone w Room for Kotlin CodeGen.

Ostrzeżenie: możesz zauważyć, że Twoje projekty są bardziej rygorystyczne pod względem wartości null podczas korzystania z Kotlin CodeGen. W narzędziu Kotlin CodeGen wartość null argumentów typu jest ważna, ale w Javie jest ona zazwyczaj ignorowana. Załóżmy na przykład, że masz zwracany typ „Flow<foo\>”, a tabela jest pusta. W Java CodeGen nie spowoduje to żadnych problemów, ale w narzędziu Kotlin CodeGen pojawi się błąd. Aby tego uniknąć, musisz użyć metody „Flow<foo?\>” przy założeniu, że emitowana jest wartość null. </foo?\></foo\>

  • Nowy artefakt wtyczki Room Gradle został dodany do pokoju o identyfikatorze androidx.room. Rozwiązuje on istniejące problemy dotyczące pokoju związane z danymi wejściowymi i danymi wyjściowymi schematów za pomocą opcji procesora adnotacji Gradle. Więcej informacji znajdziesz w informacjach o wersji sali 2.6.0-alfa02.
  • W przypadku KSP obsługiwane są teraz klasy wartości w elementach dotyczących sal. (4194095)
  • Typy zwracanych map zagnieżdżonych w funkcjach DAO są teraz obsługiwane w sekcji Pokój. (I13f48, 203008711)

Wersja 2.6.0-rc01

20 września 2023 r.

Aplikacja androidx.room:room-*:2.6.0-rc01 została zwolniona. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.

Wersja 2.6.0-beta01

23 sierpnia 2023 r.

Aplikacja androidx.room:room-*:2.6.0-beta01 została zwolniona. Wersja 2.6.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Obsługiwanie wyjątku SQLite w przypadku specjalnego przypadku, który wystąpił podczas upserta, gdy wyjątek 2067 SQLITE_CONSTRAINT_UNIQUE zostanie wywołany podczas upserta, powinien wykonać aktualizację przez upsert. (If2849, b/243039555)

Wersja 2.6.0-alfa03

9 sierpnia 2023 r.

Aplikacja androidx.room:room-*:2.6.0-alpha03 została zwolniona. Wersja 2.6.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • Typy zwracanych map zagnieżdżonych w funkcjach DAO są teraz obsługiwane w sekcji Pokój. (I13f48, 203008711)

Zmiany w interfejsie API

  • Utworzono nową adnotację typu o nazwie @MapColumn, która zastąpiła adnotację @MapInfo, która została już wycofana. W przypadku każdej nazwy kolumny (keyColumnName, valueColumnName lub obu) podanej w adnotacji @MapInfo musisz zadeklarować adnotację @MapColumn tylko z columnName i użyć adnotacji dla określonego argumentu typu, do którego się on odwołuje (klucz lub wartość mapy), w zwracanym typie funkcji DAO. Dzieje się tak, ponieważ adnotacja @MapColumn jest używana bezpośrednio w argumentu typu w obrębie zwracanego typu funkcji DAO, a nie w samej funkcji, takiej jak @MapInfo. Więcej informacji znajdziesz w dokumentacji @MapColumn. (Ib0305, b/203008711)
  • Zaktualizowano pliki interfejsu API, aby dodać adnotacje do pomijania zgodności (I8e87a, b/287516207)
  • Interfejsy API wtyczki Room Gradle zostały zaktualizowane, aby nie zawsze wymagały konfiguracji poszczególnych wariantów. Oznacza to, że wtyczka może akceptować globalną lokalizację dla wszystkich wariantów bez tworzenia wielu katalogów. Umożliwia to płynniejszą migrację, ale jest też wystarczająco elastyczna, aby ręcznie konfigurować smaki lub schematy typów kompilacji, a jednocześnie zachować zalety wtyczki (kompilacje możliwe do odtworzenia i zapisywane w pamięci podręcznej). (I09d6f, b/278266663)

Poprawki błędów

  • Usunięto lukę w zabezpieczeniach potencjalnej wycieku pamięci w QueryInterceptorStatement. (I193d1).
  • Naprawiono nieprawidłowe działanie funkcji QueryInterceptorDatabase execSQL(). (Iefdc8)

Wersja 2.6.0-alfa02

21 czerwca 2023 r.

Aplikacja androidx.room:room-*:2.6.0-alpha02 została zwolniona. Wersja 2.6.0-alpha02 zawiera te zatwierdzenia.

Wtyczka Room Gradle

Ta nowa wersja zawiera nowy artefakt wtyczki Room Gradle o identyfikatorze androidx.room, który rozwiązuje różne problemy z funkcją Room dotyczące danych wejściowych i wyjściowych schematów za pomocą opcji procesora adnotacji Gradle. Wtyczka Room Gradle konfiguruje projekt w taki sposób, aby generowały schematy wykorzystywane podczas automatycznej migracji i wyniki zadań kompilacji, które są prawidłowo skonfigurowane pod kątem możliwości odtwarzania i buforowania. Wtyczka udostępnia DSL do skonfigurowania lokalizacji schematu podstawowego:

room {
    schemaDirectory("$projectDir/schemas/")
}

Wtyczka skonfiguruje kompilator Room, różne zadania kompilacji i jego backendy (javac, KAPT, KSP), aby umieszczały pliki schematu w folderach ze schematami, np. schemas/flavorOneDebug/com.package.MyDatabase/1.json. Tak jak zwykle pliki te są rejestrowane w repozytorium w celu użycia ich do weryfikacji i automatycznej migracji. Po przejściu na korzystanie z wtyczki zamiast opcji procesora adnotacji istniejące pliki schematów muszą zostać skopiowane do wygenerowanych katalogów rodzajów danych utworzonych przez wtyczkę. Jest to jednorazowa migracja, którą należy wykonać ręcznie. Dokumentacja schematu na developers.android.com zostanie w przyszłości zaktualizowana, gdy rozwiążemy problem, a wtyczka będzie stabilna, więc warto spróbować.

Zmiany w interfejsie API

  • Interfejs RoomDatabase.QueryCallback został zdefiniowany jako działający interfejs umożliwiający wykorzystanie konwersji SAM. (Iab8ea, b/281008549)

Poprawki błędów

  • Rozwiązywanie problemów powstałych podczas tworzenia instancji bazy danych w Robolectric po migracji źródeł Room z Javy do Kotlin. (Ic053c, b/274924903)

Wersja 2.6.0-alfa01

22 marca 2023 r.

Aplikacja androidx.room:room-*:2.6.0-alpha01 została zwolniona. Wersja 2.6.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • Obsługa klas wysokiej jakości w sali dla KSP. Pokój może teraz obsługiwać klasy wartości w elementach. (4194095)
  • Generowanie kodu Kotlin(lub „Kotlin CodeGen”) można teraz włączyć w pokoju (4297ec0). Aby włączyć Kotlin CodeGen w pokoju, dodaj nazwę opcji room.generateKotlin do opcji procesora dla KSP. Więcej informacji o przekazywaniu opcji dotyczących podmiotu przetwarzającego w przypadku KSP znajdziesz w dokumentacji KSP.

Uwaga: jeśli używasz narzędzia Kotlin CodeGen, pamiętaj, że zostały dodane dodatkowe ograniczenia. Właściwości abstrakcyjne jako metody pobierania danych DAO lub zapytania DAO w Kotlin CodeGen są niedozwolone i powinny być przepisane jako funkcje, aby uniknąć błędnego założenia, że wartość właściwości jest stała i ma ustalony wynik. Kolejnym ograniczeniem jest to, że typy zwrotów kolekcji z wartością null nie są już dozwolone w Room for Kotlin CodeGen.

Ostrzeżenie: możesz zauważyć, że Twoje projekty są bardziej rygorystyczne pod względem wartości null podczas korzystania z Kotlin CodeGen. W narzędziu Kotlin CodeGen wartość null argumentów typu jest ważna, ale w Javie jest ona zazwyczaj ignorowana. Załóżmy na przykład, że masz zwracany typ „Flow<foo\>”, a tabela jest pusta. W Java CodeGen nie spowoduje to żadnych problemów, ale w narzędziu Kotlin CodeGen pojawi się błąd. Aby tego uniknąć, musisz użyć metody „Flow<foo?\>” przy założeniu, że emitowana jest wartość null. </foo?\></foo\>

Zmiany w interfejsie API

  • Ochrona przed niesensownym wykorzystaniem zbiorów z wartością null w typach zwracanych metod DAO. (I777dc, b/253271782, b/259426907)
  • Dodaj interfejs API do tworzenia przepływu, który generuje zmiany w module śledzenia unieważnień. Interfejs API przydaje się do tworzenia strumieni, które muszą reagować na zmiany w bazie danych. (I8c790, b/252899305)

Poprawki błędów

  • Nie zezwalaj na właściwości abstrakcyjne jako metody pobierania DAO lub zapytania DAO w programie Codegen Kotlin. Zamiast tego należy je przepisać jako funkcje, aby uniknąć błędnego zakładania, że wartość właściwości jest stała i ma ustalony wynik przechowywany. (If6a13, b/127483380, b/257967987)

Wersja 2.5.2

Wersja 2.5.2

21 czerwca 2023 r.

Aplikacja androidx.room:room-*:2.5.2 została zwolniona. Wersja 2.5.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązano problem ze zgodnością pliku kotlinx-metadata-jvm. (386d5c)
  • Napraw błąd, który powoduje, że funkcja Room zgłasza błąd podczas użycia w teście Robolectric. (f79bea, b/274924903)

Wersja 2.5.1

Wersja 2.5.1

22 marca 2023 r.

Aplikacja androidx.room:room-*:2.5.1 została zwolniona. Wersja 2.5.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Nie sprawdzaj katalogu nadrzędnego bazy danych w FrameworkSQLiteHelper, jeśli baza danych jest już otwarta. (5de86b8)
  • Użyj testu isOpenInternal, aby sprawdzić, czy baza danych jest już otwarta. (E91fb35)
  • Dostępna jest teraz lepsza obsługa zgłoszeń zgłaszanych w pokoju acquireTransactionThread(). (219f98b). Podczas zawieszania transakcji Room używa wątku od wykonawcy transakcji, uruchamia w niej pętlę zdarzeń i wysyła do niej zawieszanie operacji na bazie danych, aby wszystkie te działania były wewnątrz koordynacji transakcji. Zazwyczaj wątek transakcji jest inny niż ten, w którym rozpoczęła się transakcja, ale w niektórych przypadkach są one takie same. Na potrzeby obsługi takich przypadków rezonatora withTransaction() został zmodyfikowany tak, aby nie wymagał już zadania kontrolnego. Zamiast tego wykonuje blok zawieszający transakcji z elementu runBlocking w wątku transakcji.

Wersja 2.5.0

Wersja 2.5.0

22 lutego 2023 roku

Opublikowano androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 i androidx.room:room-paging-rxjava3:2.5.0. Wersja 2.5.0 zawiera te zatwierdzenia.

Wersja 2.5.0

11 stycznia 2023 r.

Aplikacja androidx.room:room-*:2.5.0 została zwolniona. Wersja 2.5.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.4.0

  • Wszystkie źródła room-runtime zostały przekonwertowane z języka Java na Kotlin. Jeśli Twój kod znajduje się w kotlinie, mogą wystąpić problemy ze zgodnością źródła z powodu konwersji biblioteki na Kotlin. Na przykład znana zmiana niekompatybilna ze źródłem polega na tym, że w InvalidationTracker musisz teraz zadeklarować onInvalidate() w polu Observer, aby mieć parametr typu Set, a nie MutableSet. Ponadto niektóre metody getter zostały przekonwertowane na właściwości wymagające składni dostępu do właściwości w plikach Kotlin. Jeśli wystąpią poważne niezgodności, zgłoś błąd.
  • Dodaliśmy nową adnotację skrótu @Upsert, która próbuje wstawić encję w przypadku braku konfliktu unikalności lub zaktualizować element w przypadku konfliktu. (I7aaab, b/241964353)
  • Dodaliśmy nowe artefakty stronicowania pokoju room-paging-rxjava2, room-paging-rxjava3 i room-paging-guava, aby zapewnić pomoc na potrzeby strony w pokojach.
  • Dodano interfejsy API do określania nazw tabel kluczy i wartości w celu ich ujednoznacznienia w języku @MapInfo (Icc4b5).

Wersja 2.5.0-rc01

7 grudnia 2022 r.

Aplikacja androidx.room:room-*:2.5.0-rc01 została zwolniona. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.

  • Ta wersja jest taka sama jak 2.5.0-beta02.

Wersja 2.5.0-beta02

9 listopada 2022 r.

Aplikacja androidx.room:room-*:2.5.0-beta02 została zwolniona. Wersja 2.5.0-beta02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Poprawiono różne interfejsy API, które przyjmują argumenty zapytania z argumentu niezmiennego (Array<Any?>) do kontrawariancji (Array<out Any?>), aby dopasować działanie tablicy w Javie. (b/253531073)

Wersja 2.5.0-beta01

5 października 2022 r.

Aplikacja androidx.room:room-*:2.5.0-beta01 została zwolniona. Wersja 2.5.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Ogranicz minimalną wersję obsługującą @Upsert do interfejsu API 16. Wynika to z braku możliwości określenia tożsamości w przypadku konfliktu z ograniczeniem klucza głównego w starszych interfejsach API. (I5f67f, b/243039555)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że tabele cieni były nieprawidłowo wyeksportowane do plików .json schematu, co powodowało ich uszkodzenie. (I4f83b, b/246751839)

Wersja 2.5.0-alfa03

24 sierpnia 2022 r.

Aplikacja androidx.room:room-*:2.5.0-alpha03 została zwolniona. Wersja 2.5.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaliśmy nową adnotację skrótu @Upsert, która próbuje wstawić encję w przypadku braku konfliktu unikalności lub zaktualizować element w przypadku konfliktu. (I7aaab, b/241964353)

Poprawki błędów

  • Podczas sprawdzania ograniczenia klucza obcego poddanego automatycznej migracji pokój będzie teraz zgłaszać żądanie SQLiteConstraintException zamiast IllegalStateException. (I328dd)
  • Popraw niezgodną zmianę źródła Kotlin dla metod pobierania / właściwości getOpenHelper, getQueryExecutor i getTransactionExecutor. (Iad0ac)

Wersja 2.5.0-alfa02

1 czerwca 2022 r.

Aplikacja androidx.room:room-*:2.5.0-alpha02 została zwolniona. Wersja 2.5.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

Zmiany w interfejsie API

  • Cała domena room-runtime została przekonwertowana z Javy na Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, ﮯb/2

    Uwaga: mogą występować problemy ze zgodnością źródła z powodu konwersji biblioteki na Kotlin. Jeśli Twój kod był w kotlin i dzwonił do starej wersji Room, nowa wersja będzie musiała obsługiwać takie przypadki. Na przykład znana zmiana niekompatybilna ze źródłem polega na tym, że w InvalidationTracker musisz teraz zadeklarować onInvalidate() w polu Observer, aby mieć parametr typu Set, a nie MutableSet.

  • Dodano interfejsy API do określania nazw tabel kluczy i wartości w celu ich ujednoznacznienia w języku @MapInfo (Icc4b5).
  • Rozwiąż problem ze zgodnością źródła, aby ponownie zezwolić na @Ignore w metodach pobierania usług. (Ifc2fb)

Poprawki błędów

  • Zduplikowany algorytm heurystyczny rozstrzygania kolumn. Pokój będzie teraz próbować rozwiązać niejednoznaczne kolumny w zapytaniu z wieloma mapami. Dzięki temu polecenia JOIN z tabelami zawierającymi tabele o tej samej nazwie mogą być prawidłowo zmapowane na obiekt danych wyników. (I4b444, b/201306012, b/212279118)

Wersja 2.5.0-alfa01

23 lutego 2022 r.

Aplikacja androidx.room:room-*:2.5.0-alpha01 została zwolniona. Wersja 2.5.0-alpha01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Rozwiązaliśmy problem, który powodował, że użycie sali @IntDef nie było egzekwowane w źródłach Kotlin. (I75f41, b/217951311)
  • Rozwiązaliśmy problem ze zgodnością źródła, który powodował ponowne zezwalanie na @Query w metodach pobierania usług. (I0a09b)
  • Przekonwertowano zasób typu Common z Javy na Kotlin. (I69c48, b/206858235)

    Uwaga: mogą wystąpić problemy ze zgodnością źródła, ponieważ niektóre usługi zostały przeniesione do obiektów towarzyszących podczas konwersji biblioteki do usługi Kotlin. Jeśli Twój kod był w kotlin i używał starej wersji Room, nowa wersja będzie potrzebować sufiksu „.Companion” w celu uzyskania dostępu do tych właściwości.

  • Przekonwertowano migrację sal z Javy do Kotlin. (I2724b, b/206858622)
  • Przekonwertowano paging powiązanych plików w programie room-runtime z języka Java na Kotlin. (I82fc8, b/206859668)
  • Dodano interfejs API do blokowania wielu procesów i używania na poziomie FrameworkSQLite*, aby chronić tworzenie i migracje baz danych w wielu procesach po raz pierwszy. (Ied267, b/193182592)

Poprawki błędów

  • Dodano obsługę właściwości wewnętrznych w źródłach Kotlin. Jest to drobna zmiana sposobu działania funkcji Room, w której używa się nazwy źródłowej funkcji, a jednocześnie dopasowuje je do właściwości w postaci pobierających/seterów (wcześniej korzystała z nazwy JVM funkcji, która różni się w przypadku funkcji/właściwości wewnętrznych). Jeśli używasz niestandardowych adnotacji @JvmName do dopasowywania metod pobierania i seterów do właściwości prywatnych, po aktualizacji dokładnie sprawdź wygenerowany kod (If6531, b/205289020)

Wersja 2.4.3

Wersja 2.4.3

27 lipca 2022 roku

Aplikacja androidx.room:room-*:2.4.3 została zwolniona. Wersja 2.4.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd, który powodował, że aplikacja Room nie rozpoznaje funkcji zawieszania w Kotlin w wersji 1.7 (b/236612358).

Wersja 2.4.2

Wersja 2.4.2

23 lutego 2022 r.

Aplikacja androidx.room:room-*:2.4.2 została zwolniona. Wersja 2.4.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawianie problemu z generowaniem kodu dla funkcji zawieszania @Transaction Dao z treścią, która generuje domyślną metodę interfejsu w związku z kompilacją za pomocą metody -Xjvm-default=all lub jej odpowiednika. (Ia4ce5)
  • Naprawianie błędu polegającego na tym, że sala generuje kod dla metody zapytania typu Array<ByteArray> zwracającego typ. (If086e, b/213789489)

Wersja 2.4.1

Wersja 2.4.1

12 stycznia 2022 r.

Aplikacja androidx.room:room-*:2.4.1 została zwolniona. Wersja 2.4.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Dodano obsługę właściwości wewnętrznych w źródłach Kotlin. Jest to drobna zmiana sposobu działania funkcji Room, w której używa się nazwy źródłowej funkcji, a jednocześnie dopasowuje je do właściwości w postaci pobierających/seterów (wcześniej korzystała z nazwy JVM funkcji, która różni się w przypadku funkcji/właściwości wewnętrznych). Jeśli używasz niestandardowych adnotacji @JvmName do dopasowywania metod pobierania i seterów do właściwości prywatnych, po aktualizacji dokładnie sprawdź wygenerowany kod (If6531, b/205289020)

Wersja 2.4.0

Wersja 2.4.0

15 grudnia 2021 roku

Aplikacja androidx.room:room-*:2.4.0 została zwolniona. Wersja 2.4.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.3.0

  • Automatyczne migracje: sala udostępnia teraz interfejs API do automatycznego generowania migracji, o ile są eksportowane schematy. Aby poinformować usługę, że sala powinna wygenerować automatyczną migrację, można zadeklarować wersje, z których i do których chcesz przenieść nową usługę @Database#autoMigrations. Gdy sala potrzebuje dodatkowych informacji o zmianach nazw lub usunięcia tabel i kolumn, adnotacja @AutoMigration może zadeklarować klasę specyfikacji zawierającą takie dane wejściowe. Więcej informacji znajdziesz w dokumentacji @AutoMigration.
  • Wstrzykiwanie zależności w automatycznych migracji: @ProvidedAutoMigrationSpec to nowy interfejs API do deklarowania, że AutoMigrationSpec będzie dostarczany w czasie działania przez RoomDatabase.Builder#addAutoMigrationSpec(). Dzięki temu platforma wstrzykiwania zależności może udostępniać te specyfikacje, gdy potrzebne są złożone zależności.
  • Pomoc pomocnicza podczas testów migracji automatycznych migracji: interfejs MigrationTestHelper sali został zaktualizowany w celu obsługi automatycznej migracji przez udostępnienie nowego interfejsu API konstruktora, który otrzymuje testowaną klasę bazy danych. Dzięki temu pomocnik może automatycznie dodać migracje automatyczne w ten sam sposób podczas runMigrationsAndValidate.
  • Obsługa stron w pokoju: udostępniliśmy pakiet androidx.room:room-paging, który zapewnia natywny poziom obsługi stron w wersji 3.0 w przypadku zapytań dotyczących sal zwracających wartość androidx.paging.PagingSource.
  • Relacyjne metody zapytań: pokój obsługuje teraz metody zwracania typu @Dao wielu map, przydatne w przypadku instrukcji JOIN. Obsługiwane typy map multi to Map, SparseArray, LongSparseArray oraz ImmutableMap, ImmutableSetMultimap i ImmutableListMultimap Guawy.

Wersja 2.4.0-rc01

Grudzień 1, 2021

Aplikacja androidx.room:room-*:2.4.0-rc01 została zwolniona. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.

Nowe funkcje

  • Zaktualizuj zależność pokoju od KSP do 1.6.0-1.0.1, aby zapewnić obsługę Kotlin 1.6

Wersja 2.4.0-beta02

17 listopada 2021 r.

Aplikacja androidx.room:room-*:2.4.0-beta02 została zwolniona. Wersja 2.4.0-beta02 zawiera te zatwierdzenia.

Nowe funkcje

Poprawki błędów

  • Dodaliśmy nowy analizator TypeConverter, który uwzględnia informacje o nullingu w typach. Te informacje są dostępne tylko w KSP, więc są domyślnie włączone tylko w KSP. Jeśli powodują jakiekolwiek problemy, możesz je wyłączyć, przekazując do podmiotu przetwarzającego adnotacje room.useNullAwareTypeAnalysis=false. Jeśli tak się stanie, zgłoś błąd w pliku, ponieważ w przyszłości ta flaga zostanie usunięta. W nowym analizatorze TypeConverter sugeruje się udostępnianie tylko nienull odbierających typów konwersji, ponieważ nowy analizator może zakończyć je testem o wartości null. Pamiętaj, że nie ma to wpływu na użytkowników używających KAPT lub Javy jako procesorów adnotacji (w przeciwieństwie do KSP) nie ma informacji o dopuszczalności w typach. (Ia88f9, b/193437407)
  • Naprawa błędu, który powodował, że aplikacja Room nie kompilowała się z błędem SQL, gdy jednostka FTS zadeklarowała, że korzysta z tokenizatora ICU. (I00db9, b/201753224)
  • Rozwiązaliśmy problem dotyczący automatycznych migracji, który dotyczył dodania nowej kolumny do umieszczonego elementu między wersjami. (I5fcb1b/193798291)
  • Rozwiązaliśmy problem dotyczący zwracanych typów zapytań relacyjnych w zapytaniach LEFT JOIN. Dzięki tym zmianom, jeśli obecne jest mapowanie 1-wiele, zbiór zwrócony dla klucza nie będzie zawierał nieprawidłowego obiektu wartości, jeśli nie znajdzie się on w kursorze. Jeśli nie zostaną znalezione żadne prawidłowe wartości, klucz zostanie zmapowany na pusty zbiór. (Id5552b/201946438).
  • Rozwiązaliśmy problem z automatyczną migracją, gdy nie udało się zmienić znaczenia słów kluczowych SQLite w nazwach kolumn. (Idbed4b/197133152).

Wersja 2.4.0-beta01

13 października 2021 r.

Aplikacja androidx.room:room-*:2.4.0-beta01 została zwolniona. Wersja 2.4.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że w przypadku automatycznej migracji nie dodano nowych kolumn, gdy inna tabela w tej samej automatycznej migracji miała też nową kolumnę o tej samej nazwie. (Ia5db5, b/200818663)
  • Implementacja PagingSource wygenerowana przez stronicowanie pokoju korzysta teraz z queryExecutor przekazywanego przez RoomDatabase.Builder, więc można go zastąpić zamiast Dispatchers.IO wcześniej. (Iae259)

Wersja 2.4.0-alfa05

29 września 2021 r.

Aplikacja androidx.room:room-*:2.4.0-alpha05 została zwolniona. Wersja 2.4.0-alpha05 zawiera te zatwierdzenia.

Nowe funkcje

Zmiany w interfejsie API

  • Dodaliśmy nową właściwość do adnotacji TypeConverters, aby umożliwić programistom wyłączenie wbudowanych konwerterów Enum i UUID. Domyślnie te konwertery są włączone, ale możesz je wyłączyć na określonym zakresie lub w całej bazie danych. Szczegółowe informacje znajdziesz w dokumentacji TypeConverters. (36ae9e, b/195413406)

  • Obsługa par klucz-wartość niepochodzących od POJO w przypadku typów zwrotów obejmujących wiele map w DAO za pomocą adnotacji @MapInfo. (I4d704)

Wartość @MapInfo będzie wymagana, gdy klucz lub kolumna wartości na mapie zawiera jedną kolumnę. Zobacz przykład:

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • Jeśli używasz strony Paging3 z pomieszczeniem, ustaw room-paging jako wymagany artefakt. (Ieaffe)

Poprawki błędów

  • Rozwiązano problem, który powodował, że wyniki zapytań z wieloma mapami nie były poprawnie uporządkowane, gdy zapytanie zawierało klauzulę ORDER BY kolumny z klucza mapy. (I6b887)

Wkład z zewnątrz

  • Dodano nowy interfejs API do określania kolejności indeksu w indeksie @Index. Dziękujemy Nikity Zhelonkin. (I033fc)

Wersja 2.4.0-alfa04

21 lipca 2021 r.

Aplikacja androidx.room:room-*:2.4.0-alpha04 została zwolniona. Wersja 2.4.0-alpha04 zawiera te zatwierdzenia.

Nowe funkcje

  • Room obsługuje teraz metody zwracania wielu typów map @Dao, co jest przydatne w przypadku instrukcji JOIN. Obsługiwane typy map multi to Map oraz ImmutableMap, ImmutableSetMultimap i ImmutableListMultimap Guawy.

    Oto przykłady zapytań z wieloma mapami:

    Mapa relacji jeden do jednego

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    Mapa relacji jeden do wielu (standardowa mapa wielu map)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    Wynik z wieloma mapami może być też podany w obsługiwanych asynchronicznych typach zwracanych typów, takich jak LiveData, Observable Rx lub Flow.

Podział na pokoje

  • Udostępniamy androidx.room:room-paging, która zapewnia natywną obsługę Stron 3.0 w przypadku zapytań dotyczących sal zwracających wartość androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • Ten artefakt zastępuje implementację androidx.paging.PagingSource wygenerowaną przez Room usługą utworzoną na podstawie interfejsów API Paging 3.0. Nowa implementacja PagingSource analizuje klucze w inny sposób, dlatego każdy klucz przesłany ręcznie do klasy PagingSource w salach musi uwzględniać tę zmianę działania, w tym klucz startowy przekazany przez konstruktor Pager. Zaczniemy ładować strony z Key, gdzie Key będzie pierwszym wczytywanym elementem. Odbiega to od obecnego działania, w którym element LoadParams.Refresh.Key jest traktowany jako pozycja przewijania, a elementy są ładowane zarówno przed kluczem, jak i po nim.

  • Artefakt jest opcjonalny, a rezygnacja spowoduje przywrócenie dotychczasowej obsługi strony 3.0, która została wprowadzona w pokoju 2.3. W przyszłości ten artefakt nie będzie jednak opcjonalny dla użytkowników korzystających z funkcji Room z Pagingiem 3.0. Aby wyrazić zgodę, dodaj do ścieżki zajęć nowy artefakt stronicowania pokoi. Jeśli używasz Gradle, możesz dodać do pliku build.gradle ten fragment kodu:

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

Poprawki błędów

  • Naprawiono problem z automatyczną migracją związany z naruszeniem zasad dotyczących kluczy obcych. (b/190113935)

Wersja 2.4.0-alfa03

16 czerwca 2021 r.

Aplikacja androidx.room:room-*:2.4.0-alpha03 została zwolniona. Wersja 2.4.0-alpha03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Zaktualizuj MigrationTestHelper sali, aby umożliwić obsługę automatycznych migracji, udostępniając nowy interfejs API konstruktora, który otrzymuje testowaną klasę bazy danych. Dzięki temu pomocnik może automatycznie dodać migracje automatyczne w ten sam sposób podczas runMigrationsAndValidate.

Poprawki błędów

  • Naprawiono problem z natywną biblioteką SQLite w pokoju, aby obsługiwać elementy M1 firmy Apple. (b/174695268

  • Naprawiono błąd, który powodował, że funkcja Room nie zwracała błędów, gdy zwracaną funkcją @Transaction była aktywność (I56ddd, b/190075899).

  • Naprawiono problem z indeksami podczas automatycznej migracji. b/177673291

Aktualizacje zależności

  • Obsługa KSP w sali zależy teraz od KSP 1.5.10-1.0.0-beta01. (1ecb11, b/160322705)

Wersja 2.4.0-alfa02

5 maja 2021 roku

Aplikacja androidx.room:room-*:2.4.0-alpha02 została zwolniona. Wersja 2.4.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • @ProvidedAutoMigrationSpec to nowy interfejs API służący do deklarowania, że AutoMigrationSpec będzie udostępniany w czasie działania przez RoomDatabase.Builder#addAutoMigrationSpec(). Dzięki temu platforma wstrzykiwania zależności może udostępniać te specyfikacje, gdy potrzebne są złożone zależności.

Poprawki błędów

  • Napraw błąd związany z automatyczną migracją, która powoduje, że migracja @DatabaseView nie jest prawidłowo odtwarzana.

Wkład z zewnątrz

  • Napraw błąd w funkcji JournalMode.TRUNCATE sali, w wyniku którego wywołanie zwrotne InvalidationTracker było czasami wywoływane nieprawidłowo, za późno lub w ogóle nie. Dziękujemy: Uli Bubenheimer | bubenheimer@users.noreply.github.com (b/154040286)

Wersja 2.4.0-alfa01

21 kwietnia 2021 r.

Aplikacja androidx.room:room-*:2.4.0-alpha01 została zwolniona. Wersja 2.4.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • Automatyczne migracje: sala udostępnia teraz interfejs API do automatycznego generowania migracji, o ile są eksportowane schematy. Aby poinformować usługę, że sala powinna wygenerować automatyczną migrację, można zadeklarować wersje, z których i do których chcesz przenieść nową usługę @Database#autoMigrations. Gdy sala potrzebuje dodatkowych informacji o zmianach nazw lub usunięcia tabel i kolumn, adnotacja @AutoMigration może zadeklarować klasę specyfikacji zawierającą takie dane wejściowe. Więcej informacji znajdziesz w dokumentacji @AutoMigration.

Poprawki błędów

  • Napraw błąd polegający na tym, że element defaultValue z dodatkowym nawiasem był nieprawidłowo weryfikowany podczas weryfikacji schematu pokoju. b/182284899

Wersja 2.3.0

Wersja 2.3.0

21 kwietnia 2021 r.

Aplikacja androidx.room:room-*:2.3.0 została zwolniona. Wersja 2.3.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.2.0

  • Wbudowana obsługa Enum: pokój będzie teraz domyślnie używać konwertera Enum na ciąg znaków i odwrotnie, jeśli nie zostanie podany żaden typ przelicznika. Jeśli istnieje już konwerter typów dla wyliczenia, funkcja Room ma priorytet, aby użyć jej zamiast domyślnej listy.
  • Wywołanie zwrotne zapytania: funkcja Room Database udostępnia teraz ogólny interfejs API wywołania zwrotnego RoomDatabase.QueryCallback, który jest używany, gdy zapytania mają być wykonywane, co może być przydatne przy logowaniu się w kompilacjach debugowania. Wywołanie zwrotne można ustawić w systemie RoomDatabase.Builder#setQueryCallback().
  • Ulepszenia w wersji wstępnej: Room ma teraz interfejsy API do tworzenia bazy danych, która korzysta ze wstępnie spakowanej bazy danych odczytywanej ze strumienia wejściowego. Pozwala to na przykład w sytuacji, gdy baza danych przed pakietem jest skompresowana gzip.
  • Użytkownicy dokonujący konwersji typu: pokój ma teraz interfejsy API umożliwiające udostępnianie wystąpień konwerterów typów, dzięki którym aplikacja może kontrolować swoje inicjowanie. Aby oznaczyć konwerter typów, który zostanie udostępniony do obsługi sali, użyj nowej adnotacji @ProvidedTypeConverter.
  • Obsługa RxJava3: pokój obsługuje teraz typy RxJava3. Podobnie jak w przypadku RxJava2, można zadeklarować metody DAO, których typ zwrotu to Flowable, Single, Maybe i Completable. Dostępny jest też nowy artefakt androidx.room:room-rxjava3 do obsługi RxJava3.
  • Obsługa etapu 3.0: pokój będzie teraz obsługiwać generowanie implementacji metod z adnotacjami @Query, których typ zwrotu to androidx.paging.PagingSource.

Wersja 2.3.0-rc01

24 marca 2021 r.

Aplikacja androidx.room:room-*:2.3.0-rc01 została zwolniona. Wersja 2.3.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono problem, który uniemożliwiał wykorzystanie zapytań w przepływie koronacji utworzonych przez salę w bloku z zawieszonym blokiem withTransaction. (I797bf)

Wersja 2.3.0-beta03

10 marca 2021 r.

Aplikacja androidx.room:room-*:2.3.0-beta03 została zwolniona. Wersja 2.3.0-beta03 zawiera te zatwierdzenia.

Nowe funkcje

Poprawki błędów

  • Naprawiono błąd, który powodował, że utworzenie PagingSource w wątku głównym mogło aktywować błąd ANR. (I42b74, b/181221318)
  • Poprawiono widoczność pakietu @ExperimentalRoomApi na publiczny, a nie prywatny. (b/181356119)

Wkład z zewnątrz

  • Zezwalaj na akceptowanie przez pokój typu zwracania POJO w metodzie DAO z adnotacjami @Query, gdy jest ona również oznaczona adnotacją @SkipQueryVerification. Pokój podejmie starania, aby wynik zapytania został przekonwertowany na zwracany typ POJO w taki sam sposób jak w przypadku metody DAO z adnotacjami @RawQuery. Dziękujemy: „Markus Riegel | hey@marcorei.com”. (I45acb)

Wersja 2.3.0-beta02

18 lutego 2021 r.

Aplikacja androidx.room:room-*:2.3.0-beta02 została zwolniona. Wersja 2.3.0-beta02 zawiera te zatwierdzenia.

Nowe funkcje

  • Sala ma teraz eksperymentalną obsługę KSP przetwarzania symboli Kotlin.

    KSP zastępuje procesory adnotacji natywnie uruchamiające procesory adnotacji w kompilatorze Kotlin, co znacznie skraca czas kompilacji.

    Aby używać narzędzia Room z KSP, możesz zastosować wtyczkę KSP Gradle i zastąpić konfigurację kapt w pliku kompilacji ciągiem ksp. Na przykład zamiast kapt 'androidx.room:room-compiler:2.3.0-beta02' użyj ksp 'androidx.room:room-compiler:2.3.0-beta02'. Więcej informacji znajdziesz w dokumentacji KSP.

    Uwaga: ponieważ KSP ma charakter eksperymentalny, zalecamy dalsze używanie KAPT w kodzie produkcyjnym. Skrócenie czasu kompilacji jest dostępne tylko wtedy, gdy nie ma innych procesorów, które korzystają z KAPT. Informacje o znanych problemach znajdziesz w artykule b/160322705.

Wersja 2.3.0-beta01

27 stycznia 2021 r.

Aplikacja androidx.room:room-*:2.3.0-beta01 została zwolniona. Wersja 2.3.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • Automatycznie zamykane bazy danych: sala ma teraz możliwość zamykania baz danych, które nie są używane po upływie określonego czasu. To jest funkcja eksperymentalna, którą można włączyć, wywołując RoomDatabase.Builder#setAutoCloseTimeout(). Ta funkcja jest przydatna w przypadku aplikacji z wieloma bazami danych.

Poprawki błędów

  • Naprawiono błąd, który powodował, że metody Dao z wieloma metodami @Update lub @Delete z różnymi strategiami konfliktu generowały kod tylko z jedną ze strategii, skutecznie ignorując zdefiniowaną strategię. (/I0b90d, b/176138543)

Wersja 2.3.0-alfa04

16 grudnia 2020 roku

Aplikacja androidx.room:room-*:2.3.0-alpha04 została zwolniona. Wersja 2.3.0-alpha04 zawiera te zatwierdzenia.

Nowe funkcje

  • Usługa Room udostępnia teraz ogólny interfejs API do wywołań zwrotnych RoomDatabase.QueryCallback, przydatny w przypadku zapytań, które mają być wykonywane, co może być przydatne przy logowaniu się w kompilacjach do debugowania. Wywołanie zwrotne można ustawić w systemie RoomDatabase.Builder#setQueryCallback(). (Iaa513, b/174478034, b/74877608)
  • Jeśli nie podasz żadnej wartości, sala będzie teraz domyślnie używać konwertera typu Enum na ciąg znaków i odwrotnie. Jeśli istnieje już konwerter typów dla wyliczenia, funkcja Room ma priorytet, aby użyć jej zamiast domyślnej listy. (b/73132006)

Znany problem

  • Jeśli dla wartości Enum istnieje już konwerter jednokierunkowy do odczytu, sala może przypadkowo użyć wbudowanego konwertera String na Enum, co może być niepożądane. Jest to znany problem, który można rozwiązać, przełączając konwerter dwukierunkowy. Zobacz: b/175707691

Poprawki błędów

  • Naprawiono błąd polegający na tym, że w nowszych wersjach JDK funkcja sali była błędnie wyłączana przyrostowe przetwarzanie adnotacji. (b/171387388)
  • Rozwiązaliśmy problem z znajdowaniem wygenerowanych zajęć w przypadku korzystania z wielu modułów ładowania zajęć. Dziękujemy za poprawienie błędu „Serendipity | 892449346@qq.com” (b/170141113).
  • Naprawiono błąd, który powodował, że funkcja Room generowała nieprawidłowy kod, gdy zasób Kotlin @Dao miał klasę bazową zawierającą elementy ogólne w JVM. (b/160258066)

Wkład z zewnątrz

  • Jeśli tryb WAL jest włączony, a interfejs API ma wartość 16 lub więcej, będzie teraz domyślnie używać beginTransactionNonExclusive. Dzięki utwórowi „Ahmed I. Khalil | ahmedibrahimkhali@gmail.com” (b/126258791)

Wersja 2.3.0-alfa03

14 października 2020 r.

Aplikacja androidx.room:room-*:2.3.0-alpha03 została zwolniona. Wersja 2.3.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • Sala ma teraz interfejsy API umożliwiające stosowanie instancji konwerterów typów, aby aplikacja mogła kontrolować ich inicjowanie. Aby oznaczyć konwerter typu przekazywany do sali konferencyjnej, użyj nowej adnotacji @ProvidedTypeConverter. Dziękuję za adres „mzgreen yairobbe@gmail.com”. (Ie4fa5, b/121067210)

  • Room ma teraz interfejsy API umożliwiające tworzenie bazy danych przy użyciu gotowej bazy danych odczytywanej ze strumienia wejściowego. Pozwala to na przykład w sytuacji, gdy baza danych przed pakietem jest skompresowana gzip. Dziękujemy adresowi „Ahmed El-Helw ahmedre@gmail.com” (3e6792, b/146911060)

Zmiany w interfejsie API

  • Dodano brakujący element docelowy do adnotacji @ForeignKey, co uniemożliwia jej użycie poza adnotacją @Entity. (Iced1e)

  • Pole mCallbacks w regionie RoomDatabase.java jest teraz ukryte. (D576cb, b/76109329)

Poprawki błędów

  • Zaktualizuj dokumentację TypeConverters, aby wyjaśnić, że typ konwersji można używać tylko do konwertowania kolumn i pól, a nie wierszy. (I07c56, b/77307836)

  • Aktualizacja aplikacji DaoProcessor w celu naprawienia błędu kompilatora w Dao za pomocą ogólnego typu supermodelu z „podstawami” Kotlin. (Ice6bb, b/160258066)

  • Zaktualizuj dokumentację metod dodawania i usuwania obserwatorów w celu wyjaśnienia wątków (Ifd1d9, b/153948821)

  • Naprawiono problem z nieprawidłową weryfikacją tabel FTS, które zadeklarowały kolumnę z wierszami zawierającymi informacje o salach. (d62ebc, b/145858914)

Treści opublikowane przez użytkowników z zewnątrz

  • Napraw problemy z językiem tureckim (5746e3) i b/68159494

  • Aby uniknąć problemów w Androidzie Lollipop, zastąp ConcurrentHashMap w RoomDatabase elementem Collections.synchronizedMap() (d1cfc7, b/162431855)

  • Dodaj wywołanie zwrotne onOpenPrepackagedDatabase w przypadku kopiowania gotowej bazy danych. (I1ba74, b/148934423)

Wersja 2.3.0-alfa02

22 lipca 2020 r.

Aplikacja androidx.room:room-*:2.3.0-alpha02 została zwolniona. Wersja 2.3.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • Obsługa RxJava3: pokój obsługuje teraz typy RxJava3. Podobnie jak w przypadku RxJava2, można zadeklarować metody DAO, których typ zwrotu to Flowable, Single, Maybe i Completable. Dostępny jest też nowy artefakt androidx.room:room-rxjava3 do obsługi RxJava3. (b/152427884)

Zmiany w interfejsie API

  • Zadeklarowanie @TypeConverter w klasie obiektu Kotlin jest teraz obsługiwane. (b/151110764)
  • Opcja przyrostowego przetwarzania adnotacji sali jest teraz domyślnie WŁĄCZONA. (b/112110217)

Wersja 2.3.0-alfa01

10 czerwca 2020 r.

Aplikacja androidx.room:room-*:2.3.0-alpha01 została zwolniona. Wersja 2.3.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • Obsługa etapu 3.0: sala będzie teraz obsługiwać generowanie implementacji dla @Query z adnotacjami, których typ zwrotu to androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

Zmiany w interfejsie API

  • @RewriteQueriesToDropUnusedColumns to nowa, wygodna adnotacja, która umożliwia modyfikowanie odwzorowania „*” w zapytaniu przez funkcję Room, dzięki czemu nieużywane kolumny z wyniku są usuwane.
  • Opcja procesora room.expandProjection została wycofana. Używaj usługi @RewriteQueriesToDropUnusedColumns jako zamiennika zapytań optymalizujących sale za pomocą przewidywania gwiazdek. Pamiętaj, że funkcja @RewriteQueriesToDropUnusedColumns nie zastępuje oferowanego rozwiązania konfliktu kolumn room.expandProjection w przypadku typów zwracanych, które zawierały pola @Embedded.

Poprawki błędów

  • Naprawiono błąd, który powodował, że funkcja Room nie wykrywała prawidłowo wersji JDK używanej do włączenia przyrostowego procesora adnotacji. Dzięki Blaz Solar (ja@blaz.solar) (b/155215201)
  • Funkcja Room zawiera teraz zależność ANTLR z procesorem adnotacji, aby uniknąć konfliktów wersji z innymi procesorami, które również używają ANTLR. (b/150106190)

Wersja 2.2.6

Wersja 2.2.6

16 grudnia 2020 roku

Aplikacja androidx.room:room-*:2.2.6 została zwolniona. Wersja 2.2.6 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd polegający na tym, że w nowszych wersjach JDK funkcja sali była błędnie wyłączana przyrostowe przetwarzanie adnotacji. (b/171387388)

Wersja 2.2.5

Wersja 2.2.5

18 marca 2020 r.

Aplikacja androidx.room:room-*:2.2.5 została zwolniona. Wersja 2.2.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Zmień ustawienia MultiInstanceInvalidationService w directBootAware. Dzięki adresowi „Mygod contact-git@mygod.be” (b/148240967)
  • Naprawiono błąd, który powodował awarię po włączeniu unieważniania wielu instancji, gdy baza danych zawierała element FTS. (b/148969394)
  • Rozwiązaliśmy problem, który występował podczas wczytywania bibliotek natywnych SQLite w procesorze adnotacji Room, który powodował awarię kompilatora w wyniku kompilacji równoległych. (b/146217083)

Wersja 2.2.4

Wersja 2.2.4

19 lutego 2020 r.

Opublikowano androidx.room:room-common:2.2.4, androidx.room:room-compiler:2.2.4, androidx.room:room-guava:2.2.4, androidx.room:room-ktx:2.2.4, androidx.room:room-migration:2.2.4, androidx.room:room-runtime:2.2.4, androidx.room:room-rxjava2:2.2.4 i androidx.room:room-testing:2.2.4. Wersja 2.2.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono problem z zawieszaniem transakcji, w wyniku którego dochodziło do zakleszczenia, jeśli współprogram został anulowany szybko przed rozpoczęciem transakcji. (b/148181325)
  • Naprawiono problem z nieprawidłowym użyciem @Generated podczas tworzenia za pomocą pakietu JDK 9. (b/146538330)
  • Naprawiono błąd, który powodował, że funkcja Room generowała nieprawidłowy kod, gdy interfejs DAO w Kotlin miał konkretną funkcję. (b/146825845)

Wersja 2.2.3

Wersja 2.2.3

18 grudnia 2019 r.

Aplikacja androidx.room:room-*:2.2.3 została zwolniona. Wersja 2.2.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy błąd polegający na tym, że funkcja Room nie sprawdzała bazy danych, która nie została poddana żadnej migracji i zawierała starszy hasz z indeksami w schemacie. (b/139306173)

Wersja 2.2.2

Wersja 2.2.2

20 listopada 2019 r.

Aplikacja androidx.room:room-*:2.2.2 została zwolniona. Wersja 2.2.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd, który powodował, że zebranie relacji jeden do jednego z ponad 999 wierszami powodowało zwracanie powiązanych elementów Room o wartości null. (b/143105450)

Wersja 2.2.1

Wersja 2.2.1

23 października 2019 r.

Aplikacja androidx.room:room-*:2.2.1 została zwolniona. Wersja 2.2.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd, który powodował, że pokój błędnie ostrzegał przed sytuacją CURSOR_MISMATCH przy włączonej opcji kompilatora expandProjection. (b/140759491)
  • Dodaliśmy mechanizm ponawiania służący do obsługi brakującej biblioteki natywnej używanej do weryfikowania zapytań podczas kompilacji.

Wersja 2.2.0

Wersja 2.2.0

9 października 2019 r.

Aplikacja androidx.room:room-*:2.2.0 została zwolniona. Wersja 2.2.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.1.0

  • Wstępnie spakowana baza danych: w RoomDatabase.Builder dostępne są teraz 2 nowe interfejsy API do tworzenia komponentów RoomDatabase na podstawie już wypełnionego pliku bazy danych. createFromAsset() oznacza, że wstępnie wypełniony plik bazy danych znajduje się w folderze zasobów pliku APK, a createFromFile() – gdy plik znajduje się w dowolnej lokalizacji. Wykorzystanie tych interfejsów API zmienia zachowanie niszczycielskich migracji w taki sposób, że podczas migracji zastępczej usługa Room spróbuje ponownie skopiować wstępnie wypełnioną bazę danych, jeśli jest to możliwe. W przeciwnym razie po prostu usunie i ponownie utworzy wszystkie tabele. b/62185732
  • Domyślne wartości schematu: @ColumnInfo ma teraz nową właściwość defaultValue, której można użyć do określenia domyślnej wartości kolumny. Wartości domyślne są częścią schematu bazy danych i zostaną zweryfikowane podczas migracji, jeśli zostaną określone. b/64088772
  • Relacje wiele do wielu: @Relation ma teraz nową właściwość associateBy, która przyjmuje nową adnotację @Junction, używaną do zadeklarowania relacji, która musi zostać spełniona za pomocą tabeli połączeń (zwanej też tabelą złączenia). b/69201917
  • Relacje jeden do jednego: ograniczenie w polach POJO z adnotacjami @Relation, które są typu List lub Set, zostało zniesione, co umożliwia prezentowanie relacji jednowartościowych. b/62905145
  • Jednostka docelowa: adnotacje DAO @Insert, @Update i @Delete mają teraz nową właściwość targetEntity, która umożliwia określenie tabeli docelowej, na której ma działać metoda DAI. Dzięki temu parametry tych metod DAO mogą być dowolnymi POJO, które będą interpretowane jako elementy częściowe. W praktyce umożliwia to częściowe wstawianie, usuwanie i aktualizowanie. b/127549506
  • Przepływ kalorii: metody DAO (@Query) mogą teraz być zwracanymi typem Flow<T>. Zwrócony przepływ ponownie wygeneruje nowy zestaw wartości, jeśli tabele obserwacji w zapytaniu zostaną unieważnione. Zadeklarowanie funkcji DAO ze zwracanym typem Channel<T> jest błędem. Zamiast tego zalecamy użycie funkcji Flow, a następnie użycie funkcji sąsiadujących do przekonwertowania funkcji Flow na typ Channel. b/130428884
  • Procesor przyrostowych adnotacji Gradle: sala jest teraz procesorem adnotacji izolującym adnotacje Gradle. Możliwość przyrostu wartości można włączyć za pomocą opcji procesora room.incremental. Więcej informacji znajdziesz w sekcji poświęconej opcjom kompilatora pokoi. Jeśli napotkasz jakieś problemy, zgłoś błąd tutaj. Planujemy domyślnie włączyć możliwość przyrostu w przyszłości w wersji stabilnej. b/112110217
  • Rozwijanie prognoz: dodaliśmy nową, eksperymentalną opcję kompilatora room.expandProjection, która powoduje, że funkcja Room przeredaguje zapytanie z odwzorowaniem gwiazdy tak, aby zawierała tylko kolumny zwróconego typu POJO. Przykład dla metody DAO z @Query("SELECT * FROM Song"), która zwraca POJO o nazwie SongIdAndTitle z tylko 2 polami. Następnie funkcja Room zmieni zapytanie w tabeli SELECT id, title FROM Song w taki sposób, by pobrać minimalny zestaw kolumn wymaganych do zwracanego typu danych. Eliminuje to ostrzeżenie CURSOR_MISMATCH, które pojawia się, gdy zapytanie zwraca dodatkowe kolumny, które nie pasują do żadnego pola w zwracanym typie POJO.

Wersja 2.2.0-rc01

5 września 2019 r.

Aplikacja androidx.room:room:2.2.0-rc01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Brak zmian publicznych od pokoju 2.2.0-beta01.

Wersja 2.2.0-beta01

22 sierpnia 2019 r.

Aplikacja androidx.room:room-*:2.2.0-beta01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Naprawiono błąd, który powodował, że zapytanie Coroutine Flow przestało przesyłać nowe wartości po pewnym czasie. (b/139175786)
  • Naprawiliśmy błąd polegający na tym, że funkcja Room nie akceptowała kodu skrótu schematu podczas otwierania bazy danych, w której nie nastąpiła migracja od sali 1.0, co powodowało awarię środowiska wykonawczego z powodu nieprawidłowego schematu. (b/139306173)

Wersja 2.2.0-alfa02

7 sierpnia 2019 r.

Aplikacja androidx.room:room-*:2.2.0-alpha02 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Przepływ kalorii: metody DAO (@Query) mogą teraz być zwracanymi typem Flow<T>. Zwrócony przepływ ponownie wygeneruje nowy zestaw wartości, jeśli tabele obserwacji w zapytaniu zostaną unieważnione. Zadeklarowanie funkcji DAO ze zwracanym typem Channel<T> jest błędem. Zamiast tego zalecamy użycie funkcji Flow, a następnie użycie funkcji sąsiadujących do przekonwertowania funkcji Flow na typ Channel. b/130428884
  • Rozwijanie prognoz: dodaliśmy nową, eksperymentalną opcję kompilatora room.expandProjection, która powoduje, że funkcja Room przeredaguje zapytanie z odwzorowaniem gwiazdy tak, aby zawierała tylko kolumny zwróconego typu POJO. Przykład dla metody DAO z @Query("SELECT * FROM Song"), która zwraca POJO o nazwie SongIdAndTitle z tylko 2 polami. Następnie funkcja Room zmieni zapytanie w tabeli SELECT id, title FROM Song w taki sposób, by pobrać minimalny zestaw kolumn wymaganych do zwracanego typu danych. Eliminuje to ostrzeżenie CURSOR_MISMATCH, które pojawia się, gdy zapytanie zwraca dodatkowe kolumny, które nie pasują do żadnego pola w zwracanym typie POJO.
  • onDestructiveMigrate to nowy interfejs API wywołania zwrotnego dodany do RoomDatabase.Callback na potrzeby niszczycielskiej migracji bazy danych przez funkcję Room. b/79962330

Poprawki błędów

  • Naprawiono błąd, który powodował, że usługa Room generowała nieprawidłowy kod przy użyciu metody ustawiania pól, gdy pole jest chronione. b/136194628
  • Naprawiono błąd, który powodował, że element BillingationTracker zgłaszał NPE w drugim procesie po włączeniu unieważnienia wielu instancji i zatrzymaniu usługi unieważniania. b/137454915
  • Naprawiono błąd, który powodował, że funkcja Room nie mogła prawidłowo identyfikować zwracanego typu zwracanych funkcji zawieszania z adnotacją @RawQuery. b/137878827
  • Zaktualizowano wygenerowany kod dla funkcji @Relation, gdy powiązany klucz jest typu BLOB, aby użyć porównywalnej funkcji ByteBuffer. b/137881998
  • Naprawiono błąd, który powodował, że funkcja Room zgłaszała brak elementów wprowadzających w POJO jako parametrów encji @Insert, @Update i @Delete. b/138664463
  • Naprawiliśmy błąd polegający na tym, że funkcja Room zgłaszała brak metod pobierania i seterów w ignorowanej kolumnie przez @Entity, gdy klasa encji była używana w niektórych metodach DAO. b/138238182
  • Naprawiliśmy błąd polegający na tym, że funkcja Room nie konwertowała nazwanych argumentów wiązania na argumenty pozycjonujące, co powodowało wystąpienie wyjątku w środowisku wykonawczym w przypadku wykonywania zapytania z ponownie użytymi parametrami. b/137254857

Wersja 2.2.0-alfa01

10 lipca 2019 r.

Nowe funkcje

  • Wstępnie spakowana baza danych: w RoomDatabase.Builder dostępne są teraz 2 nowe interfejsy API do tworzenia komponentów RoomDatabase na podstawie już wypełnionego pliku bazy danych. createFromAsset() oznacza, że wstępnie wypełniony plik bazy danych znajduje się w folderze zasobów pliku APK, a createFromFile() – gdy plik znajduje się w dowolnej lokalizacji. Wykorzystanie tych interfejsów API zmienia zachowanie niszczycielskich migracji w taki sposób, że podczas migracji zastępczej usługa Room spróbuje ponownie skopiować wstępnie wypełnioną bazę danych, jeśli jest to możliwe. W przeciwnym razie po prostu usunie i ponownie utworzy wszystkie tabele. b/62185732
  • Domyślne wartości schematu: @ColumnInfo ma teraz nową właściwość defaultValue, której można użyć do określenia domyślnej wartości kolumny. Wartości domyślne są częścią schematu bazy danych i zostaną zweryfikowane podczas migracji, jeśli zostaną określone. b/64088772

    Uwaga: jeśli schemat bazy danych zawiera już wartości domyślne, takie jak te dodane za pomocą ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z, i decydujesz się zdefiniować wartości domyślne za pomocą parametru @ColumnInfo dla tych samych kolumn, może być konieczne przeprowadzenie migracji, aby zweryfikować nieuwzględnione wartości domyślne. Więcej informacji znajdziesz w artykule na temat migracji sal.

  • Relacje wiele do wielu: @Relation ma teraz nową właściwość associateBy, która przyjmuje nową adnotację @Junction, używaną do zadeklarowania relacji, która musi zostać spełniona za pomocą tabeli połączeń (zwanej też tabelą złączenia). b/69201917
  • Relacje jeden do jednego: ograniczenie w polach POJO z adnotacjami @Relation, które są typu List lub Set, zostało zniesione, co umożliwia prezentowanie relacji jednowartościowych. b/62905145
  • Jednostka docelowa: adnotacje DAO @Insert, @Update i @Delete mają teraz nową właściwość targetEntity, która umożliwia określenie tabeli docelowej, na której ma działać metoda DAI. Dzięki temu parametry tych metod DAO mogą być dowolnymi POJO, które będą interpretowane jako elementy częściowe. W praktyce umożliwia to częściowe wstawianie, usuwanie i aktualizowanie. b/127549506
  • Procesor przyrostowych adnotacji Gradle: sala jest teraz procesorem adnotacji izolującym adnotacje Gradle. Możliwość przyrostu wartości można włączyć za pomocą opcji procesora room.incremental. Więcej informacji znajdziesz w sekcji poświęconej opcjom kompilatora pokoi. Jeśli napotkasz jakieś problemy, zgłoś błąd tutaj. Planujemy domyślnie włączyć możliwość przyrostu w przyszłości w wersji stabilnej. b/112110217

Poprawki błędów

  • Pokój nie będzie już przekazywać funkcji EmptySetResultException do globalnego modułu obsługi błędów po usunięciu strumienia Rx zapytania przed zakończeniem zapytania. b/130257475
  • Naprawiono błąd, który powodował, że funkcja Room wyświetlała nieprawidłowy komunikat o błędzie, gdy funkcja zawieszania DAO z adnotacją @RawQuery nie miała typu zwracanego kodu. b/134303897
  • Sala nie będzie już generować adapterów DAO z nieprzetworzonymi typami. b/135747255

Wersja 2.1.0

Wersja 2.1.0

13 czerwca 2019 r.

Sala 2.1.0 została zwolniona bez zmian z 2.1.0-rc01. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Ważne zmiany od wersji 2.0.0

  • FTS: sala obsługuje teraz elementy z tabelą mapowania FTS3 lub FTS4. Do klas z adnotacjami @Entity można teraz dodać adnotacje @Fts3 lub @Fts4, aby zadeklarować klasę za pomocą pełnotekstowej tabeli wyszukiwania mapowania. Opcje FTS umożliwiające dalsze dostosowanie są dostępne w ramach metod adnotacji.
  • Widoki: pokój umożliwia teraz deklarowanie klasy jako zapisanego zapytania (nazywanego też widokiem danych) przy użyciu adnotacji @DatabaseView.
  • Kursy: metody DAO można teraz zawieszać funkcje. Aby korzystać z tej funkcji, uwzględnij w zależności room-ktx. Artefakt ktx udostępnia też funkcję rozszerzenia RoomDatabase.withTransaction do wykonywania transakcji w bazie danych w ramach współużytkowania.
  • Wartość automatyczna: pokój umożliwia teraz deklarowanie klas z adnotacjami AutoValue jako encji i ważnych miejsc. Adnotacje dotyczące sal @PrimaryKey, @ColumnInfo, @Embedded i @Relation można teraz zadeklarować w metodach abstrakcyjnych klasy z adnotacjami automatycznymi. Pamiętaj, że aby można było prawidłowo je odczytać, adnotacji musi towarzyszyć im też @CopyAnnotations.
  • Dodatkowa obsługa asynchroniczna: metody DAO z adnotacjami @Insert, @Delete lub @Update oraz @Query zawierające instrukcje INSERT, DELETE lub UPDATE obsługują teraz typy zwrotów Rx Completable, Single i Maybe oraz typ zwrotu Guawy ListenableFuture. Metody te mogą też być zawieszane.
  • enableMultiInstanceInvalidation to nowy interfejs API w RoomDatabase.Builder, który umożliwia unieważnianie wielu instancji RoomDatabase przy użyciu tego samego pliku bazy danych.
  • fallbackToDestructiveMigrationOnDowngrade to nowy interfejs API w RoomDatabase.Builder, który automatycznie odtwarza bazę danych w przypadku przejścia na niższą wersję.
  • ignoredColumns to nowy interfejs API w adnotacji @Entity, który umożliwia wyświetlanie ignorowanych pól według nazwy.
  • Sala będzie teraz prawidłowo używać głównego konstruktora Kotlina w klasach danych, dzięki czemu nie trzeba będzie zadeklarować właściwości jako vars.

Wersja 2.1.0-rc01

29 maja 2019 r.

Poprawki błędów

  • Naprawiliśmy błąd inicjowania sali, który mógł występować w wyniku już skonfigurowanej konfiguracji temp_store. b/132602198
  • Naprawiliśmy ostrzeżenie o wykorzystaniu cudzysłowu w przypadku użytkowników korzystających z SQLite w wersji 3.27.0 lub nowszej. b/131712640
  • Naprawiliśmy błąd, który powodował awarię modułu DeleteationTracker w sytuacji, gdy równolegle odbywało się wielokrotne sprawdzanie unieważnienia. b/133457594

Wersja 2.1.0-beta01

7 maja 2019 r.

Wersja androidx.room 2.1.0-beta01 została opublikowana bez zmian w wersjach 2.1.0–alfa07. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Wersja 2.1.0-alfa07

25 kwietnia 2019 r.

Zmiany w interfejsie API lub zachowaniu

  • Funkcja rozszerzenia RoomDatabase.withTransaction została zmieniona tak, aby nie przyjmowała już bloków funkcyjnych z odbiornikiem CoroutineScope. Zapobiega to pomijaniu dodatkowego kodu coroutineScope { } wymaganego do jednoczesnego uruchamiania elementów w bloku transakcji.

Poprawki błędów

  • Naprawiono błąd, który powodował, że funkcja Room nie mogła dopasować elementu TypeConverter dla funkcji DAO Kotlin zawierającej parametr typu kolekcji. b/122066791

Wersja 2.1.0-alfa06

22 marca 2019 r.

Zmiany w interfejsie API lub zachowaniu

  • Zapytania dotyczące transakcji asynchronicznych są teraz serializowane, aby usługa Room nie używała więcej niż 1 wątku do wykonywania transakcji w bazie danych. Element RoomDatabase.Builder.setTransactionExecutor(Executor) został dodany, aby umożliwić skonfigurowanie używania wykonawcy do obsługi transakcji.
  • RoomDatabase.runInTransaction(Callable) nie będzie już obejmować zaznaczonych wyjątków do wyjątków RuntimeExceptions. b/128623748

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że moduł do śledzenia unieważnień zatrzymywał obserwację tabeli treści po dodaniu obserwatorów zarówno do tabeli treści, jak i zewnętrznej tabeli FTS. b/128508917
  • Zaktualizowaliśmy gramatykę SQLite pokoju, aby pasowała do SQLite 3.24.0. b/110883668

Wersja 2.1.0-alfa05

13 marca 2019 r.

Nowe funkcje

  • Funkcja rozszerzenia RoomDatabase.withTransaction umożliwia bezpieczne przeprowadzanie transakcji w bazie danych w ramach współpracy. Funkcje rozszerzeń sal oraz obsługa współprogramów są dostępne w artefakcie room-ktx.
  • Nieabstrakcyjne metody DAO z adnotacjami @Transaction mogą być teraz zawieszane funkcji. b/120241587

Zmiany w interfejsie API lub zachowaniu

  • Nazwa artefaktu room-coroutines została zmieniona na room-ktx i ma taką samą nazwę jak inne artefakty Androidax.
  • beginTransaction, setTransactionSuccessful i endTransaction w języku RoomDatabase zostały wycofane i zastąpione przez runInTransaction i funkcję rozszerzenia room-ktx withTransaction.

Poprawki błędów

  • Naprawiono błąd polegający na tym, że argumenty tokenizatora były pomijane, jeśli używany tokenizator był prosty. b/125427014
  • Naprawiono błąd, który powodował, że funkcja Room nie mogła prawidłowo identyfikować funkcji zawieszania z parametrami, które są klasą wewnętrzną. b/123767877
  • Naprawiliśmy błąd, który powodował, że odroczona metoda DAO @Query z instrukcjami INSERT, UPDATE lub DELETE z niecierpliwością przygotowywała zapytanie w wątku głównym. b/123695593
  • Naprawiono różne błędy, które powodowały, że sala generowała nieprawidłowy kod w przypadku niektórych funkcji zawieszania. b/123466702 i b/123457323
  • Naprawiono błąd, który powodował, że wycofane metody nie były prawidłowo pomijane w wygenerowanym kodzie. b/117602586
  • Zaktualizowano zależność z pomieszczeniami z pakietu androidx.sqlite do wersji 1.0.2, która zawiera poprawki ułatwiające prawidłową obsługę uszkodzonych baz danych. b/124476912

Znane problemy

  • Pokój 2.1.0–alfa05 zależy od artefaktu kotlinx-metadata-jvm, który nie jest obecnie dostępny w Maven Central (KT-27991). Możesz rozwiązać tę zależność, dodając plik maven { url "https://kotlin.bintray.com/kotlinx/" } do repozytoriów projektu.

Wersja 2.1.0-alfa04

25 stycznia 2019 r.

Nowe funkcje

  • Metody DAO z adnotacjami @Query zawierające instrukcje INSERT, UPDATE lub DELETE mogą teraz zwracać typy asynchroniczne Single, Mayble, Completable i ListenableFuture. Mogą też być funkcjami zawieszania. b/120227284

Zmiany w interfejsie API lub zachowaniu

  • Jeśli nieabstrakcyjna metoda DAO z adnotacją @Transaction zwraca typ asynchroniczny, np. Single, Mayble, Completable, LiveData lub ListenableFuture, funkcja Room zwraca błąd. Ponieważ transakcje są ograniczone do wątków, obecnie nie można rozpocząć i zakończyć transakcji dotyczącej funkcji, która mogłaby odpowiadać zapytaniom w różnych wątkach. b/120109336
  • Funkcje OnConflictStrategy.FAIL i OnConflictStrategy.ROLLBACK mają wartość @Deprecated, ponieważ nie działają poprawnie z obecnymi powiązaniami SQLite na Androidzie. b/117266738

Poprawki błędów

  • Naprawiono błąd, który powodował, że funkcja Room nie używała poprawnie obiektu TypeConverter zwracającego typ, jeśli metoda DAO była funkcją zawieszania. b/122988159
  • Naprawiono błąd, który powodował, że funkcja Room nieprawidłowo rozpoznawała dziedziczone funkcje zawieszania jako niezawieszone. b/122902595
  • Naprawiono błąd, który powodował, że funkcja Room generowała nieprawidłowy kod, gdy pole @Embedded znajdowało się w klasie nadrzędnej i było używane w wielu klasach podrzędnych. b/121099048
  • Rozwiązaliśmy problem, który powodował, że baza danych ulegała zakleszczeniu podczas wywoływania funkcji zawieszania DAO między beginTransaction() a endTransaction(). b/120854786

Wersja 2.1.0-alfa03

4 grudnia 2018 r.

Zmiany w interfejsie API

  • Funkcja FTS tokenizer w @Fts3/@Fts4 przyjmuje teraz ciąg znaków, a nie Enum. Dzięki temu sala może używać niestandardowych tokenizatorów. Wbudowane tokenizatory są nadal zdefiniowane w FtsOptions jako stałe w postaci ciągu znaków. b/119234881

Nowe funkcje

  • Kursy: metody DAO można teraz zawieszać funkcje. Aby umożliwić obsługę funkcji zawieszania w sali, udostępniliśmy nowy artefakt room-coroutines. b/69474692
  • Metody DAO z adnotacjami @Insert, @Delete lub @Update obsługują teraz zwracany typ ListenableFuture. b/119418331

Poprawki błędów

  • Naprawiono błąd, który powodował, że funkcja Room próbowała nieprawidłowo znaleźć konstruktor z kolumnami we właściwości ignoredColumns obiektu @Entity. b/119830714
  • Naprawiliśmy błąd, który powodował, że funkcja Room nie oznaczała parametrów metody DAO jako ostatecznej implementacji. b/118015483
  • Naprawiono błąd, który powodował awarię procesora sali podczas zgłaszania błędu w zapytaniu zawierającym symbole specjalne. b/119520136
  • Poprawiliśmy błąd, który powodował, że funkcja Room odrzucała inne implementacje Collection jako argumenty wyrażenia IN. b/119884035
  • Naprawiliśmy błąd, który powodował, że funkcja LiveData zwracana z pokoju gromadziła niepotrzebne śmieci, jeśli są obserwowane na zawsze. Nie emitowały już nowych danych. b/74477406
  • Zaktualizowano blokadę ekranu urządzenia RoomDatabase, aby ograniczyć rywalizację o blokadę. b/117900450

Wersja 2.1.0-alfa02

30 października 2018 r.

Nowe funkcje

  • Dodano obsługę odwołania do @DatabaseView w @Relation. b/117680932

Poprawki błędów

  • Naprawiliśmy błąd polegający na tym, że pokój przeprowadzał operacje wejścia-wyjścia dysku w wątku głównym w przypadku subskrybowania i usuwania typu zwrotu Rx. b/117201279
  • Naprawiono błąd, który powodował, że funkcja Room nie znalazła odpowiedniego konwertera odpowiedniego typu dla pola w klasie encji Kotlin. b/111404868
  • Naprawiono błąd, który powodował, że funkcja Room generowała nieprawidłowy kod dla implementacji interfejsu DAO z domyślną metodą Kotlin bez argumentów. b/117527454
  • Zaktualizowaliśmy parser gramatyki SQLite w pokoju, naprawiając problem z wydajnością, który powodowałby długie czasy kompilacji. b/117401230

Wersja 2.1.0-alfa01

8 października 2018 r.

Nowe funkcje

  • FTS: sala obsługuje teraz elementy z tabelą mapowania FTS3 lub FTS4. Do klas z adnotacjami @Entity można teraz dodać adnotacje @Fts3 lub @Fts4, aby zadeklarować klasę z mapowaniem pełnotekstowej tabeli wyszukiwania. Opcje FTS umożliwiające dalsze dostosowanie są dostępne w metodach adnotacji. b/62356416
  • Widoki danych: w sali można teraz deklarować klasę jako zapisane zapytanie (nazywane też widokiem danych) z użyciem adnotacji @DatabaseView. b/67033276
  • Wartość automatyczna: pokój obsługuje teraz deklarowanie klas z adnotacjami AutoValue jako encji i POJO. Adnotacje dotyczące sal @PrimaryKey, @ColumnInfo, @Embedded i @Relation można teraz zadeklarować w metodach abstrakcyjnych klasy z adnotacjami automatycznymi. Pamiętaj, że do tych adnotacji musi towarzyszyć atrybut @CopyAnnotations, aby można było je poprawnie odczytać. b/62408420
  • Dodatkowa obsługa typów zwrotów Rx: metody DAO z adnotacjami @Insert, @Delete lub @Update obsługują teraz typy zwrotów Rx Completable, Single<T> i Maybe<T>. b/63317956
  • Typy stałe z @Relation: pola z adnotacjami, które wcześniej @Relation musiały być konfigurowane, ale teraz mogą być parametrami konstruktora.
  • enableMultiInstanceInvalidation: to nowy interfejs API w RoomDatabase.Builder, który umożliwia unieważnianie wielu wystąpień RoomDatabase przy użyciu tego samego pliku bazy danych. Ten mechanizm unieważniania wielu instancji działa również w wielu procesach. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: to nowy interfejs API w RoomDatabase.Builder, który automatycznie odtwarza bazę danych w przypadku przejścia na niższą wersję. b/110416954
  • ignoredColumns: to nowy interfejs API w adnotacji @Entity, który może służyć do wyświetlania ignorowanych pól według nazwy. Ta opcja jest przydatna do ignorowania pól dziedziczonych w encji. b/63522075

Zmiany w interfejsie API lub zachowaniu

  • mCallback i mDatabase w sali RoomDatabase to teraz @Deprecated i zostaną usunięte z następnej głównej wersji pokoju. b/76109329

Poprawki błędów

  • Rozwiązaliśmy 2 problemy, które powodowały, że podczas inicjowania sala nie mogła prawidłowo przywrócić danych z uszkodzonej bazy danych lub nieprawidłowej migracji. b/111504749 i b/111519144
  • Usługa Room będzie teraz prawidłowo używać głównego konstruktora Kotlin w klasach danych, dzięki czemu nie trzeba będzie zadeklarować pól jako vars. b/105769985

Wersja 2.0.0

Wersja 2.0.0

1 października 2018 r.

Wersja androidx.room 2.0.0 została opublikowana bez zmian z wersji 2.0.0-rc01.

Wersja 2.0.0-rc01

20 września 2018 r.

Wersja androidx.room 2.0.0-rc01 została opublikowana bez zmian z wersji 2.0.0-beta01.

Wersja 2.0.0-beta01

2 lipca 2018 r.

Zmiany w interfejsie API lub zachowaniu

  • Dodano RoomDatabase.Builder.setQueryExecutor(), aby umożliwić dostosowanie miejsca wykonywania zapytań
  • Dodano obsługę RxJava2 Observable
  • Wygenerowane implementacje DAO i bazy danych są już ostateczne

Poprawki błędów

  • Podaj nazwę klasy/pola w błędzie „Nie można znaleźć metody pobierania dla pola” b/73334503
  • Poprawiono wsteczną zgodność RoomOpenHelper ze starszymi wersjami pokoju b/110197391

Zależności sprzed AndroidaX

W wersjach pokoju starszych niż AndroidX dołącz te zależności:

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

Wersja 1.1.1

Wersja 1.1.1

19 czerwca 2018 r.

Pokój 1.1.1 jest taki sam jak pokój 1.1.1-rc1.

Wersja 1.1.1-rc1

16 maja 2018 r. Jeśli używasz migracji, zdecydowanie zalecamy użycie pokoju 1.1.1-rc1 zamiast 1.1.0.

Naprawiono błąd, który powodował, że sala nie obsługiwała prawidłowo inicjowania po migracji b/79362399

Wersja 1.1.0

Wersja 1.1.0-beta3

19 kwietnia 2018 r.

Poprawki błędów

  • Poprawianie błędu kompilacji, gdy POJO w Kotlin odwołuje się do encji relacji zdefiniowanej w Javie b/78199923

Wersja 1.1.0-beta2

5 kwietnia 2018 r.

Poprawki błędów

  • Naprawiliśmy krytyczny błąd w implementacjach Single i Maybe sali, w którym dochodziło do ponownego wykorzystania zapytania z wyprzedzeniem, co powodowało problemy w przypadku dodania więcej niż 1 obserwatora do zwracanego zdarzenia Single lub Maybe. b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] nie będzie zgłaszać VACUUM bazy danych, jeśli zostanie ona wywołana w ramach transakcji. b/77235565

Wersja 1.1.0-beta1

21 marca 2018 r.

Zmiany w interfejsie API

  • Z opinii na temat weryfikacji interfejsu API wynika, że @RawQuery nie akceptuje już przekazywania String jako parametru zapytania. Musisz użyć [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (Zobacz [SimpleSQLiteQuery][ref-SimpleSQLiteQuery], aby łatwo utworzyć instancję [SupportSQLiteQuery][ref-SupportSQLiteQuery] z obsługą argumentów).
  • Metoda [fallbackToDestructiveMigrateFrom][ref-fallbackToDestructiveMigrateFrom] RoomDatabase.Builder teraz akceptuje metodę vararg int zamiast vararg Integer.

Poprawki błędów

  • [RoomDatabase.clearAllTables][ref-clearAllTables] próbuje teraz przywrócić spację w systemie operacyjnym przez ustawienie punktu kontrolnego zapisywania logów z prośbą o zgodę i VACUUMużycie bazy danych.
  • [@RawQuery][ref-RawQuery] akceptuje teraz dowolne elementy Pojo dla właściwości observedEntities, o ile Pojo odwołuje się do co najmniej jednego elementu w polach Embedded lub Relation. b/74041772
  • Strona dla sali: implementacja DataSource w pokoju prawidłowo obsługuje zależności z wieloma tabelami (np. relacje i złączenia). Wcześniej te działania nie aktywowały nowych wyników lub mogły się nie skompilować. b/74128314

Wersja 1.1.0-alfa1

22 stycznia 2018 r.

Nowe funkcje

  • RawQuery: ten nowy interfejs API zezwala metodom @Dao na otrzymywanie SQL jako parametru zapytania b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: ten nowy interfejs API w usłudze RoomDatabase.Builder daje bardziej szczegółową kontrolę nad tym, w którym początkowym okresie migracje zawierające niszczycielskie wersje schematu są dozwolone (w porównaniu z faktyczną migrację zastępcząToDestructiveMigrate) b/64989640
  • Sala obsługuje teraz tylko nowsze interfejsy API stron (w wersji alfa-4 lub nowszej), a wycofane interfejsy LivePagedListProvider nie są już obsługiwane. Aby korzystać z nowej wersji alfa pokoju, musisz użyć podziału na strony alpha-4 lub wyższego poziomu i przejść z LivePagedListProvider na LivePagedListBuilder (w miarę możliwości).

Poprawki błędów

  • Ulepszona obsługa typów Kotlin Kapt. b/69164099
  • Kolejność pól nie unieważnia już schematu. b/64290754