DataStore
| Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja beta | Wersja alfa |
|---|---|---|---|---|
| 12 października 2026 r. | 1.2.1 | 1.3.0-rc01 | - | - |
Deklarowanie zależności
Aby dodać zależność od DataStore, musisz dodać do projektu repozytorium Maven Google. Więcej informacji znajdziesz w repozytorium Maven Google.
DataStore udostępnia różne opcje serializacji. Wybierz jedną z nich. Do obu implementacji możesz też dodać zależności niezwiązane z Androidem.
Dodaj zależności dla potrzebnej implementacji w pliku build.gradle aplikacji lub modułu:
Preferences DataStore
Dodaj te wiersze do sekcji zależności w pliku Gradle:
Groovy
dependencies { // Preferences DataStore (SharedPreferences like APIs) implementation "androidx.datastore:datastore-preferences:1.2.1" // Alternatively - without an Android dependency. implementation "androidx.datastore:datastore-preferences-core:1.2.1" }
Kotlin
dependencies { // Preferences DataStore (SharedPreferences like APIs) implementation("androidx.datastore:datastore-preferences:1.2.1") // Alternatively - without an Android dependency. implementation("androidx.datastore:datastore-preferences-core:1.2.1") }
Aby dodać opcjonalną obsługę RxJava, dodaj te zależności:
Groovy
dependencies { // optional - RxJava2 support implementation "androidx.datastore:datastore-preferences-rxjava2:1.2.1" // optional - RxJava3 support implementation "androidx.datastore:datastore-preferences-rxjava3:1.2.1" }
Kotlin
dependencies { // optional - RxJava2 support implementation("androidx.datastore:datastore-preferences-rxjava2:1.2.1") // optional - RxJava3 support implementation("androidx.datastore:datastore-preferences-rxjava3:1.2.1") }
DataStore
Dodaj te wiersze do sekcji zależności w pliku Gradle:
Groovy
dependencies { // Typed DataStore for custom data objects (for example, using Proto or JSON). implementation "androidx.datastore:datastore:1.2.1" // Alternatively - without an Android dependency. implementation "androidx.datastore:datastore-core:1.2.1" }
Kotlin
dependencies { // Typed DataStore for custom data objects (for example, using Proto or JSON). implementation("androidx.datastore:datastore:1.2.1") // Alternatively - without an Android dependency. implementation("androidx.datastore:datastore-core:1.2.1") }
Dodaj te opcjonalne zależności, aby włączyć obsługę RxJava:
Groovy
dependencies { // optional - RxJava2 support implementation "androidx.datastore:datastore-rxjava2:1.2.1" // optional - RxJava3 support implementation "androidx.datastore:datastore-rxjava3:1.2.1" }
Kotlin
dependencies { // optional - RxJava2 support implementation("androidx.datastore:datastore-rxjava2:1.2.1") // optional - RxJava3 support implementation("androidx.datastore:datastore-rxjava3:1.2.1") }
Aby serializować treści, dodaj zależności serializacji Protocol Buffers lub JSON.
Serializacja JSON
Aby używać serializacji JSON, dodaj do pliku Gradle ten ciąg:
Groovy
plugins { id("org.jetbrains.kotlin.plugin.serialization") version "2.2.20" } dependencies { implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0" }
Kotlin
plugins { id("org.jetbrains.kotlin.plugin.serialization") version "2.2.20" } dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0") }
Serializacja buforów protokołu
Aby używać serializacji Protobuf, dodaj do pliku Gradle:
Groovy
plugins { id("com.google.protobuf") version "0.9.5" } dependencies { implementation "com.google.protobuf:protobuf-kotlin-lite:4.32.1" } protobuf { protoc { artifact = "com.google.protobuf:protoc:4.32.1" } generateProtoTasks { all().forEach { task -> task.builtins { create("java") { option("lite") } create("kotlin") } } } }
Kotlin
plugins { id("com.google.protobuf") version "0.9.5" } dependencies { implementation("com.google.protobuf:protobuf-kotlin-lite:4.32.1") } protobuf { protoc { artifact = "com.google.protobuf:protoc:4.32.1" } generateProtoTasks { all().forEach { task -> task.builtins { create("java") { option("lite") } create("kotlin") } } } }
Prześlij opinię
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Przed utworzeniem nowego problemu 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 1.3
Wersja 1.3.0-rc01
12 października 2026 r.
Publikacja androidx.datastore:datastore-*:1.3.0-rc01 Wersja 1.3.0-rc01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Użyj
WindowCompat#enableEdgeToEdge(Window)zamiastEdgeToEdge#enable()(Ibff3e)
Poprawki błędów
- Zależność
androidx.lifecycle:lifecycle-runtimezostała zaktualizowana do wersji 2.10.0. Ta wersja jest wymagana, aby można było uruchamiać kontrole lint w pakiecie czasu działania cyklu życia w przypadku wtyczki Androida do obsługi Gradle w wersji 9.5.0-alpha04 lub nowszej. (I99bfd, b/556807521)
Wersja 1.3.0-alpha11
9 września 2026 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha11 Wersja 1.3.0-alpha11 zawiera te zmiany.
Poprawki błędów
- Ścieżka do pliku nie jest uwzględniana w komunikatach
CorruptionExceptionwyświetlanych w przypadku błędów analizy ustawieńDataStore. (Ia9e8f)
Wersja 1.3.0-alpha10
29 lipca 2026 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha10 Wersja 1.3.0-alpha10 zawiera te zmiany.
Zmiany w interfejsie API
GeneralSecurityException in AeadSerializer is now wrapped in CorruptionException for better CorruptionHandler integration.(I26e56, b/514941919)
Wersja 1.3.0-alpha09
6 maja 2026 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha09 Wersja 1.3.0-alpha09 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Ustaw
ReThrowCorruptionHandlerjako publiczną. (I137bb, b/427722902) - Zapewnij spójność cyklu życia śledzenia ze śledzeniem systemu. (Ib391b)
Wersja 1.3.0-alpha08
22 kwietnia 2026 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha08 Wersja 1.3.0-alpha08 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy obsługę prywatnego systemu plików źródła (OPFS) w DataStore na platformach internetowych. Ta implementacja wprowadza
WebOpfsStoragei obejmuje obsługę architektury asynchronicznych operacji wejścia/wyjścia plików, powiadomień między kartami za pomocą interfejsu APIBroadcastChanneloraz rozproszonego blokowania za pomocą natywnego interfejsuWeb Locks APIw celu uzyskania wyłącznego dostępu do zapisu. Id7f5807 b/316376114
Zmiany w interfejsie API
- Wprowadziliśmy interfejsy API
WebLocalStorageiWebSessionStoragedo jawnego zarządzania typem pamięci masowej w środowiskach internetowych. I35fa259b b/316376114
Wersja 1.3.0-alpha07
11 marca 2026 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha07 Wersja 1.3.0-alpha07 zawiera te zmiany.
Nowe funkcje
- Obsługa szyfrowania: wprowadziliśmy nowy artefakt
androidx.datastore:datastore-tink, który umożliwia szyfrowanie magazynu danych za pomocą biblioteki Tink. W tym module wprowadzamyAeadSerializer, czyli nową klasę opakowującą, która implementujeSerializer<T>i używa szyfrowania uwierzytelnionego z danymi powiązanymi (AEAD) w Tink do szyfrowania i odszyfrowywania danych.AeadSerializerjest dostępny na platformach docelowych JVM i Android. - Nowy interfejs
DataStoreBuilder API: wprowadziliśmyDataStore.Builder<T>jako skalowalną alternatywę dlaDataStoreFactory. Dzięki temu nowemu interfejsowi API użytkownicy mogą teraz udostępniać własną logikę uszkodzeń za pomocąsetCorruptionHandler. Dodatkowo interfejsBuilderAPI wymaga, abyDataStorebył inicjowany za pomocąCoroutineContextzamiastCoroutineScope. Jest to ulepszenie w zakresie współbieżności strukturalnej, ponieważ umożliwia wywołującym określanie zachowania wykonania (np. konkretnych dyspozytorów) bez wymuszania naDataStorenieodpowiedniego zarządzania cyklem życia zakresu wywołującego lub powiązania z nim.Uwaga: zalecamy wszystkim użytkownikom przejście z interfejsów API
DataStoreFactoryna nowe interfejsy APIDataStore.Builder. WymagającCoroutineContextzamiastCoroutineScope, interfejs API wymusza lepszą strukturę równoczesności. Dzięki temu operacje DataStore nie są powiązane z krótkotrwałymi cyklami życia interfejsu (np.viewModelScope), co zapobiega przedwczesnemu anulowaniu i potencjalnej utracie danych.Ostrzeżenie: upewnij się, że obiekt
CoroutineContextprzekazany do kreatora maJobi że jest on ograniczony do aplikacji. Jeśli kontekst zostanie anulowany, operacje wewnętrzneDataStorezostaną przedwcześnie zakończone.
Zmiany w interfejsie API
Wprowadziliśmy nowy artefakt
androidx.datastore:datastore-tinkobsługujący szyfrowanieDataStore. (Ic106d, b/167697691)Aby zaszyfrować dane za pomocą Tink, wykonaj te czynności:
Utwórz klucz za pomocą interfejsów API Tink:
val keysetHandle = AndroidKeysetManager.Builder() .withSharedPref(applicationContext, "keyset", "keyset_prefs") .withKeyTemplate(KeyTemplate.createFrom(PredefinedAeadParameters.AES256_GCM)) .withMasterKeyUri("android-keystore://master_key") .build() .keysetHandleUtwórz obiekt
AeadSerializer, który opakowuje istniejący serializator:val aeadSerializer = AeadSerializer( // Use tink APIs to create an Aead object to encrypt/decrypt data. aead = keysetHandle.getPrimitive( RegistryConfiguration.get(), Aead::class.java, ), // AeadSerializer can wrap an existing serializer. wrappedSerializer = ExistingSerializer, // Specify a unique name to prevent a ciphertext swapping attack. associatedData = "settings.json".encodeToByteArray(), )Podczas tworzenia instancji magazynu danych użyj tego
aeadSerializerzamiast serializatora:val dataStore = dataStore( fileName = "settings.json", serializer = aeadSerializer, scope = scope, )
Wprowadziliśmy
DataStore.Builder<T>jako nowoczesną, skalowalną alternatywę dlaDataStoreFactory. (I3b110, b/267785821, b/400507108, b/368385681, b/427722902, b/370838564, b/167697691)
Wersja 1.3.0-alpha06
25 lutego 2026 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha06 Wersja 1.3.0-alpha06 zawiera te zmiany.
Nowe funkcje
DataStoreobsługuje terazandroidx.tracingna platformie docelowej Android. Możesz utworzyćDataStoreze śledzeniem, przekazując instancjęandroidx.tracing.Tracerdo funkcjiDataStoreFactory.createWithTracing(). (I71bc2, b/427722902)
Wersja 1.3.0-alpha05
28 stycznia 2026 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha05 Wersja 1.3.0-alpha05 zawiera te zmiany.
Nowe funkcje
- Profile bazowe zostały dodane do magazynu danych. (3916245,b/469127532).
- Wdrożenie obsługi WASM/JS w DataStore za pomocą
localStorage. Daje to wyraźną przewagę nad dotychczasową implementacjąsessionStorage, ponieważ umożliwia powiadomienia o zdarzeniach i synchronizację między kartami. (I67246, b/441511612)
Wersja 1.3.0-alpha04
14 stycznia 2026 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha04 Wersja 1.3.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaliśmy funkcję kopiowania narzędziowego, która może służyć do aktualizowania danych w ustawieniach
DataStore. (I70a18, b/467120382)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że dane binarne mogły być nieprawidłowo sformatowane podczas przechowywania. W tym celu zastąpiliśmy obsługę ciągów znaków UTF-8 kodowaniem Base64 w przypadku internetu. (Ie3178, b/473790107)
Wersja 1.3.0-alpha03
17 grudnia 2025 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha03 Wersja 1.3.0-alpha03 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z nieudaną zmianą nazwy tymczasowego pliku magazynu danych. (I94f89, b/203087070)
- Rozwiązaliśmy problem, który powodował utratę aktualizacji podczas jednoczesnego odczytu i zapisu. Może wystąpić sytuacja wyścigu między nowym kolektorem na
DataStore.dataa jednoczesnym wywołaniemupdateData, co spowoduje, że kolektor nie zarejestruje nowej wartości. (I6a427, b/431787506)
Wersja 1.3.0-alpha02
3 grudnia 2025 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha02 Wersja 1.3.0-alpha02 zawiera te zatwierdzenia.
Poprawki błędów
- Dodaj cel js() do pliku
androidx.datastore. (I1f62b, b/441511612) - Wymuszaj kolejność FIFO w aktualizacjach
GuavaDataStore. (I6fd00,b/451491257)
Wersja 1.3.0-alpha01
19 listopada 2025 r.
Publikacja androidx.datastore:datastore-*:1.3.0-alpha01 Wersja 1.3.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy obsługę KMP Web w
DataStoreza pomocą interfejsu APIsessionStorage. Ta funkcja umożliwia usłudzeDataStoretymczasowe przechowywanie danych na jednej karcie przeglądarki. (I60fad, b/316376114)
Wersja 1.2
Wersja 1.2.1
11 marca 2026 r.
Publikacja androidx.datastore:datastore-*:1.2.1 Wersja 1.2.1 zawiera te zmiany.
Bez zmian
- Ta wersja zawiera drobne poprawki błędów infrastruktury i nie obejmuje żadnych zmian w interfejsie DataStore API ani w jego działaniu w porównaniu z wersją 1.2.0.
Wersja 1.2.0
19 listopada 2025 r.
Publikacja androidx.datastore:datastore-*:1.2.0 Wersja 1.2.0 zawiera te zatwierdzenia.
Główne zmiany od wersji 1.1.0
Obsługa Java/Guava:
- Dodano nowy moduł
datastore-guava, aby udostępniać interfejsy API przyjazne dla użytkowników języka Java i biblioteki GuavaListenableFutureza pomocąGuavaDataStore. - Dodaliśmy obsługę wielu procesów w
GuavaDataStore. - Dodano przeciążenie dla
GuavaDataStore.from, które akceptujeExecutorw języku Java (zamiastCoroutineContext) i używaandroidx.core.util.Function.
Obsługa bezpośredniego uruchamiania:
- Teraz obsługiwane jest korzystanie z DataStore w trybie bezpośredniego uruchamiania. Nowe interfejsy API, takie jak
createInDeviceProtectedStorage()wDataStoreFactoryideviceProtectedDataStore()wDataStoreDelegate, umożliwiają tworzenie magazynu danych w pamięci chronionej urządzenia.
Zmiany dotyczące miejsca na dane i interfejsu API:
- Dodano
PreferencesFileSerializer, który implementujeandroidx.datastore.core.Serializerdo użycia zFileStorage. - Zdefiniowano domyślny konstruktor dla
ReplaceFileCorruptionHandlerna potrzeby powszechnego użycia kodu.
Poprawki błędów:
- Rozwiązaliśmy problem z
java.lang.UnsatisfiedLinkErrorpodczas używaniaDataStorew aplikacji zoptymalizowanej za pomocą R8, ale nieużywającej standardowego pliku ProGuard. - Rozwiązaliśmy problem, który powodował, że operacje
GuavaDataStoremogły być nieprawidłowo wykonywane w wątku wywołującym (np. w wątku głównym) zamiast w określonym dyspozytorze wejścia-wyjścia. - Rozwiązaliśmy problem z
FileNotFoundExceptionwOkioStoragepodczas uruchamiania, dodając drugą próbę odczytu danych w przypadku sytuacji wyścigu.
Wersja 1.2.0-rc01
5 listopada 2025 r.
Publikacja androidx.datastore:datastore-*:1.2.0-rc01 Wersja 1.2.0-rc01 zawiera te zmiany.
Wersja 1.2.0-beta01
22 października 2025 r.
Publikacja androidx.datastore:datastore-*:1.2.0-beta01 Wersja 1.2.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Ustaw
CorruptionHandlerjako publiczną. (I9ac35, b/452406457) - Używaj konta
androidx.core.util.Functionw aplikacjiGuavaDataStore. (I71eae, b/448563999) - Dodaj przeciążenie dla funkcji
GuavaDataStore.from, które przyjmuje obiekt Executor zamiast obiektuCoroutineContext. (I989fa, b/448563183)
Poprawki błędów
- Naprawiono problem
java.lang.UnsatisfiedLinkErrorpodczas używaniaDataStorew aplikacji zoptymalizowanej za pomocą R8, która nie korzysta zgetDefaultProguardFile('android-proguard-optimize.txt'). (I27d0d, b/434696293) - Naprawiliśmy błąd, który powodował, że operacje
GuavaDataStoremogły być nieprawidłowo uruchamiane w wątku wywołującym (np. w wątku głównym) zamiast w określonym dyspozytorze wejścia-wyjścia. (Ic91ea,b/441801112)
Wersja 1.2.0-alpha02
7 maja 2025 r.
Publikacja androidx.datastore:datastore-*:1.2.0-alpha02 Wersja 1.2.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano obsługę wielu procesów w
GuavaDataStore. (e0d608a). - Dodaliśmy metodę pomocniczą do tworzenia obiektu
GuavaDataStorez obiektuDataStore. (9af26f4) - Projekty opublikowane w Kotlin 2.0 wymagają do działania wtyczki KGP w wersji 2.0.0 lub nowszej. (Idb6b5)
- Zastąp istniejące przeciążenie
datastoremetodą delegowaną, aby zainicjować magazyn danych, który będzie używany podczas bezpośredniego uruchamiania. (If71b9)
Wersja 1.2.0-alpha01
26 marca 2025 r.
Publikacja androidx.datastore:datastore-*:1.2.0-alpha01 Wersja 1.2.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Dodano moduł
datastore-guava, aby udostępniać interfejsy API przyjazne dla użytkowników Javy i GuavyListenableFutureza pomocąGuavaDataStore. (Iadd5e0) - Korzystanie z aplikacji
DataStorew trybieDirectBootjest teraz obsługiwane. Aby utworzyć magazyn danych, który będzie używany w trybie bezpośredniego uruchamiania, musisz go utworzyć w pamięci chronionej urządzenia. Możesz to zrobić za pomocą tych nowych interfejsów APIDataStore:createInDeviceProtectedStorage()wDataStoreFactoryideviceProtectedDataStore()wDataStoreDelegate. (Ib90e56)
Zmiany w interfejsie API
- Dodano
PreferencesFileSerializer, który implementuje interfejsandroidx.datastore.core.Serializerdo użycia zFileStorage. (I4c71f3)
Poprawki błędów
- Rozwiązaliśmy problem z
FileNotFoundExceptionwOkioStoragepodczas uruchamiania, dodając drugą próbę odczytu danych w przypadku sytuacji wyścigu. (I43b3fb, b/337870543) - Zdefiniowano domyślny konstruktor dla
ReplaceFileCorruptionHandlerna potrzeby powszechnego użycia kodu. (I795b05, b/358138957)
Wersja 1.1
Wersja 1.1.7
20 maja 2025 r.
Publikacja androidx.datastore:datastore-*:1.1.7 Wersja 1.1.7 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z brakującymi regułami Proguard w artefakcie Androida
datastore-preferences-core. (3f3f6e, b/413078297)
Wersja 1.1.6
7 maja 2025 r.
Publikacja androidx.datastore:datastore-*:1.1.6 Wersja 1.1.6 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że metadane Gradle w wersji
1.1.5były uszkodzone. Ten problem był spowodowany błędem w nowej wtyczce AGP KMP DSL, który uniemożliwiał automatyczne dołączanie metadanych dla wszystkich platform docelowych. Błąd powoduje, że niektóre metody DataStore na Androida nie są już widoczne w kompilacjach klientów. Rozwiązanie polega na użyciu starszego DSLandroidw wersjibuild.gradlezamiastandroidLibrary. (7801abf)
Wersja 1.1.5
23 kwietnia 2025 r.
Publikacja androidx.datastore:datastore-*:1.1.5 Wersja 1.1.5 zawiera te zatwierdzenia.
Poprawki błędów
- Aby rozwiązać problemy z
CorruptionExceptionwPreferencesDataStore, domyślne miejsce na dane zostało zmienione zOkioStoragenaFileStorage. Ta zmiana została wprowadzona przez dodaniePreferencesFileSerializer. b/346197747
Wersja 1.1.4
26 marca 2025 r.
Publikacja androidx.datastore:datastore-*:1.1.4 Wersja 1.1.4 zawiera te zatwierdzenia.
Poprawki błędów
- Zastąp domyślne miejsce na dane z
OkioStoragenaFileStorage, aby zwiększyć niezawodność przez zmniejszenieCorruptionException. (I71181, b/346197747)
Wersja 1.1.3
26 lutego 2025 r.
Publikacja androidx.datastore:datastore-*:1.1.3 Wersja 1.1.3 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem
FileNotFoundExceptionwOkioStorage, który występował podczas uruchamiania aplikacji. Jeśli pierwsza próba odczytu pliku się nie powiedzie, zostanie podjęta druga próba na wypadek, gdyby wystąpiła sytuacja wyścigu, ponieważ plik został utworzony przez inny proces podczas pierwszego odczytu. (I43b3f, b/337870543)
Wersja 1.1.2
15 stycznia 2025 r.
Publikacja androidx.datastore:datastore-*:1.1.2 Wersja 1.1.2 zawiera te zatwierdzenia.
Poprawki błędów
- 8-krotne skrócenie czasu oczekiwania na odczyt (
DataStore.data.first()). (22b8a40) ReplaceFileCorruptionHandlermożna utworzyć z kodu wspólnego KMP. (7632e839)
Wersja 1.1.1
1 maja 2024 r.
Publikacja androidx.datastore:datastore-*:1.1.1 Wersja 1.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Usunięto fałszywy alarm w systemie Linux dotyczący błędu „Resource deadlock would occur” (Wystąpiłby zakleszczenie zasobów) w przypadku, gdy wiele instancji
DataStorepróbuje zapisywać dane z różnych procesów, wycofując blokadę pliku.
Wersja 1.1.0
17 kwietnia 2024 r.
Publikacja androidx.datastore:datastore-*:1.1.0 Wersja 1.1.0 zawiera te zmiany.
Najważniejsze zmiany od wersji 1.0.0
Więcej informacji znajdziesz w informacjach o wersji 1.1.0 w wersjach alfa i beta. Oto niektóre z najważniejszych zmian w wersji 1.1.0:
- DataStore obsługuje teraz wiele procesów uzyskujących dostęp do tego samego pliku, a także możliwość obserwacji w różnych procesach.
- Nowy interfejs Storage umożliwia dostosowywanie sposobu przechowywania lub serializacji modeli danych.
- Możesz teraz używać DataStore w projektach Kotlin Multiplatform.
Wersja 1.1.0-rc01
3 kwietnia 2024 r.
Publikacja androidx.datastore:datastore-*:1.1.0-rc01 Wersja 1.1.0-rc01 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy problem ze spadkiem wydajności, który powodował, że wywołania
updateDatanie optymalizowały zapisów na dysku, jeśli nowe dane były takie same jak stare (d64cfb5). - Rozwiązaliśmy problem z sytuacją wyścigu, który powodował, że
MultiProcessDataStoremogło pomijać unieważnienia podczas inicjowania. ((b/326141553),(094c2dd))
Wersja 1.1.0-beta02
6 marca 2024 roku
Publikacja androidx.datastore:datastore-*:1.1.0-beta02 Wersja 1.1.0-beta02 zawiera te zmiany.
Poprawki błędów
- Funkcja poprawy skuteczności na urządzeniu
DataStorezbiera powiadomienia o aktualizacjach tylko wtedy, gdy są one widoczne. (b/267792241)- Pamiętaj, że ta zmiana może spowodować błąd
UncompletedCoroutinesErrorw testach, jeśli używasz biblioteki testowej Coroutines. Aby uniknąć tego problemu, podczas inicjowaniaDataStorew testach przekaż wartośćTestScope.backgroundScope.
- Pamiętaj, że ta zmiana może spowodować błąd
- Rozwiązaliśmy problem z zagnieżdżonymi wywołaniami
updateDataw tej samej instancji, które powodowały zakleszczenie. (b/241760537) - W przypadku niepowodzenia usunięcia
SharedPreferencespodczas migracjiDataStorenie będzie już zgłaszać błęduIOExceptions. (b/195553816) - Rozwiązaliśmy problem polegający na tym, że zmiana nazwy pliku kończyła się niepowodzeniem podczas
updateDataw środowiskach JVM innych niż Android. (b/203087070) - Rozwiązaliśmy problem, który powodował, że po zainicjowaniu
DataStorenie była obsługiwana metodaCorruptionException. (b/289582516)
Wersja 1.1.0-beta01
10 stycznia 2024 r.
Wersja androidx.datastore:datastore-*:1.1.0-beta01 została opublikowana bez zmian od 1.1.0-alpha07. Wersja 1.1.0-beta01 zawiera te zatwierdzenia.
Wersja 1.1.0-alpha07
29 listopada 2023 r.
Publikacja androidx.datastore:datastore-*:1.1.0-alpha07 Wersja 1.1.0-alpha07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Metody
MultiProcessDataStoreFactorynie są już eksperymentalne.Adnotacja@ExperimentalMultiProcessDataStorezostała całkowicie usunięta. (Ieee54, I8e607)
Poprawki błędów
- Wprowadziliśmy usunięcie adnotacji
@ExperimentalMultiProcessDataStorew wersji 1.1.0-alpha07. (I8e607)
Wersja 1.1.0-alpha06
1 listopada 2023 roku
Publikacja androidx.datastore:datastore-*:1.1.0-alpha06 Wersja 1.1.0-alpha06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Metoda fabryczna
createSingleProcessCoordinatorotrzymuje teraz ścieżkę pliku (String,java.io.Fileiokio.Path), aby zachować spójność zcreateMultiProcessCoordinator. (I211c8, b/305755935)
Wersja 1.1.0-alpha05
6 września 2023 r.
Publikacja androidx.datastore:datastore-*:1.1.0-alpha05 Wersja 1.1.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Usługa Datastore
FileStoragejest już publicznie dostępna, więc klienci mogą podawać parametry niestandardowe. (Icb985) - Zmieniono konstruktor
OkioStorage, aby akceptował elementInterProcessCoordinator, dzięki czemu można go używać na Androidzie zMultiProcessCoordinator. (Iecea3)
Poprawki błędów
- Naprawiono błąd, który uniemożliwiał
MultiProcessCoordinatormonitorowanie wielu plików w tym samym katalogu. - Naprawiono błąd, który uniemożliwiał wykrywanie duplikatów plików, jeśli ścieżki plików nie były znormalizowane.
- Popraw nieprawidłowe wartości zwracane przez
RxDataStore#isDisposed. - Napraw brakującą konfigurację ProGuard dla artefaktu
datstore-preferences-core.
Wersja 1.1.0-alpha04
5 kwietnia 2023 r.
Publikacja androidx.datastore:datastore-*:1.1.0-alpha04 Wersja 1.1.0-alpha04 zawiera te zatwierdzenia.
Poprawki błędów
- Ulepsz wewnętrzną implementację, aby uniknąć sytuacji wyścigu, w której przepływ danych
DataStoremoże po aktualizacji emitować starszą wartość.
Wersja 1.1.0-alpha03
24 marca 2023 r.
Publikacja androidx.datastore:datastore-*:1.1.0-alpha03
Poprawki błędów
- Usunięto ograniczenia zależności z artefaktów Maven, aby obejść problem z kompilacją w Kotlin Native Targets (b/274786186, KT-57531).
Wersja 1.1.0-alpha02
22 marca 2023 r.
Publikacja androidx.datastore:datastore-*:1.1.0-alpha02 Wersja 1.1.0-alpha02 zawiera te zatwierdzenia.
Uwaga
Pamiętaj, że ta wersja zawiera ważną wewnętrzną refaktoryzację, która łączy implementacje DataStore w przypadku jednego i wielu procesów. Zwróć uwagę na możliwe niezamierzone zmiany w zachowaniu (np. czas powiadomień o aktualizacjach). Takie zmiany możesz zgłaszać za pomocą komponentu Issue Tracker.
Nowe funkcje
- Możesz teraz używać
DataStorew projektach KMM. Pamiętaj, że miejsca docelowe DataStore inne niż Android są nadal eksperymentalne, ale zdecydowaliśmy się połączyć wersje, aby ułatwić deweloperom ich wypróbowanie. - Funkcje wieloprocesowe zostały przeniesione z
androidx.datastore.multiprocessdoandroidx.datastore.core. - Dodaj nową metodę fabryczną w klasie
androidx.datastore.core.MultiProcessDataStoreFactory, aby tworzyć instancje DataStore z obiektamiStoragedo operacji na plikach. - Dodano nowy interfejs
InterProcessCoordinator, który ułatwia komunikację między wieloma instancjami DataStore w różnych procesach. Pamiętaj, że implementacjaInterProcessCoordinatorw wielu procesach jest dostępna tylko na Androidzie.
Zmiany w interfejsie API
- Dodaj
InterProcessCoordinatordoStorageConnectionw interfejsie datastore-core (I555bb) - Zmień interfejsy API w datastore-core
MultiProcessDataStoreFactory, aby używać Storage. (Iac02f) - Przeniesienie publicznych interfejsów API z datastore-multiprocess do datastore-core (I76d7c)
- Udostępniono
PreferencesSerializerz datastore-preferences-core (I4b788) - Dodawanie adnotacji
@JvmDefaultWithCompatibility(I8f206)
Wersja 1.1.0-alpha01
9 listopada 2022 r.
Publikacja androidx.datastore:datastore-*:1.1.0-alpha01 Wersja 1.1.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Obsługa przypadków użycia z wieloma procesami, w których spójność danych jest gwarantowana w przypadku
DataStoreinstancji w różnych procesach. DodajMultiProcessDataStoreFactory#create, aby utworzyć takie instancjeDataStore. - Nowy interfejs pamięci masowej, który umożliwia przełączanie podstawowego mechanizmu pamięci masowej dla
Datastore. Dostępne są implementacje dla java.io i okio. FabrykiDataStoremają nowe metody, które akceptują ten obiekt Storage.
Zmiany w interfejsie API
- Zmień interfejsy API w datastore-core
MultiProcessDataStoreFactory, aby używać Storage. (Iac02f) - Przeniesienie publicznych interfejsów API z datastore-multiprocess do datastore-core (I76d7c)
- Udostępniono
PreferencesSerializerz datastore-preferences-core (I4b788)
Wersja 1.0.0
Wersja 1.0.0
4 sierpnia 2021 r.
Publikacja androidx.datastore:datastore-*:1.0.0 Wersja 1.0.0 zawiera te zatwierdzenia.
Główne funkcje wersji 1.0.0
Jetpack DataStore to rozwiązanie do przechowywania danych, które umożliwia przechowywanie par klucz-wartość lub obiektów z określonym typem za pomocą buforów protokołu. DataStore używa współprogramów i przepływów w języku Kotlin do asynchronicznego, spójnego i transakcyjnego przechowywania danych.
Wersja 1.0.0-rc02
21 lipca 2021 r.
Publikacja androidx.datastore:datastore-*:1.0.0-rc02 Wersja 1.0.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
- Wyjaśnienie, że funkcja
SharedPreferencesMigrationnie działa, jeśli nie ma kluczy. (Icfa32, b/192824325) - Naprawiono błąd, który powodował, że funkcja
SharedPreferencesMigrationskonstruowana za pomocą funkcjiMIGRATE_ALL_KEYSzgłaszała wyjątek, jeśli żądany klucz jeszcze nie istniał. (Ie318a, b/192824325)
Wersja 1.0.0-rc01
30 czerwca 2021 r.
Publikacja androidx.datastore:datastore-*:1.0.0-rc01 Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd, w którym plik .java został przypadkowo dodany do końcowego pliku JAR (I65d96, b/188985637).
Wersja 1.0.0-beta02
16 czerwca 2021 r.
Publikacja androidx.datastore:datastore-*:1.0.0-beta02 Wersja 1.0.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Fix
ClassVerificationFailure(b/187450483)
Wersja 1.0.0-beta01
21 kwietnia 2021 r.
Publikacja androidx.datastore:datastore-*:1.0.0-beta01 Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto przeciążenia JVM w przypadku metod tylko w języku Kotlin (I2adc7).
Poprawki błędów
- Naprawiono błąd, w którym delegaci magazynu danych mogli powodować wyciek kontekstów (Ie96fc, b/184415662).
Wersja 1.0.0-alpha08
10 marca 2021 r.
Publikacja androidx.datastore:datastore-*:1.0.0-alpha08 Wersja 1.0.0-alpha08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Teraz możesz dodać do delegata właściwości
dataStoreipreferencesDataStoremigrację zależną od kontekstu. (I4ef69, b/173726702) - Dodaje funkcje pomocnicze do pobierania nazwy pliku, jeśli nie używasz już delegata lub kontekstu datastore.createDataStore (I60f9a)
- Funkcje Serializer writeTo i readFrom są teraz zawieszane. Jeśli masz zaimplementowany Serializer, musisz zaktualizować funkcje, aby były funkcjami zawieszania. (I1e58e)
- Dodano delegatów właściwości dla użytkowników RxDataStore. (Ied768, b/173726702)
Poprawki błędów
- Wymuszanie ograniczeń dotyczących publicznego korzystania z eksperymentalnych interfejsów API (I6aa29, b/174531520)
Wersja 1.0.0-alpha07
24 lutego 2021 r.
Publikacja androidx.datastore:datastore-*:1.0.0-alpha07 Wersja 1.0.0-alpha07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Funkcja rozszerzenia
Context.createDataStorezostała usunięta i zastąpiona delegatem właściwości globalDataStore. Wywołaj globalDataStore raz na najwyższym poziomie w pliku Kotlin. Przykład:val Context.myDataStore by dataStore(...)Umieść go na najwyższym poziomie pliku Kotlin, aby istniała tylko jedna jego instancja. (I57215, b/173726702)
Funkcje RxDataStore są teraz w klasie RxDataStore, a nie w funkcjach rozszerzenia w DataStore. (Idccdb, b/177691248)
Jeśli chcesz przenieść EncryptedSharedPreferences (lub bezpośrednio uruchamiane SharedPreferences) do DataStore, możesz to zrobić za pomocą nowego konstruktora SharedPreferencesMigration, który umożliwia wstrzykiwanie SharedPreferences. (I8e04e, b/177278510)
Poprawki błędów
- Magazyn danych będzie teraz zgłaszać wyjątek, jeśli dla tego samego pliku jest aktywnych wiele magazynów danych. Jeśli nie zarządzasz DataStore jako pojedynczym obiektem lub nie masz pewności, że w przypadku pliku nie są jednocześnie aktywne 2 instancje DataStore, podczas odczytywania lub zapisywania danych w DataStore mogą pojawiać się wyjątki. Można je rozwiązać, zarządzając magazynem DataStore jako wzorcem Singleton. (Ib43f4, b/177691248)
- Poprawiono zachowanie anulowania, gdy anulowany jest zakres wywołującego. (I2c7b3)
Wersja 1.0.0-alpha06
13 stycznia 2021 r.
Publikacja androidx.datastore:datastore-*:1.0.0-alpha06 Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano kod otaczający RxJava dla DataStore. Artefakty
datastore-rxjava2/3zawierają otoczki podstawowych interfejsów DataStore API (RxDataStore,RxDataStoreBuilderiRxDataMigration). Artefaktydatastore-preferences-rxjava2/3zawierają narzędzie do tworzenia Preferences DataStore.
Zmiany w interfejsie API
- Ukryj interfejs CorruptionHandler. Nie było powodu, aby był publiczny, ponieważ fabryka DataStore akceptuje tylko ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
- Metoda
preferencesKey<T>(name: String): Key<T>została usunięta i zastąpiona metodami specyficznymi dla każdego obsługiwanego typu, np.preferencesKey<Int>("int")to terazintPreferencesKey("int")(Ibcfac, b/170311106).
Poprawki błędów
- Poprawki w dokumentacji DataStoreFactory, w której pominięto informację, że plik bazy danych jest tworzony w podkatalogu „datastore/”. (Ica222)
Wersja 1.0.0-alpha05
2 grudnia 2020 r.
Publikacja androidx.datastore:datastore-*:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Poprawki błędów
- Dodanie lepszej dokumentacji i wyjątków dotyczących jednoczesnych zapisów z magazynów danych. (Ia98a2, b/173522155, b/173726702)
- Teraz zezwalamy na zamykanie obiektu OutputStream przekazywanego do
Serializer.writeTo()(ale nie wymagamy tego). (I5c9bf, b/173037611)
Wersja 1.0.0-alpha04
17 listopada 2020 r.
Publikacja androidx.datastore:datastore-*:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z pakowaniem, który powodował awarię w Preference Datastore
1.0.0-alpha03:java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences- Wypadek został pierwotnie zgłoszony tutaj: b/173036843
- (I4712d, b/173036843)
Wersja 1.0.0-alpha03
11 listopada 2020 roku
Publikacja androidx.datastore:datastore-*:1.0.0-alpha03 Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
- Ustawienia obsługują teraz wartości typu double (co jest przydatne, jeśli potrzebujesz większej precyzji niż w przypadku wartości typu float) (I5be8f, b/169471808).
Zmiany w interfejsie API
- Utworzono zależność czystego Kotlina dla magazynu danych, aby umożliwić szybszą kompilację.
androidx.datastore:datastore-corezawiera podstawowe interfejsy API tylko dla Kotlina, aandroidx.datastore:datastorezawiera interfejsy API zależne od Androida (w tym konstruktorySharedPreferencesMigrationiContext.createDataStore)(I42d75, b/168512698). - Podział celów magazynu danych preferencji w celu przyspieszenia kompilacji Kotlin (Ia3c19)
Serializatory wymagają teraz nowej właściwości dla wartości domyślnej, która będzie używana, jeśli na dysku nie ma danych. Ułatwia to implementację niestandardowych serializatorów, dzięki czemu użytkownicy nie muszą specjalnie traktować pustych strumieni wejściowych (puste strumienie wejściowe nie są analizowane za pomocą JSON).
- Dodaliśmy też sprawdzanie, czy strumień wyjściowy przekazany do writeTo() nie jest zamknięty. Jeśli jest zamknięty, zgłaszane są wyjątki (I16e29).
Ustawienie konstruktora SharedPreferencesView jako wewnętrznego. Pierwotnie był on publiczny, aby umożliwić testowanie. Zamiast tego testy powinny utworzyć SharedPreferencesMigration i testować na tej podstawie. (I93891)
Poprawki błędów
- Parametr
produceFilewDataStoreFactoryiPreferenceDataStoreFactoryjest teraz ostatnim parametrem na liście, dzięki czemu możesz używać składni lambda w Kotlin. (Ibe7f1, b/169425442) - Zgodność z nowymi wymaganiami dotyczącymi interfejsu API w Kotlinie (I5ae1e)
Znane problemy
- Magazyn danych preferencji ulega awarii z powodu błędu
java.lang.NoClassDefFoundError. (b/173036843)
Wersja 1.0.0-alpha02
14 października 2020 r.
Publikacja androidx.datastore:datastore-core:1.0.0-alpha02 i androidx.datastore:datastore-preferences:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Poprawki błędów
- Dodano zabezpieczenie przed mutacją w datastore-core. I6aa84 – mutacja uniemożliwia korzystanie z magazynu danych osobom, które używają go z typami innymi niż proto i ustawienia.
- Dodano metodę
toStringdo pliku Preferences.kt, aby ułatwić debugowanie bieżącego stanu (I96006). - Dodano wyjątek, aby zapobiec niewłaściwemu użyciu
DataStore.Preferences(I1134d) - Naprawiliśmy błąd, który powodował awarię aplikacji podczas uruchamiania (I69237, b/168580258).
Wersja 1.0.0-alpha01
2 września 2020 r.
Publikacja androidx.datastore:datastore-core:1.0.0-alpha01 i androidx.datastore:datastore-preferences:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
Jetpack DataStore to nowe, ulepszone rozwiązanie do przechowywania danych, które ma zastąpić SharedPreferences. DataStore opiera się na współprogramach i przepływach w języku Kotlin i zapewnia 2 różne implementacje:
- Proto DataStore, który umożliwia przechowywanie obiektów z określonym typem (obsługiwanych przez bufor protokołu).
- magazyn danych preferencji, który przechowuje pary klucz-wartość;
Dane są przechowywane asynchronicznie, spójnie i transakcyjnie, co eliminuje większość wad SharedPreferences.