DataStore

Przechowuj dane asynchronicznie, spójnie i transakcyjnie, eliminując niektóre wady SharedPreferences.
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.

Tworzenie nowego zgłoszenia

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) zamiast EdgeToEdge#enable() (Ibff3e)

Poprawki błędów

  • Zależność androidx.lifecycle:lifecycle-runtime został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 CorruptionException wyś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 ReThrowCorruptionHandler jako 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 WebOpfsStorage i obejmuje obsługę architektury asynchronicznych operacji wejścia/wyjścia plików, powiadomień między kartami za pomocą interfejsu API BroadcastChannel oraz rozproszonego blokowania za pomocą natywnego interfejsu Web Locks API w celu uzyskania wyłącznego dostępu do zapisu. Id7f5807 b/316376114

Zmiany w interfejsie API

  • Wprowadziliśmy interfejsy API WebLocalStorage i WebSessionStorage do 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 wprowadzamy AeadSerializer, czyli nową klasę opakowującą, która implementuje Serializer<T> i używa szyfrowania uwierzytelnionego z danymi powiązanymi (AEAD) w Tink do szyfrowania i odszyfrowywania danych. AeadSerializer jest dostępny na platformach docelowych JVM i Android.
  • Nowy interfejs DataStore Builder API: wprowadziliśmy DataStore.Builder<T> jako skalowalną alternatywę dla DataStoreFactory. Dzięki temu nowemu interfejsowi API użytkownicy mogą teraz udostępniać własną logikę uszkodzeń za pomocą setCorruptionHandler. Dodatkowo interfejs Builder API wymaga, aby DataStore był inicjowany za pomocą CoroutineContext zamiast CoroutineScope. 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 na DataStore nieodpowiedniego zarządzania cyklem życia zakresu wywołującego lub powiązania z nim.

    Uwaga: zalecamy wszystkim użytkownikom przejście z interfejsów API DataStoreFactory na nowe interfejsy API DataStore.Builder. Wymagając CoroutineContext zamiast CoroutineScope, 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 CoroutineContext przekazany do kreatora ma Job i że jest on ograniczony do aplikacji. Jeśli kontekst zostanie anulowany, operacje wewnętrzne DataStore zostaną przedwcześnie zakończone.

Zmiany w interfejsie API

  • Wprowadziliśmy nowy artefakt androidx.datastore:datastore-tink obsługujący szyfrowanie DataStore. (Ic106d, b/167697691)

    Aby zaszyfrować dane za pomocą Tink, wykonaj te czynności:

    1. 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()
              .keysetHandle
      
    2. Utwó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(),
      )
      
    3. Podczas tworzenia instancji magazynu danych użyj tego aeadSerializer zamiast serializatora:

      val dataStore = dataStore(
          fileName = "settings.json",
          serializer = aeadSerializer,
          scope = scope,
      )
      
  • Wprowadziliśmy DataStore.Builder<T> jako nowoczesną, skalowalną alternatywę dla DataStoreFactory. (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

  • DataStore obsługuje teraz androidx.tracing na platformie docelowej Android. Możesz utworzyć DataStore ze śledzeniem, przekazując instancję androidx.tracing.Tracer do funkcji DataStoreFactory.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.data a jednoczesnym wywołaniem updateData, 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

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 DataStore za pomocą interfejsu API sessionStorage. Ta funkcja umożliwia usłudze DataStore tymczasowe 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 Guava ListenableFuture za pomocą GuavaDataStore.
  • Dodaliśmy obsługę wielu procesów w GuavaDataStore.
  • Dodano przeciążenie dla GuavaDataStore.from, które akceptuje Executor w języku Java (zamiast CoroutineContext) i używa androidx.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() w DataStoreFactory i deviceProtectedDataStore() w DataStoreDelegate, umożliwiają tworzenie magazynu danych w pamięci chronionej urządzenia.

Zmiany dotyczące miejsca na dane i interfejsu API:

  • Dodano PreferencesFileSerializer, który implementuje androidx.datastore.core.Serializer do użycia z FileStorage.
  • Zdefiniowano domyślny konstruktor dla ReplaceFileCorruptionHandler na potrzeby powszechnego użycia kodu.

Poprawki błędów:

  • Rozwiązaliśmy problem z java.lang.UnsatisfiedLinkError podczas używania DataStore w aplikacji zoptymalizowanej za pomocą R8, ale nieużywającej standardowego pliku ProGuard.
  • Rozwiązaliśmy problem, który powodował, że operacje GuavaDataStore mogł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 FileNotFoundException w OkioStorage podczas 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 CorruptionHandler jako publiczną. (I9ac35, b/452406457)
  • Używaj konta androidx.core.util.Function w aplikacji GuavaDataStore. (I71eae, b/448563999)
  • Dodaj przeciążenie dla funkcji GuavaDataStore.from, które przyjmuje obiekt Executor zamiast obiektu CoroutineContext. (I989fa, b/448563183)

Poprawki błędów

  • Naprawiono problem java.lang.UnsatisfiedLinkError podczas używania DataStore w aplikacji zoptymalizowanej za pomocą R8, która nie korzysta z getDefaultProguardFile('android-proguard-optimize.txt'). (I27d0d, b/434696293)
  • Naprawiliśmy błąd, który powodował, że operacje GuavaDataStore mogł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 GuavaDataStore z obiektu DataStore. (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 datastore metodą 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 Guavy ListenableFuture za pomocą GuavaDataStore. (Iadd5e0)
  • Korzystanie z aplikacji DataStore w trybie DirectBoot jest 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 API DataStore: createInDeviceProtectedStorage() w DataStoreFactory i deviceProtectedDataStore() w DataStoreDelegate. (Ib90e56)

Zmiany w interfejsie API

  • Dodano PreferencesFileSerializer, który implementuje interfejs androidx.datastore.core.Serializer do użycia z FileStorage. (I4c71f3)

Poprawki błędów

  • Rozwiązaliśmy problem z FileNotFoundException w OkioStorage podczas uruchamiania, dodając drugą próbę odczytu danych w przypadku sytuacji wyścigu. (I43b3fb, b/337870543)
  • Zdefiniowano domyślny konstruktor dla ReplaceFileCorruptionHandler na 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.5 był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 DSL android w wersji build.gradle zamiast androidLibrary. (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 CorruptionException w PreferencesDataStore, domyślne miejsce na dane zostało zmienione z OkioStorage na FileStorage. Ta zmiana została wprowadzona przez dodanie PreferencesFileSerializer. 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 OkioStorage na FileStorage, aby zwiększyć niezawodność przez zmniejszenie CorruptionException. (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 FileNotFoundException w OkioStorage, 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)
  • ReplaceFileCorruptionHandler moż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 DataStore pró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 updateData nie 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 MultiProcess DataStore mogł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 DataStore zbiera powiadomienia o aktualizacjach tylko wtedy, gdy są one widoczne. (b/267792241)
    • Pamiętaj, że ta zmiana może spowodować błąd UncompletedCoroutinesError w testach, jeśli używasz biblioteki testowej Coroutines. Aby uniknąć tego problemu, podczas inicjowania DataStore w testach przekaż wartość TestScope.backgroundScope.
  • Rozwiązaliśmy problem z zagnieżdżonymi wywołaniami updateData w tej samej instancji, które powodowały zakleszczenie. (b/241760537)
  • W przypadku niepowodzenia usunięcia SharedPreferences podczas migracji DataStore nie będzie już zgłaszać błędu IOExceptions. (b/195553816)
  • Rozwiązaliśmy problem polegający na tym, że zmiana nazwy pliku kończyła się niepowodzeniem podczas updateData w środowiskach JVM innych niż Android. (b/203087070)
  • Rozwiązaliśmy problem, który powodował, że po zainicjowaniu DataStore nie była obsługiwana metoda CorruptionException. (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 MultiProcessDataStoreFactory nie są już eksperymentalne.Adnotacja @ExperimentalMultiProcessDataStore została całkowicie usunięta. (Ieee54, I8e607)

Poprawki błędów

  • Wprowadziliśmy usunięcie adnotacji @ExperimentalMultiProcessDataStore w 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 createSingleProcessCoordinator otrzymuje teraz ścieżkę pliku (String, java.io.File i okio.Path), aby zachować spójność z createMultiProcessCoordinator. (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 FileStorage jest już publicznie dostępna, więc klienci mogą podawać parametry niestandardowe. (Icb985)
  • Zmieniono konstruktor OkioStorage, aby akceptował element InterProcessCoordinator, dzięki czemu można go używać na Androidzie z MultiProcessCoordinator. (Iecea3)

Poprawki błędów

  • Naprawiono błąd, który uniemożliwiał MultiProcessCoordinator monitorowanie 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 DataStore moż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ć DataStore w 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.multiprocess do androidx.datastore.core.
  • Dodaj nową metodę fabryczną w klasie androidx.datastore.core.MultiProcessDataStoreFactory, aby tworzyć instancje DataStore z obiektami Storage do operacji na plikach.
  • Dodano nowy interfejs InterProcessCoordinator, który ułatwia komunikację między wieloma instancjami DataStore w różnych procesach. Pamiętaj, że implementacja InterProcessCoordinator w wielu procesach jest dostępna tylko na Androidzie.

Zmiany w interfejsie API

  • Dodaj InterProcessCoordinator do StorageConnection w 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 PreferencesSerializer z 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 DataStore instancji w różnych procesach. Dodaj MultiProcessDataStoreFactory#create, aby utworzyć takie instancje DataStore.
  • 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. Fabryki DataStore mają 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 PreferencesSerializer z 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 SharedPreferencesMigration nie działa, jeśli nie ma kluczy. (Icfa32, b/192824325)
  • Naprawiono błąd, który powodował, że funkcja SharedPreferencesMigration skonstruowana za pomocą funkcji MIGRATE_ALL_KEYS zgł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

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 dataStore i preferencesDataStore migrację 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.createDataStore został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/3 zawierają otoczki podstawowych interfejsów DataStore API (RxDataStore, RxDataStoreBuilder i RxDataMigration). Artefakty datastore-preferences-rxjava2/3 zawierają 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 teraz intPreferencesKey("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

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-core zawiera podstawowe interfejsy API tylko dla Kotlina, a androidx.datastore:datastore zawiera interfejsy API zależne od Androida (w tym konstruktory SharedPreferencesMigration i Context.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 produceFile w DataStoreFactory i PreferenceDataStoreFactory jest 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ę toString do 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.