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
21 października 2026 r. 1.3.0 - - -

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. Możesz też dodać do obu implementacji 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.3.0"

        // Alternatively - without an Android dependency.
        implementation "androidx.datastore:datastore-preferences-core:1.3.0"
    }
    

Kotlin

    dependencies {
        // Preferences DataStore (SharedPreferences like APIs)
        implementation("androidx.datastore:datastore-preferences:1.3.0")

        // Alternatively - without an Android dependency.
        implementation("androidx.datastore:datastore-preferences-core:1.3.0")
    }
    

Aby dodać opcjonalną obsługę RxJava, dodaj te zależności:

Groovy

    dependencies {
        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-preferences-rxjava2:1.3.0"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-preferences-rxjava3:1.3.0"
    }
    

Kotlin

    dependencies {
        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-preferences-rxjava2:1.3.0")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-preferences-rxjava3:1.3.0")
    }
    

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.3.0"

        // Alternatively - without an Android dependency.
        implementation "androidx.datastore:datastore-core:1.3.0"
    }
    

Kotlin

    dependencies {
        // Typed DataStore for custom data objects (for example, using Proto or JSON).
        implementation("androidx.datastore:datastore:1.3.0")

        // Alternatively - without an Android dependency.
        implementation("androidx.datastore:datastore-core:1.3.0")
    }
    

Dodaj te opcjonalne zależności, aby włączyć obsługę RxJava:

Groovy

    dependencies {
        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-rxjava2:1.3.0"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-rxjava3:1.3.0"
    }
    

Kotlin

    dependencies {
        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-rxjava2:1.3.0")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-rxjava3:1.3.0")
    }
    

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. Daj nam znać, jeśli znajdziesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki. 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

21 października 2026 r.

Publikacja androidx.datastore:datastore-*:1.3.0 Wersja 1.3.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.2.0:

Nowe funkcje

  • Obsługa pamięci masowej w internecie: wprowadziliśmy opcje pamięci masowej KMP w internecie, co umożliwia elastyczne przechowywanie danych w przypadku różnych celów internetowych:

    • sessionStorage (WebSessionStorage): umożliwia tymczasowe przechowywanie danych w ramach jednej karty przeglądarki.
    • localStorage (WebLocalStorage): umożliwia korzystanie z pamięci trwałej z powiadomieniami o zdarzeniach i synchronizacją między kartami.
    • Origin Private File System (WebOpfsStorage): zapewnia obsługę systemu plików za pomocą OPFS, oferując asynchroniczne operacje wejścia/wyjścia plików i powiadomienia między kartami.
  • Obsługa szyfrowania (datastore-tink): dodaliśmy nowy artefakt androidx.datastore:datastore-tink, który zapewnia obsługę szyfrowania za pomocą biblioteki Tink. Wprowadza AeadSerializer do szyfrowania i odszyfrowywania danych za pomocą szyfrowania uwierzytelnionego z danymi powiązanymi (AEAD).

  • Obsługa śledzenia: dodaliśmy obsługę androidx.tracing na platformie docelowej Android.

  • Interfejs API DataStore.Builder: wprowadziliśmy interfejs DataStore.Builder<T> jako nowoczesną, skalowalną alternatywę dla interfejsu DataStoreFactory. Wymaga CoroutineContext zamiast CoroutineScope, aby zapewnić lepszą równoczesność strukturalną.

  • Profile podstawowe: dodaliśmy profile podstawowe do aplikacji datastore, aby zwiększyć wydajność podczas uruchamiania.

Zmiany w interfejsie API

  • Interfejsy API DataStore.Builder, ReThrowCorruptionHandler i InterProcessCoordinator zostały zaktualizowane do wersji public.

Poprawki błędów i ulepszenia

  • Dodaliśmy informacje o ścieżce do pliku bazowego do komunikatów CorruptionException, aby ułatwić debugowanie w przypadku błędów analizy.

  • Naprawiliśmy potencjalną utratę danych w usłudze GuavaDataStore przez wymuszenie ścisłego porządkowania aktualizacji według metody FIFO (pierwsze na wejściu, pierwsze na wyjściu).

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 do uruchamiania kontroli linta w pakiecie środowiska wykonawczego cyklu życia z AGP 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 zatwierdzenia.

Poprawki błędów

  • Ścieżka 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 zatwierdzenia.

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 publiczny. (I137bb, b/427722902)
  • Ujednolicenie 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 klasę AeadSerializer, która jest nową klasą otoki implementującą interfejs Serializer<T> i wykorzystującą szyfrowanie uwierzytelnione z danymi powiązanymi (AEAD) narzędzia 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 API Builder wymaga, aby obiekt DataStore był inicjowany za pomocą CoroutineContext, a nie CoroutineScope. Jest to ulepszenie w zakresie współbieżności strukturalnej, ponieważ umożliwia wywołującym definiowanie zachowania wykonywania (np. konkretnych obiektów Dispatcher) bez wymuszania na obiekcie DataStore nieprawidłowego zarządzania cyklem życia zakresu wywołującego lub wiązania się 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ównoległoś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 obiektu Builder ma właściwość 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, której można używać 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, aby zapobiec pomijaniu aktualizacji podczas jednoczesnego odczytu i zapisu. Między nowym kolektorem w DataStore.data a równoczesnym wywołaniem updateData może wystąpić sytuacja wyścigu, co spowoduje, że kolektor nie otrzyma 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 zatwierdzenia.

Bez zmian

  • Ta wersja zawiera drobne poprawki błędów infrastruktury i nie wprowadza żadnych zmian w interfejsie Datastore API ani w zachowaniu 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ępnić interfejsy API przyjazne dla użytkowników Java i 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 trybu Direct Boot:

  • 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 wspólnego kodu.

Poprawki błędów:

  • Rozwiązaliśmy problem java.lang.UnsatisfiedLinkError podczas korzystania z 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 uruchamiane w wątku wywołującym (np. 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 zatwierdzenia.

Zmiany w interfejsie API

  • Ustaw CorruptionHandler jako publiczny. (I9ac35, b/452406457)
  • Używaj konta androidx.core.util.Function w aplikacji GuavaDataStore. (I71eae, b/448563999)
  • Dodaj przeciążenie dla GuavaDataStore.from, które przyjmuje Executor zamiast CoroutineContext. (I989fa, b/448563183)

Poprawki błędów

  • Naprawiono błąd 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)
  • Rozwiązaliśmy problem, który powodował, że operacje GuavaDataStore mogły być nieprawidłowo uruchamiane w wątku wywołującym (np. 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 z Kotlinem 2.0 wymagają do użycia wtyczki KGP w wersji 2.0.0 lub nowszej. (Idb6b5)
  • Zastąp istniejące przeciążenie datastore metodą delegowaną, aby zainicjować DataStore do użycia 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ępnić 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żna 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 użycia wspólnego 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, który powodował uszkodzenie metadanych Gradle w wersji 1.1.5. 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 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 zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem z 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

  • Zmniejszono liczbę fałszywych alarmów w systemie Linux dotyczących błędu „Wystąpi zakleszczenie zasobów” w przypadku, gdy wiele instancji DataStore próbuje pisać z różnych procesów, przez wycofanie blokady 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 wersjach alfa i beta wersji 1.1.0. Oto niektóre z najważniejszych aktualizacji w wersji 1.1.0:

  • DataStore obsługuje teraz wiele procesów uzyskujących dostęp do tego samego pliku, z obsługą dostrzegalności w różnych procesach.
  • Nowy interfejs Storage umożliwia dostosowanie sposobu przechowywania i 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, w której MultiProcess DataStore może nie otrzymywać unieważnień 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 wywołać błąd UncompletedCoroutinesError w testach, jeśli używasz biblioteki testowej Coroutines. Aby uniknąć tego problemu, podczas inicjowania DataStore w testach przekaż TestScope.backgroundScope.
  • ​Rozwiązaliśmy problem, który powodował, że zagnieżdżone wywołania updateData w tej samej instancji 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, który powodował, ż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 wersji 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

  • Wycofanie 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 zatwierdzenia.

Zmiany w interfejsie API

  • Magazyn danych FileStorage jest teraz dostępny publicznie, więc klienci mogą podawać parametry niestandardowe. (Icb985)
  • Zmieniono konstruktor OkioStorage, aby akceptował 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 zduplikowanych 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

  • Ulepszyliśmy implementację wewnętrzną, 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 dla pojedynczego procesu 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 wieloprocesowa implementacja InterProcessCoordinator 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 zatwierdzenia.

Nowe funkcje

  • Obsługa przypadków użycia z wieloma procesami, w których gwarantowana jest spójność danych między instancjami DataStore 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 magazyn danych, który umożliwia przechowywanie par klucz-wartość lub obiektów z buforami 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 SharedPreferencesMigration utworzony za pomocą MIGRATE_ALL_KEYS zgłaszał 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, który powodował, że plik .java był nieumyślnie dodawany 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

  • Naprawiliśmy błąd, który powodował, że obiekty delegowane magazynu danych mogły 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

  • Możesz teraz dodać migrację zależną od kontekstu do swojego pełnomocnika usługi dataStore i preferencesDataStore. (I4ef69, b/173726702)
  • Dodaje funkcje pomocnicze do pobierania nazwy pliku, jeśli nie używasz już obiektu delegowanego magazynu danych ani metody context.createDataStore (I60f9a).
  • Funkcje writeTo i readFrom serializatora są teraz zawieszane. Jeśli masz zaimplementowany Serializer, musisz zaktualizować funkcje, aby były funkcjami zawieszania. (I1e58e)
  • Dodano delegaty 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 przez delegat 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 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 SharedPreferences bezpośredniego uruchamiania) do DataStore, możesz to teraz zrobić za pomocą nowego konstruktora SharedPreferencesMigration, który umożliwia wstrzykiwanie SharedPreferences. (I8e04e, b/177278510)

Poprawki błędów

  • DataStore będzie teraz zgłaszać wyjątek, jeśli dla tego samego pliku istnieje kilka aktywnych magazynów danych. Jeśli nie zarządzasz DataStore jako Singletonem lub nie dbasz o to, aby nie były jednocześnie aktywne 2 instancje DataStore dla pliku, możesz teraz zobaczyć wyjątki podczas odczytu lub zapisu w DataStore. Można je rozwiązać, zarządzając magazynem danych jako wzorcem Singleton. (Ib43f4, b/177691248)
  • Poprawiono zachowanie anulowania, gdy zakres elementu wywołującego jest anulowany. (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ą kod otaczający podstawowe interfejsy API DataStore (RxDataStore, RxDataStoreBuilder i RxDataMigration). Artefakty datastore-preferences-rxjava2/3 zawierają kreator do tworzenia magazynu danych preferencji.

Zmiany w interfejsie API

  • Ukryj interfejs CorruptionHandler. Nie było powodu, aby była publiczna, ponieważ fabryka DataStore akceptuje tylko ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
  • Metoda preferencesKey<T>(name: String): Key<T> została usunięta i zastąpiona metodami właściwymi dla każdego obsługiwanego typu, np. preferencesKey<Int>("int") to teraz intPreferencesKey("int") (Ibcfac, b/170311106).

Poprawki błędów

  • Poprawiono dokumentację DataStoreFactory, w której pominięto informację, że plik magazynu 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 zamknięcie obiektu OutputStream przekazanego do metody Serializer.writeTo() (ale nie jest to wymagane). (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 magazynie danych preferencji 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ł elementów docelowych w magazynie danych preferencji w celu przyspieszenia kompilacji w Kotlinie (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ą tworzyć specjalnych przypadków dla pustych strumieni wejściowych (puste strumienie wejściowe nie są analizowane za pomocą JSON).

    • Dodaliśmy też test, który sprawdza, 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, co pozwala na użycie składni lambda w Kotlin. (Ibe7f1, b/169425442)
  • Zgodnie z nowymi wymaganiami dotyczącymi interfejsu API w przypadku Kotlina (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. Mutacja powoduje błąd podczas korzystania z magazynu danych w przypadku osób, które używają go z typami innymi niż proto i preferencje (I6aa84).
  • Dodano metodę toString do pliku Preferences.kt, aby ułatwić debugowanie bieżącego stanu (I96006).
  • Dodano wyjątek chroniący przed niewłaściwym użyciem 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 i ulepszone rozwiązanie do przechowywania danych, które ma zastąpić SharedPreferences. DataStore, oparty na współprogramach i przepływach w języku Kotlin, udostępnia 2 różne implementacje:

  • Proto DataStore, który umożliwia przechowywanie obiektów z określonym typem (obsługiwanych przez bufory protokołu).
  • magazyn danych preferencji, który przechowuje pary klucz-wartość;

Dane są przechowywane asynchronicznie, spójnie i transakcyjnie, co pozwala uniknąć większości wad SharedPreferences.