DataStore

Archiviare i dati in modo asincrono, coerente e transazionale, superando alcuni degli svantaggi di SharedPreferences
Ultimo aggiornamento Release stabile Candidato per la release Release beta Release alpha
12 ottobre 2026 1.2.1 1.3.0-rc01 - -

Dichiarazione di dipendenze

Per aggiungere una dipendenza da DataStore, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.

DataStore offre diverse opzioni per la serializzazione , scegli l'una o l'altra. Puoi anche aggiungere dipendenze non Android a entrambe le implementazioni.

Aggiungi le dipendenze per l'implementazione necessaria nel file build.gradle per la tua app o il tuo modulo:

Datastore delle preferenze

Aggiungi le seguenti righe alla sezione delle dipendenze del file 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")
    }
    

Per aggiungere il supporto facoltativo di RxJava, aggiungi le seguenti dipendenze:

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

Aggiungi le seguenti righe alla sezione delle dipendenze del file 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")
    }
    

Aggiungi le seguenti dipendenze facoltative per il supporto di 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")
    }
    

Per serializzare i contenuti, aggiungi le dipendenze per la serializzazione di Protocol Buffer o JSON.

Serializzazione JSON

Per utilizzare la serializzazione JSON, aggiungi quanto segue al file Gradle:

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")
    }
    

Serializzazione Protobuf

Per utilizzare la serializzazione Protobuf, aggiungi quanto segue al file 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")
                }
            }
        }
    }
    

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di segnalare un nuovo problema, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Crea un nuovo problema

Per saperne di più, consulta la documentazione di Issue Tracker.

Versione 1.3

Versione 1.3.0-rc01

12 ottobre 2026

androidx.datastore:datastore-*:1.3.0-rc01 è stato rilasciato. La versione 1.3.0-rc01 contiene questi commit.

Modifiche alle API

  • Utilizza WindowCompat#enableEdgeToEdge(Window) anziché EdgeToEdge#enable() (Ibff3e)

Correzioni di bug

  • La dipendenza androidx.lifecycle:lifecycle-runtime è stata aggiornata alla versione 2.10.0. Questa versione è necessaria per l'esecuzione dei controlli lint del runtime del ciclo di vita in bundle con AGP versione 9.5.0-alpha04 o successive. (I99bfd, b/556807521)

Versione 1.3.0-alpha11

9 settembre 2026

androidx.datastore:datastore-*:1.3.0-alpha11 è stato rilasciato. La versione 1.3.0-alpha11 contiene questi commit.

Correzioni di bug

  • Il percorso del file sottostante non è incluso nei messaggi CorruptionException generati durante gli errori di analisi delle preferenze DataStore. (Ia9e8f)

Versione 1.3.0-alpha10

29 luglio 2026

androidx.datastore:datastore-*:1.3.0-alpha10 è stato rilasciato. La versione 1.3.0-alpha10 contiene questi commit.

Modifiche alle API

  • GeneralSecurityException in AeadSerializer is now wrapped in CorruptionException for better CorruptionHandler integration. (I26e56, b/514941919)

Versione 1.3.0-alpha09

6 maggio 2026

androidx.datastore:datastore-*:1.3.0-alpha09 è stato rilasciato. La versione 1.3.0-alpha09 contiene questi commit.

Modifiche alle API

  • Rendi pubblico ReThrowCorruptionHandler. (I137bb, b/427722902)
  • Rendi il ciclo di vita del tracciamento coerente con il tracciamento del sistema. (Ib391b)

Versione 1.3.0-alpha08

22 aprile 2026

androidx.datastore:datastore-*:1.3.0-alpha08 è stato rilasciato. La versione 1.3.0-alpha08 contiene questi commit.

Nuove funzionalità

  • Aggiunto il supporto per Origin Private File System (OPFS) in DataStore per le piattaforme web. Questa implementazione introduce WebOpfsStorage e include il supporto dell'architettura per l'I/O di file asincrono, le notifiche tra schede utilizzando l'API BroadcastChannel e il blocco distribuito tramite l'API Web Locks API nativa per l'accesso in scrittura esclusivo. Id7f5807 b/316376114

Modifiche alle API

  • Sono state introdotte le API WebLocalStorage e WebSessionStorage per la gestione esplicita del tipo di archiviazione negli ambienti web. I35fa259b b/316376114

Versione 1.3.0-alpha07

11 marzo 2026

androidx.datastore:datastore-*:1.3.0-alpha07 è stato rilasciato. La versione 1.3.0-alpha07 contiene questi commit.

Nuove funzionalità

  • Supporto della crittografia: è stato introdotto il nuovo artefatto androidx.datastore:datastore-tink che fornisce il supporto per la crittografia del datastore utilizzando la libreria Tink. Questo modulo introduce AeadSerializer, una nuova classe wrapper che implementa Serializer<T> e utilizza la crittografia autenticata con dati associati (AEAD) di Tink per criptare e decriptare i dati. AeadSerializer è disponibile per l'utilizzo nelle piattaforme di destinazione JVM e Android.
  • Nuova API DataStore Builder: è stata introdotta DataStore.Builder<T> come alternativa scalabile a DataStoreFactory. Con questa nuova API, gli utenti ora hanno un modo per fornire la propria logica di danneggiamento tramite setCorruptionHandler. Inoltre, l'API Builder richiede che un DataStore venga inizializzato utilizzando un CoroutineContext anziché un CoroutineScope, un miglioramento per la concorrenza strutturata, in quanto consente ai chiamanti di definire il comportamento di esecuzione (come Dispatcher specifici) senza forzare DataStore a gestire in modo inappropriato o essere vincolato dal ciclo di vita dell'ambito del chiamante.

    Nota:consigliamo a tutti gli utenti di eseguire la migrazione da DataStoreFactory alle nuove API DataStore.Builder. Richiedendo un CoroutineContext anziché un CoroutineScope, l'API applica una concorrenza strutturata migliore. In questo modo, le operazioni di DataStore non sono vincolate a cicli di vita della UI di breve durata (ad es. viewModelScope), evitando l'annullamento prematuro e la potenziale perdita di dati.

    Avviso:assicurati che il CoroutineContext fornito al builder abbia un Job e che sia limitato all'applicazione. Se il contesto viene annullato, le operazioni interne di DataStore verranno terminate prematuramente.

Modifiche alle API

  • È stato introdotto il nuovo artefatto androidx.datastore:datastore-tink per il supporto della crittografia DataStore. (Ic106d, b/167697691)

    Per criptare i dati utilizzando Tink:

    1. Crea una chiave utilizzando le 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. Crea un AeadSerializer che aggrega un serializzatore esistente:

      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. Utilizza questo aeadSerializer al posto del serializzatore durante la creazione dell'istanza del datastore:

      val dataStore = dataStore(
          fileName = "settings.json",
          serializer = aeadSerializer,
          scope = scope,
      )
      
  • Presentato DataStore.Builder<T> come l'alternativa moderna e scalabile a DataStoreFactory. (I3b110, b/267785821, b/400507108, b/368385681, b/427722902, b/370838564, b/167697691)

Versione 1.3.0-alpha06

25 febbraio 2026

androidx.datastore:datastore-*:1.3.0-alpha06 è stato rilasciato. La versione 1.3.0-alpha06 contiene questi commit.

Nuove funzionalità

  • DataStore ora supporta androidx.tracing sulla piattaforma di destinazione Android. Puoi creare un DataStore con il tracciamento fornendo un'istanza androidx.tracing.Tracer alla funzione DataStoreFactory.createWithTracing(). (I71bc2, b/427722902)

Versione 1.3.0-alpha05

28 gennaio 2026

androidx.datastore:datastore-*:1.3.0-alpha05 è stato rilasciato. La versione 1.3.0-alpha05 contiene questi commit.

Nuove funzionalità

  • Profili di baseline aggiunti al datastore. (3916245,b/469127532).
  • Implementa il supporto WASM/JS in DataStore tramite localStorage. In questo modo, si ottiene un netto vantaggio rispetto all'implementazione di sessionStorage esistente, in quanto vengono abilitate le notifiche di un evento e la sincronizzazione degli eventi tra schede. (I67246, b/441511612)

Versione 1.3.0-alpha04

14 gennaio 2026

androidx.datastore:datastore-*:1.3.0-alpha04 è stato rilasciato. La versione 1.3.0-alpha04 contiene questi commit.

Modifiche alle API

  • È stata aggiunta una funzione di copia di utilità che può essere utilizzata per aggiornare i dati per le preferenze DataStore. (I70a18, b/467120382)

Correzioni di bug

  • È stato risolto un problema per cui i dati binari potevano essere danneggiati durante l'archiviazione sostituendo la gestione delle stringhe UTF-8 con la codifica Base64 per il web. (Ie3178, b/473790107)

Versione 1.3.0-alpha03

17 dicembre 2025

androidx.datastore:datastore-*:1.3.0-alpha03 è stato rilasciato. La versione 1.3.0-alpha03 contiene questi commit.

Correzioni di bug

  • Risolto il problema relativo alla ridenominazione del file del datastore temporaneo. (I94f89, b/203087070)
  • Risolto un problema per evitare l'interruzione degli aggiornamenti durante la lettura/scrittura simultanea. Potrebbe verificarsi una race condition tra un nuovo agente di raccolta su DataStore.data e una chiamata updateData simultanea, facendo sì che l'agente di raccolta non rilevi il nuovo valore. (I6a427, b/431787506)

Versione 1.3.0-alpha02

3 dicembre 2025

androidx.datastore:datastore-*:1.3.0-alpha02 è stato rilasciato. La versione 1.3.0-alpha02 contiene questi commit.

Correzioni di bug

Versione 1.3.0-alpha01

19 novembre 2025

androidx.datastore:datastore-*:1.3.0-alpha01 è stato rilasciato. La versione 1.3.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Aggiunto il supporto di KMP Web in DataStore utilizzando l'API sessionStorage. Questa funzionalità consente a DataStore di rendere persistenti i dati temporaneamente all'interno di una singola scheda del browser. (I60fad, b/316376114)

Versione 1.2

Versione 1.2.1

11 marzo 2026

androidx.datastore:datastore-*:1.2.1 è stato rilasciato. La versione 1.2.1 contiene questi commit.

Nessuna modifica

  • Questa release introduce correzioni di bug minori dell'infrastruttura e non include modifiche all'API Datastore o al comportamento rispetto alla versione 1.2.0.

Versione 1.2.0

19 novembre 2025

androidx.datastore:datastore-*:1.2.0 è stato rilasciato. La versione 1.2.0 contiene questi commit.

Modifiche principali rispetto alla release 1.1.0

Supporto di Java/Guava:

  • È stato aggiunto il nuovo modulo datastore-guava per esporre le API compatibili con gli utenti di Java e Guava ListenableFuture tramite GuavaDataStore.
  • È stato aggiunto il supporto multiprocesso in GuavaDataStore.
  • È stato aggiunto un overload per GuavaDataStore.from che accetta un Executor Java (anziché un CoroutineContext) e utilizza androidx.core.util.Function.

Supporto dell'avvio diretto:

  • L'utilizzo di DataStore in modalità Avvio diretto è ora supportato. Le nuove API come createInDeviceProtectedStorage() in DataStoreFactory e deviceProtectedDataStore() in DataStoreDelegate consentono di creare il DataStore all'interno dello spazio di archiviazione protetto del dispositivo.

Modifiche all'API e allo spazio di archiviazione:

  • È stato aggiunto PreferencesFileSerializer che implementa androidx.datastore.core.Serializer per l'utilizzo con FileStorage.
  • È stato definito il costruttore predefinito per ReplaceFileCorruptionHandler per l'utilizzo comune del codice.

Correzioni di bug:

  • È stato corretto java.lang.UnsatisfiedLinkError quando si utilizza DataStore in un'app ottimizzata con R8 ma che non utilizza il file ProGuard standard.
  • È stato risolto un problema per cui le operazioni GuavaDataStore potevano essere eseguite in modo errato sul thread chiamante (ad es. il thread principale) anziché sul dispatcher IO specificato.
  • È stato risolto un problema di FileNotFoundException in OkioStorage all'avvio aggiungendo un secondo tentativo di lettura dei dati in caso di race condition.

Versione 1.2.0-rc01

5 novembre 2025

androidx.datastore:datastore-*:1.2.0-rc01 è stato rilasciato. La versione 1.2.0-rc01 contiene questi commit.

Versione 1.2.0-beta01

22 ottobre 2025

androidx.datastore:datastore-*:1.2.0-beta01 è stato rilasciato. La versione 1.2.0-beta01 contiene questi commit.

Modifiche alle API

  • Rendi pubblico CorruptionHandler. (I9ac35, b/452406457)
  • Usa androidx.core.util.Function nell'app GuavaDataStore. (I71eae, b/448563999)
  • Aggiungi un overload per GuavaDataStore.from che accetta un Executor anziché un CoroutineContext. (I989fa, b/448563183)

Correzioni di bug

  • Correzione di java.lang.UnsatisfiedLinkError quando si utilizza DataStore in un'app ottimizzata con R8, ma che non utilizza getDefaultProguardFile('android-proguard-optimize.txt'). (I27d0d, b/434696293)
  • Risolto un problema per cui le operazioni GuavaDataStore potevano essere eseguite in modo errato sul thread chiamante (ad es. il thread principale) anziché sul dispatcher IO specificato. (Ic91ea,b/441801112)

Versione 1.2.0-alpha02

7 maggio 2025

androidx.datastore:datastore-*:1.2.0-alpha02 è stato rilasciato. La versione 1.2.0-alpha02 contiene questi commit.

Modifiche alle API

  • Aggiunto il supporto multiprocesso in GuavaDataStore. (e0d608a).
  • Aggiunto un metodo helper per creare un GuavaDataStore da un DataStore. (9af26f4)
  • I progetti rilasciati con Kotlin 2.0 richiedono l'utilizzo di KGP 2.0.0 o versioni successive. (Idb6b5)
  • Sostituisci l'overload datastore esistente con un metodo delegato per inizializzare un DataStore da utilizzare durante l'avvio diretto. (If71b9)

Versione 1.2.0-alpha01

26 marzo 2025

androidx.datastore:datastore-*:1.2.0-alpha01 è stato rilasciato. La versione 1.2.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Aggiunto il modulo datastore-guava per esporre API compatibili con gli utenti di Java e Guava ListenableFuture tramite GuavaDataStore. (Iadd5e0)
  • L'utilizzo di DataStore durante la modalità DirectBoot è ora supportato. Per creare un datastore da utilizzare durante la modalità di avvio diretto, questo deve essere creato all'interno dello spazio di archiviazione protetto del dispositivo. Questo obiettivo può essere raggiunto con le seguenti nuove API DataStore: createInDeviceProtectedStorage() in DataStoreFactory e deviceProtectedDataStore() in DataStoreDelegate. (Ib90e56)

Modifiche alle API

  • È stato aggiunto PreferencesFileSerializer che implementa l'interfaccia androidx.datastore.core.Serializer da utilizzare con FileStorage. (I4c71f3)

Correzioni di bug

  • Risolto il problema FileNotFoundException in OkioStorage all'avvio aggiungendo un secondo tentativo di lettura dei dati in caso di race condition. (I43b3fb, b/337870543)
  • Definisci il costruttore predefinito per ReplaceFileCorruptionHandler per l'utilizzo comune del codice. (I795b05, b/358138957)

Versione 1.1

Versione 1.1.7

20 maggio 2025

androidx.datastore:datastore-*:1.1.7 è stato rilasciato. La versione 1.1.7 contiene questi commit.

Correzioni di bug

  • Risolto il problema delle regole Proguard mancanti nell'artefatto Android di datastore-preferences-core. (3f3f6e, b/413078297)

Versione 1.1.6

7 maggio 2025

androidx.datastore:datastore-*:1.1.6 è stato rilasciato. La versione 1.1.6 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui i metadati Gradle erano danneggiati nella versione 1.1.5. Questo problema è stato causato da un bug nel nuovo DSL del plug-in AGP KMP che impediva l'inclusione automatica dei metadati per tutte le piattaforme di destinazione. Il bug rende alcuni metodi DataStore Android non più visibili nelle build dei client. La correzione prevede l'utilizzo del DSL android precedente in build.gradle anziché in androidLibrary. (7801abf)

Versione 1.1.5

23 aprile 2025

androidx.datastore:datastore-*:1.1.5 è stato rilasciato. La versione 1.1.5 contiene questi commit.

Correzioni di bug

  • Per mitigare i problemi di CorruptionException in PreferencesDataStore, lo spazio di archiviazione predefinito è stato modificato da OkioStorage a FileStorage. Questa modifica è stata implementata introducendo un PreferencesFileSerializer. b/346197747

Versione 1.1.4

26 marzo 2025

androidx.datastore:datastore-*:1.1.4 è stato rilasciato. La versione 1.1.4 contiene questi commit.

Correzioni di bug

  • Sostituisci lo spazio di archiviazione predefinito da OkioStorage a FileStorage per migliorare l'affidabilità riducendo CorruptionException. (I71181, b/346197747)

Versione 1.1.3

26 febbraio 2025

androidx.datastore:datastore-*:1.1.3 è stato rilasciato. La versione 1.1.3 contiene questi commit.

Correzioni di bug

  • Risolto un problema di FileNotFoundException in OkioStorage riscontrato all'avvio dell'app. Se il tentativo iniziale di lettura del file non va a buon fine, verrà effettuato un secondo tentativo nel caso in cui si sia verificata una race condition dovuta alla creazione del file da parte di un processo diverso durante la lettura iniziale. (I43b3f, b/337870543)

Versione 1.1.2

15 gennaio 2025

androidx.datastore:datastore-*:1.1.2 è stato rilasciato. La versione 1.1.2 contiene questi commit.

Correzioni di bug

  • Miglioramento di 8 volte della latenza di lettura warm (DataStore.data.first()). (22b8a40)
  • ReplaceFileCorruptionHandler può essere creato dal codice comune KMP. (7632e839)

Versione 1.1.1

1° maggio 2024

androidx.datastore:datastore-*:1.1.1 è stato rilasciato. La versione 1.1.1 contiene questi commit.

Correzioni di bug

  • È stato mitigato il falso allarme di Linux relativo all'errore "Si verificherebbe un deadlock delle risorse" in un caso limite in cui più istanze DataStore tentano di scrivere da processi diversi eseguendo il backoff del blocco file.

Versione 1.1.0

17 aprile 2024

androidx.datastore:datastore-*:1.1.0 è stato rilasciato. La versione 1.1.0 contiene questi commit.

Modifiche principali dalla release 1.0.0

Per ulteriori informazioni, consulta le note di rilascio delle versioni alpha e beta di 1.1.0. Alcuni dei principali aggiornamenti della versione 1.1.0 sono:

  • DataStore ora supporta più processi che accedono allo stesso file, con supporto per l'osservabilità tra i processi.
  • La nuova interfaccia Storage ti consente di personalizzare il modo in cui archiviare o serializzare i modelli dei dati.
  • Ora puoi utilizzare DataStore nei progetti Kotlin Multiplatform.

Versione 1.1.0-rc01

3 aprile 2024

androidx.datastore:datastore-*:1.1.0-rc01 è stato rilasciato. La versione 1.1.0-rc01 contiene questi commit.

Correzioni di bug

  • Risolto il peggioramento delle prestazioni per cui le chiamate updateData non ottimizzavano le scritture su disco se i nuovi dati erano uguali a quelli precedenti (d64cfb5)
  • Risolta una race condition per cui MultiProcess DataStore potrebbe non rilevare gli annullamenti della convalida durante l'inizializzazione. ((b/326141553),(094c2dd))

Versione 1.1.0-beta02

6 marzo 2024

androidx.datastore:datastore-*:1.1.0-beta02 è stato rilasciato. La versione 1.1.0-beta02 contiene questi commit.

Correzioni di bug

  • Il miglioramento delle prestazioni su DataStore raccoglie le notifiche di aggiornamento solo quando viene osservato. (b/267792241)
    • Tieni presente che questa modifica potrebbe attivare UncompletedCoroutinesError nei test se utilizzi la libreria di test Coroutines. Per evitare questo problema, assicurati di superare il TestScope.backgroundScope durante l'inizializzazione di DataStore nei test.
  • ​È stato risolto il problema relativo alle chiamate updateData nidificate sulla stessa istanza che si bloccano. (b/241760537)
  • DataStore non genera più IOExceptions se non riesce a eliminare SharedPreferences durante la migrazione. (b/195553816)
  • È stato risolto il problema per cui il cambio di nome del file non riesce durante updateData in ambienti JVM non Android. (b/203087070)
  • Risolto il problema per cui CorruptionException non veniva gestito dopo l'inizializzazione di DataStore. (b/289582516)

Versione 1.1.0-beta01

10 gennaio 2024

androidx.datastore:datastore-*:1.1.0-beta01 viene rilasciato senza modifiche rispetto a 1.1.0-alpha07. La versione 1.1.0-beta01 contiene questi commit.

Versione 1.1.0-alpha07

29 novembre 2023

androidx.datastore:datastore-*:1.1.0-alpha07 è stato rilasciato. La versione 1.1.0-alpha07 contiene questi commit.

Modifiche alle API

  • I metodi MultiProcessDataStoreFactory non sono più sperimentali.L'annotazione @ExperimentalMultiProcessDataStore è stata rimossa completamente. (Ieee54, I8e607)

Correzioni di bug

  • Implementazione della rimozione delle annotazioni @ExperimentalMultiProcessDataStore nella versione 1.1.0-alpha07. (I8e607)

Versione 1.1.0-alpha06

1° novembre 2023

androidx.datastore:datastore-*:1.1.0-alpha06 è stato rilasciato. La versione 1.1.0-alpha06 contiene questi commit.

Modifiche alle API

  • Il metodo di fabbrica createSingleProcessCoordinator ora riceve un percorso file (String, java.io.File e okio.Path) per essere coerente con createMultiProcessCoordinator. (I211c8, b/305755935)

Versione 1.1.0-alpha05

6 settembre 2023

androidx.datastore:datastore-*:1.1.0-alpha05 è stato rilasciato. La versione 1.1.0-alpha05 contiene questi commit.

Modifiche alle API

  • Il datastore FileStorage è ora disponibile pubblicamente, quindi i client possono fornire parametri personalizzati. (Icb985)
  • È stato modificato il costruttore OkioStorage in modo che accetti un InterProcessCoordinator per poter essere utilizzato su Android con MultiProcessCoordinator. (Iecea3)

Correzioni di bug

  • Correzione di MultiProcessCoordinator che non riesce a monitorare più file nella stessa directory.
  • Risolto il problema per cui non era possibile rilevare i file duplicati se i percorsi dei file non erano normalizzati.
  • Correggi i valori errati restituiti da RxDataStore#isDisposed.
  • Correggi la configurazione ProGuard mancante per l'artefatto datstore-preferences-core.

Versione 1.1.0-alpha04

5 aprile 2023

androidx.datastore:datastore-*:1.1.0-alpha04 è stato rilasciato. La versione 1.1.0-alpha04 contiene questi commit.

Correzioni di bug

  • Migliora l'implementazione interna per evitare una race condition in cui il flusso di dati di DataStore potrebbe emettere un valore precedente dopo un aggiornamento.

Versione 1.1.0-alpha03

24 marzo 2023

androidx.datastore:datastore-*:1.1.0-alpha03 è stato rilasciato.

Correzioni di bug

  • Sono stati rimossi i vincoli di dipendenza dagli artefatti Maven per risolvere un problema di build in Kotlin Native Targets (b/274786186, KT-57531).

Versione 1.1.0-alpha02

22 marzo 2023

androidx.datastore:datastore-*:1.1.0-alpha02 è stato rilasciato. La versione 1.1.0-alpha02 contiene questi commit.

Nota

Tieni presente che questa versione include un importante refactoring interno che unisce le implementazioni per le implementazioni di DataStore a processo singolo e multiprocesso. Tieni d'occhio eventuali modifiche del comportamento impreviste (ad es. tempistiche delle notifiche di aggiornamento). Puoi utilizzare il componente Issue Tracker per segnalare queste modifiche.

Nuove funzionalità

  • Ora puoi utilizzare DataStore nei progetti KMM. Tieni presente che i target non Android di DataStore sono ancora sperimentali, ma abbiamo deciso di unire le versioni per consentire agli sviluppatori di provarli più facilmente.
  • Le funzionalità multi-processo vengono spostate da androidx.datastore.multiprocess a androidx.datastore.core.
  • Aggiungi un nuovo metodo factory in androidx.datastore.core.MultiProcessDataStoreFactory per creare istanze DataStore con oggetti Storage per le operazioni sui file.
  • Aggiungi una nuova interfaccia InterProcessCoordinator che consente a più istanze DataStore di comunicare tra i processi. Tieni presente che l'implementazione multiprocesso di InterProcessCoordinator è disponibile solo su Android.

Modifiche alle API

  • Aggiungi InterProcessCoordinator a StorageConnection nell'interfaccia datastore-core (I555bb)
  • Modifica le API in datastore-core MultiProcessDataStoreFactory per utilizzare Storage. (Iac02f)
  • Spostamento delle API pubbliche in datastore-multiprocess in datastore-core (I76d7c)
  • PreferencesSerializer esposto da datastore-preferences-core (I4b788)
  • Aggiunta dell'annotazione @JvmDefaultWithCompatibility (I8f206)

Versione 1.1.0-alpha01

9 novembre 2022

androidx.datastore:datastore-*:1.1.0-alpha01 è stato rilasciato. La versione 1.1.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Supporta casi d'uso multi-processo in cui la coerenza dei dati è garantita tra le istanze DataStore nei vari processi. Aggiungi MultiProcessDataStoreFactory#create per creare DataStore istanze di questo tipo.
  • Nuova interfaccia di archiviazione che consente di sostituire il meccanismo di archiviazione sottostante per Datastore. Sono fornite implementazioni per java.io e okio. Le fabbriche DataStore hanno nuovi metodi che accettano questo oggetto Storage.

Modifiche alle API

  • Modifica le API in datastore-core MultiProcessDataStoreFactory per utilizzare Storage. (Iac02f)
  • Sposta le API pubbliche in datastore-multiprocess in datastore-core (I76d7c)
  • Esposto PreferencesSerializer da datastore-preferences-core (I4b788)

Versione 1.0.0

Versione 1.0.0

4 agosto 2021

androidx.datastore:datastore-*:1.0.0 è stato rilasciato. La versione 1.0.0 contiene questi commit.

Funzionalità principali della versione 1.0.0

Jetpack DataStore è una soluzione di archiviazione dei dati che consente di archiviare coppie chiave-valore o oggetti digitati con i buffer di protocollo. DataStore utilizza le coroutine e il flusso di Kotlin per archiviare i dati in modo asincrono, coerente e transazionale.

Versione 1.0.0-rc02

21 luglio 2021

androidx.datastore:datastore-*:1.0.0-rc02 è stato rilasciato. La versione 1.0.0-rc02 contiene questi commit.

Correzioni di bug

  • Chiariamo che SharedPreferencesMigration non viene eseguito se non ci sono chiavi. (Icfa32, b/192824325)
  • È stato corretto un bug per cui SharedPreferencesMigration creato con MIGRATE_ALL_KEYS generava un'eccezione se la chiave richiesta non esisteva ancora. (Ie318a, b/192824325)

Versione 1.0.0-rc01

30 giugno 2021

androidx.datastore:datastore-*:1.0.0-rc01 è stato rilasciato. La versione 1.0.0-rc01 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui il file .java veniva aggiunto inavvertitamente al file jar finale (I65d96, b/188985637)

Versione 1.0.0-beta02

16 giugno 2021

androidx.datastore:datastore-*:1.0.0-beta02 è stato rilasciato. La versione 1.0.0-beta02 contiene questi commit.

Correzioni di bug

Versione 1.0.0-beta01

21 aprile 2021

androidx.datastore:datastore-*:1.0.0-beta01 è stato rilasciato. La versione 1.0.0-beta01 contiene questi commit.

Modifiche alle API

  • Rimozione dei sovraccarichi JVM per i metodi solo Kotlin (I2adc7)

Correzioni di bug

  • È stato corretto un bug per cui i delegati di Datastore potevano causare la perdita di contesti (Ie96fc, b/184415662)

Versione 1.0.0-alpha08

10 marzo 2021

androidx.datastore:datastore-*:1.0.0-alpha08 è stato rilasciato. La versione 1.0.0-alpha08 contiene questi commit.

Modifiche alle API

  • Ora puoi aggiungere una migrazione che dipende dal contesto al tuo delegato della proprietà dataStore e preferencesDataStore. (I4ef69, b/173726702)
  • Aggiunge funzioni helper per ottenere il nome del file se non utilizzi più il delegato datastore o context.createDataStore (I60f9a)
  • I metodi writeTo e readFrom di Serializer ora sospendono l'esecuzione. Se hai implementato un Serializer, dovrai aggiornare le tue funzioni in modo che siano funzioni di sospensione. (I1e58e)
  • Sono stati aggiunti delegati della proprietà per gli utenti di RxDataStore. (Ied768, b/173726702)

Correzioni di bug

  • Applica restrizioni all'utilizzo pubblico delle API sperimentali (I6aa29, b/174531520)

Versione 1.0.0-alpha07

24 febbraio 2021

androidx.datastore:datastore-*:1.0.0-alpha07 è stato rilasciato. La versione 1.0.0-alpha07 contiene questi commit.

Modifiche alle API

  • La funzione di estensione Context.createDataStore è stata rimossa e sostituita con il delegato della proprietà globalDataStore. Chiama globalDataStore una volta al livello superiore nel file Kotlin. Ad esempio:

    val Context.myDataStore by dataStore(...)
    

    Inseriscilo nel livello superiore del file Kotlin in modo che ne esista una sola istanza. (I57215, b/173726702)

  • Le funzioni RxDataStore ora si trovano in una classe RxDataStore anziché in funzioni di estensione su DataStore. (Idccdb, b/177691248)

  • Se vuoi eseguire la migrazione di EncryptedSharedPreferences (o SharedPreferences di avvio diretto) a DataStore, ora puoi farlo con il nuovo costruttore SharedPreferencesMigration che ti consente di inserire SharedPreferences. (I8e04e, b/177278510)

Correzioni di bug

  • DataStore ora genera un'eccezione se sono presenti più DataStore attivi per lo stesso file. Se non gestivi DataStore come Singleton o non ti assicuravi che non fossero attive contemporaneamente due istanze di DataStore per un file, ora potresti visualizzare eccezioni durante la lettura o la scrittura in DataStore. Questi problemi possono essere risolti gestendo DataStore come Singleton. (Ib43f4, b/177691248)
  • Correzione del comportamento di annullamento quando l'ambito del chiamante viene annullato. (I2c7b3)

Versione 1.0.0-alpha06

13 gennaio 2021

androidx.datastore:datastore-*:1.0.0-alpha06 è stato rilasciato. La versione 1.0.0-alpha06 contiene questi commit.

Nuove funzionalità

  • Sono stati aggiunti wrapper RxJava per DataStore. Gli artefatti datastore-rxjava2/3 contengono i wrapper per le API DataStore principali (RxDataStore, RxDataStoreBuilder e RxDataMigration). Gli artefatti datastore-preferences-rxjava2/3 contengono un builder per creare un DataStore Preferences.

Modifiche alle API

  • Nascondi l'interfaccia CorruptionHandler. Non c'era motivo per renderlo pubblico perché la factory DataStore accetta solo un ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
  • Il metodo preferencesKey<T>(name: String): Key<T> è stato rimosso e sostituito con metodi specifici per ogni tipo supportato. Ad esempio, preferencesKey<Int>("int") ora è intPreferencesKey("int") (Ibcfac, b/170311106)

Correzioni di bug

  • Corregge la documentazione su DataStoreFactory, che non menzionava il fatto che il file del datastore viene creato nella sottodirectory "datastore/". (Ica222)

Versione 1.0.0-alpha05

2 dicembre 2020

androidx.datastore:datastore-*:1.0.0-alpha05 è stato rilasciato. La versione 1.0.0-alpha05 contiene questi commit.

Correzioni di bug

  • Aggiunta di documentazione ed eccezioni migliori relative alle scritture simultanee dai datastore. (Ia98a2, b/173522155, b/173726702)
  • Ora consentiamo (ma non richiediamo) la chiusura di OutputStream passato a Serializer.writeTo(). (I5c9bf, b/173037611)

Versione 1.0.0-alpha04

17 novembre 2020

androidx.datastore:datastore-*:1.0.0-alpha04 è stato rilasciato. La versione 1.0.0-alpha04 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema di pacchettizzazione che causava il seguente arresto anomalo in Preference Datastore 1.0.0-alpha03: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences

Versione 1.0.0-alpha03

11 novembre 2020

androidx.datastore:datastore-*:1.0.0-alpha03 è stato rilasciato. La versione 1.0.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Le preferenze ora supportano i valori double (utili se hai bisogno di una precisione maggiore rispetto ai float) (I5be8f, b/169471808)

Modifiche alle API

  • È stata creata una dipendenza Kotlin pura per Datastore per consentire una compilazione più rapida. androidx.datastore:datastore-core contiene solo le API Kotlin di base e androidx.datastore:datastore contiene le API che dipendono da Android (inclusi SharedPreferencesMigration e il costruttore Context.createDataStore).(I42d75, b/168512698)
  • Suddivisione dei target per il datastore delle preferenze per una compilazione Kotlin più rapida (Ia3c19)
  • I serializzatori ora richiedono una nuova proprietà per il valore predefinito che verrà utilizzato se non sono presenti dati sul disco. In questo modo è più facile implementare i serializzatori personalizzati, così gli utenti non devono gestire i flussi di input vuoti come casi speciali (i flussi di input vuoti non vengono analizzati con JSON).

    • Inoltre, ora è presente un controllo per verificare che lo stream di output fornito a writeTo() non sia chiuso e, se è chiuso, genera eccezioni (I16e29)
  • Rendere interno il costruttore di SharedPreferencesView. Inizialmente era pubblico per consentire i test. I test devono invece creare un SharedPreferencesMigration ed eseguire il test in base a questo. (I93891)

Correzioni di bug

  • Il parametro produceFile su DataStoreFactory e PreferenceDataStoreFactory ora è l'ultimo parametro dell'elenco, quindi ti consente di utilizzare la sintassi lambda finale di Kotlin. (Ibe7f1, b/169425442)
  • In seguito ai nuovi requisiti espliciti dell'API per Kotlin (I5ae1e)

Problemi noti

  • Preferences DataStore si arresta in modo anomalo con java.lang.NoClassDefFoundError. (b/173036843)

Versione 1.0.0-alpha02

14 ottobre 2020

androidx.datastore:datastore-core:1.0.0-alpha02 e androidx.datastore:datastore-preferences:1.0.0-alpha02 sono state rilasciate. La versione 1.0.0-alpha02 contiene questi commit.

Correzioni di bug

  • Aggiunta una misura di protezione contro la mutazione in datastore-core. La mutazione interrompe l'utilizzo del datastore per le persone che utilizzano il datastore con tipi non proto/non preferenze (I6aa84)
  • È stato aggiunto un metodo toString a Preferences.kt per semplificare il debug dello stato attuale (I96006)
  • È stata aggiunta un'eccezione per proteggere dall'uso improprio di DataStore.Preferences (I1134d)
  • Risolto un bug che causava l'arresto anomalo dell'app all'avvio (I69237, b/168580258)

Versione 1.0.0-alpha01

2 settembre 2020

androidx.datastore:datastore-core:1.0.0-alpha01 e androidx.datastore:datastore-preferences:1.0.0-alpha01 sono state rilasciate. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

Jetpack DataStore è una nuova e migliorata soluzione di archiviazione dei dati che mira a sostituire SharedPreferences. Basato su coroutine e Flow di Kotlin, DataStore fornisce due diverse implementazioni:

  • Proto DataStore, che consente di archiviare oggetti tipizzati (supportati da buffer di protocollo)
  • Preferences DataStore, che memorizza coppie chiave-valore

I dati vengono archiviati in modo asincrono, coerente e transazionale, superando la maggior parte degli svantaggi di SharedPreferences.