DataStore

Асинхронное, согласованное и транзакционное хранение данных, преодолевающее некоторые недостатки SharedPreferences
Последнее обновление Основная версия Релиз-кандидат Бета-версия Альфа-версия
21 октября 2026 г. 1.3.0 - - -

Объявление зависимостей

Чтобы добавить зависимость от DataStore, необходимо добавить в проект репозиторий Google Maven. Подробную информацию можно найти в статье Репозиторий Google Maven.

DataStore предоставляет разные варианты сериализации. Выберите один из них. Вы также можете добавить зависимости, не связанные с Android, в любую реализацию.

Добавьте зависимости для нужной реализации в файл build.gradle приложения или модуля:

Preferences DataStore

Добавьте в раздел зависимостей файла gradle следующие строки:

Яркий

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

Чтобы добавить поддержку RxJava, добавьте следующие зависимости:

Яркий

    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

Добавьте в раздел зависимостей файла gradle следующие строки:

Яркий

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

Добавьте следующие необязательные зависимости для поддержки RxJava:

Яркий

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

Чтобы сериализовать контент, добавьте зависимости для буферов протокола или сериализации JSON.

Сериализация JSON

Чтобы использовать сериализацию JSON, добавьте в файл Gradle следующий код:

Яркий

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

Сериализация Protobuf

Чтобы использовать сериализацию Protobuf, добавьте в файл Gradle следующее:

Яркий

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

Отзыв

Ваши отзывы помогают нам улучшать Jetpack. Если вы обнаружите новые проблемы или у вас появятся идеи по улучшению этой библиотеки, сообщите нам. Прежде чем сообщать о новых ошибках, изучите уже добавленные. Вы можете проголосовать за существующую проблему, нажав кнопку со звездочкой.

Создать новую проблему

Дополнительную информацию можно найти в документации по системе отслеживания ошибок.

Версия 1.3

Версия 1.3.0

21 октября 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0". Версия 1.3.0 содержит эти коммиты.

Важные изменения по сравнению с версией 1.2.0:

Новые возможности

  • Поддержка веб-хранилища. Добавлены варианты веб-хранилища KMP, обеспечивающие гибкое сохранение данных в веб-целях.

    • sessionStorage (WebSessionStorage). Позволяет временно хранить данные в одной вкладке браузера.
    • localStorage (WebLocalStorage). Включает постоянное хранилище с уведомлениями о событиях и синхронизацией между вкладками.
    • Origin Private File System (WebOpfsStorage). Поддержка файловой системы через OPFS с асинхронным вводом-выводом файлов и уведомлениями между вкладками.
  • Поддержка шифрования (datastore-tink). Добавлен новый артефакт androidx.datastore:datastore-tink, который обеспечивает поддержку шифрования с помощью библиотеки Tink. В нем используется AeadSerializer для шифрования и расшифровки данных с помощью аутентифицированного шифрования со связанными данными (AEAD).

  • Поддержка трассировки. Добавлена поддержка androidx.tracing на целевой платформе Android.

  • DataStore.Builder API. Представлен DataStore.Builder<T> – современная масштабируемая альтернатива DataStoreFactory. Для улучшения структурированного параллелизма требуется CoroutineContext вместо CoroutineScope.

  • Профили базовой конфигурации. В datastore добавлены профили базовой конфигурации, чтобы повысить производительность при запуске.

Изменения в API

  • API DataStore.Builder, ReThrowCorruptionHandler и InterProcessCoordinator обновлены до версии public.

Исправление ошибок и улучшения

  • В сообщения CorruptionException добавлена информация о пути к файлу, чтобы упростить отладку при ошибках синтаксического анализа.

  • Исправлена потенциальная потеря данных в GuavaDataStore за счет применения строгого порядка FIFO для обновлений.

Версия 1.3.0-rc01

12 октября 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-rc01". Версия 1.3.0-rc01 содержит эти коммиты.

Изменения в API

  • Используйте WindowCompat#enableEdgeToEdge(Window) вместо EdgeToEdge#enable() (Ibff3e)

Исправление ошибок

  • Зависимость androidx.lifecycle:lifecycle-runtime обновлена до версии 2.10.0. Эта версия необходима для запуска встроенных проверок жизненного цикла во время выполнения с помощью AGP версии 9.5.0-alpha04 или более поздней. (I99bfd, b/556807521)

Версия 1.3.0-alpha11

9 сентября 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha11". Версия 1.3.0-alpha11 содержит эти коммиты.

Исправление ошибок

  • Путь к файлу не включается в сообщения CorruptionException, которые появляются при ошибках обработки настроек DataStore. (Ia9e8f)

Версия 1.3.0-alpha10

29 июля 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha10". Версия 1.3.0-alpha10 содержит эти коммиты.

Изменения в API

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

Версия 1.3.0-alpha09

6 мая 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha09". Версия 1.3.0-alpha09 содержит эти коммиты.

Изменения в API

  • Сделать ReThrowCorruptionHandler общедоступным. (I137bb, b/427722902)
  • Сделайте жизненный цикл трассировки согласованным с трассировкой системы. (Ib391b)

Версия 1.3.0-alpha08

22 апреля 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha08". Версия 1.3.0-alpha08 содержит эти коммиты.

Новые функции

  • Добавлена поддержка Origin Private File System (OPFS) в DataStore для веб-платформ. В этой реализации представлен WebOpfsStorage и включена архитектурная поддержка асинхронного ввода-вывода файлов, уведомлений между вкладками с помощью API BroadcastChannel и распределенной блокировки через нативный Web Locks API для эксклюзивного доступа на запись. Id7f5807 b/316376114

Изменения в API

  • Добавлены API WebLocalStorage и WebSessionStorage для явного управления типом хранилища в веб-среде. I35fa259b b/316376114

Версия 1.3.0-alpha07

11 марта 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha07". Версия 1.3.0-alpha07 содержит эти коммиты.

Новые функции

  • Поддержка шифрования. Представлен новый артефакт androidx.datastore:datastore-tink, который обеспечивает поддержку шифрования вашего хранилища данных с помощью библиотеки Tink. В этом модуле представлен класс AeadSerializer – новый класс-оболочка, который реализует Serializer<T> и использует аутентифицированное шифрование Tink со связанными данными (AEAD) для шифрования и расшифровки данных. AeadSerializer можно использовать на целевых платформах JVM и Android.
  • Новый DataStore Builder API. Представлен DataStore.Builder<T> – масштабируемая альтернатива DataStoreFactory. С помощью нового API пользователи могут задавать собственную логику повреждения через setCorruptionHandler. Кроме того, API Builder требует, чтобы DataStore инициализировался с помощью CoroutineContext, а не CoroutineScope. Это улучшает структурированный параллелизм, поскольку позволяет вызывающим объектам определять поведение выполнения (например, конкретные диспетчеры), не заставляя DataStore ненадлежащим образом управлять жизненным циклом области вызывающего объекта или быть связанным с ним.

    Примечание. Мы рекомендуем всем пользователям перейти с DataStoreFactory на новые API DataStore.Builder. Требуя CoroutineContext вместо CoroutineScope, API обеспечивает лучшую структурированную параллельность. Это гарантирует, что операции DataStore не будут привязаны к кратковременным жизненным циклам пользовательского интерфейса (например, viewModelScope), что предотвратит преждевременную отмену и потенциальную потерю данных.

    Предупреждение. Убедитесь, что у объекта CoroutineContext, предоставленного Builder, есть Job и что он относится к области действия приложения. Если контекст отменен, внутренние операции DataStore будут завершены преждевременно.

Изменения в API

  • Добавлен новый артефакт androidx.datastore:datastore-tink для поддержки шифрования DataStore. (Ic106d, b/167697691)

    Чтобы зашифровать данные с помощью Tink, выполните следующие действия:

    1. Создайте ключ с помощью Tink API:

      val keysetHandle =
          AndroidKeysetManager.Builder()
              .withSharedPref(applicationContext, "keyset", "keyset_prefs")
              .withKeyTemplate(KeyTemplate.createFrom(PredefinedAeadParameters.AES256_GCM))
              .withMasterKeyUri("android-keystore://master_key")
              .build()
              .keysetHandle
      
    2. Создайте AeadSerializer, который будет упаковывать существующий сериализатор:

      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. Используйте этот aeadSerializer вместо сериализатора при создании экземпляра хранилища данных:

      val dataStore = dataStore(
          fileName = "settings.json",
          serializer = aeadSerializer,
          scope = scope,
      )
      
  • Представлен DataStore.Builder<T> – современная масштабируемая альтернатива DataStoreFactory. (I3b110, b/267785821, b/400507108, b/368385681, b/427722902, b/370838564, b/167697691)

Версия 1.3.0-alpha06

25 февраля 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha06". Версия 1.3.0-alpha06 содержит эти коммиты.

Новые функции

  • DataStore теперь поддерживает androidx.tracing на целевой платформе Android. Вы можете создать DataStore с трассировкой, передав экземпляр androidx.tracing.Tracer в функцию DataStoreFactory.createWithTracing(). (I71bc2, b/427722902)

Версия 1.3.0-alpha05

28 января 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha05". Версия 1.3.0-alpha05 содержит эти коммиты.

Новые функции

  • Базовые профили добавлены в хранилище данных. (3916245,b/469127532).
  • Реализуйте поддержку WASM/JS в DataStore с помощью localStorage. Это дает явное преимущество по сравнению с существующей реализацией sessionStorage, поскольку позволяет синхронизировать уведомления о событиях между вкладками. (I67246, b/441511612)

Версия 1.3.0-alpha04

14 января 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha04". Версия 1.3.0-alpha04 содержит эти коммиты.

Изменения в API

  • Добавлена служебная функция копирования, которую можно использовать для обновления данных в настройках DataStore. (I70a18, b/467120382)

Исправление ошибок

  • Исправлена ошибка, из-за которой двоичные данные могли быть повреждены во время хранения. Для этого обработка строк UTF-8 была заменена кодировкой Base64 для веб-версии. (Ie3178, b/473790107)

Версия 1.3.0-alpha03

17 декабря 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha03". Версия 1.3.0-alpha03 содержит эти коммиты.

Исправление ошибок

  • Исправлена ошибка, из-за которой не удавалось переименовать временный файл хранилища данных. (I94f89, b/203087070)
  • Исправлена ошибка, из-за которой обновления могли не применяться при одновременном чтении и записи. Между новым сборщиком в DataStore.data и параллельным вызовом updateData может возникнуть состояние гонки, из-за которого сборщик пропустит новое значение. (I6a427, b/431787506)

Версия 1.3.0-alpha02

3 декабря 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha02". Версия 1.3.0-alpha02 содержит эти коммиты.

Исправление ошибок

  • Добавьте цель js() в androidx.datastore. (I1f62b, b/441511612)
  • Принудительно применять порядок FIFO при обновлении GuavaDataStore. (I6fd00,b/451491257)

Версия 1.3.0-alpha01

19 ноября 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.3.0-alpha01". Версия 1.3.0-alpha01 содержит эти коммиты.

Новые функции

  • Добавлена поддержка KMP Web в DataStore с помощью sessionStorage API. Эта функция позволяет DataStore временно сохранять данные на одной вкладке браузера. (I60fad, b/316376114)

Версия 1.2

Версия 1.2.1

11 марта 2026 г.

Выпущены данные "androidx.datastore:datastore-*:1.2.1". Версия 1.2.1 содержит эти коммиты.

Пользователь не внес никаких изменений

  • В этом выпуске исправлены незначительные ошибки инфраструктуры. Изменений в Datastore API или поведении по сравнению с версией 1.2.0 нет.

Версия 1.2.0

19 ноября 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.2.0". Версия 1.2.0 содержит эти коммиты.

Основные изменения по сравнению с версией 1.1.0

Поддержка Java/Guava:

  • Добавлен новый модуль datastore-guava, который позволяет пользователям Java и Guava ListenableFuture работать с API через GuavaDataStore.
  • Добавлена поддержка многопроцессности в GuavaDataStore.
  • Добавлена перегрузка для GuavaDataStore.from, которая принимает Java Executor (вместо CoroutineContext) и использует androidx.core.util.Function.

Поддержка режима Direct Boot.

  • Теперь поддерживается использование DataStore в режиме прямой загрузки. Новые API, такие как createInDeviceProtectedStorage() в DataStoreFactory и deviceProtectedDataStore() в DataStoreDelegate, позволяют создавать DataStore в хранилище, защищенном устройством.

Изменения в хранилище и API

  • Добавлен класс PreferencesFileSerializer, который реализует androidx.datastore.core.Serializer для использования с FileStorage.
  • Определен конструктор по умолчанию для ReplaceFileCorruptionHandler, чтобы использовать общий код.

Исправленные ошибки

  • Исправлена ошибка java.lang.UnsatisfiedLinkError при использовании DataStore в приложении, оптимизированном с помощью R8, но без стандартного файла ProGuard.
  • Исправлена ошибка, из-за которой операции GuavaDataStore могли неправильно выполняться в вызывающем потоке (например, основном), а не в указанном диспетчере ввода-вывода.
  • Устранена проблема с FileNotFoundException в OkioStorage при запуске. Теперь в случае состояния гонки выполняется вторая попытка чтения данных.

Версия 1.2.0-rc01

5 ноября 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.2.0-rc01". Версия 1.2.0-rc01 содержит эти коммиты.

Версия 1.2.0-beta01

22 октября 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.2.0-beta01". Версия 1.2.0-beta01 содержит эти коммиты.

Изменения в API

  • Сделать CorruptionHandler общедоступным. (I9ac35, b/452406457)
  • Использовать аккаунт androidx.core.util.Function в приложении "GuavaDataStore". (I71eae, b/448563999)
  • Добавьте перегрузку для GuavaDataStore.from, которая принимает Executor вместо CoroutineContext. (I989fa, b/448563183)

Исправление ошибок

  • Исправлена ошибка java.lang.UnsatisfiedLinkError, возникавшая при использовании DataStore в приложении, оптимизированном с помощью R8, но не использующем getDefaultProguardFile('android-proguard-optimize.txt'). (I27d0d, b/434696293)
  • Исправлена ошибка, из-за которой операции GuavaDataStore могли неправильно выполняться в вызывающем потоке (например, основном), а не в указанном диспетчере ввода-вывода. (Ic91ea,b/441801112)

Версия 1.2.0-alpha02

7 мая 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.2.0-alpha02". Версия 1.2.0-alpha02 содержит эти коммиты.

Изменения в API

  • В GuavaDataStore добавлена поддержка многопроцессного режима. (e0d608a).
  • Добавлен вспомогательный метод для создания GuavaDataStore из DataStore. (9af26f4)
  • Для проектов, выпущенных с Kotlin 2.0, требуется KGP 2.0.0 или более поздней версии. (Idb6b5)
  • Замените существующую перегрузку datastore методом делегирования, чтобы инициализировать DataStore для использования во время прямой загрузки. (If71b9)

Версия 1.2.0-alpha01

26 марта 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.2.0-alpha01". Версия 1.2.0-alpha01 содержит эти коммиты.

Новые функции

  • Добавлен модуль datastore-guava, который предоставляет API, совместимые с Java и Guava ListenableFuture, через GuavaDataStore. (Iadd5e0)
  • Теперь поддерживается использование приложения "DataStore" в режиме "DirectBoot". Чтобы создать хранилище данных, которое будет использоваться в режиме прямой загрузки, его необходимо создать в хранилище, защищенном устройством. Для этого можно использовать новые API DataStore: createInDeviceProtectedStorage() в DataStoreFactory и deviceProtectedDataStore() в DataStoreDelegate. (Ib90e56)

Изменения в API

  • Добавлен класс PreferencesFileSerializer, реализующий интерфейс androidx.datastore.core.Serializer для использования с FileStorage. (I4c71f3)

Исправление ошибок

  • Устранена проблема FileNotFoundException в OkioStorage при запуске. Теперь в случае состояния гонки выполняется вторая попытка чтения данных. (I43b3fb, b/337870543)
  • Определен конструктор по умолчанию для ReplaceFileCorruptionHandler, чтобы использовать общий код. (I795b05, b/358138957)

Версия 1.1

Версия 1.1.7

20 мая 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.7". Версия 1.1.7 содержит эти коммиты.

Исправление ошибок

  • Исправлена проблема с отсутствующими правилами Proguard в артефакте Android для datastore-preferences-core. (3f3f6e, b/413078297)

Версия 1.1.6

7 мая 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.6". Версия 1.1.6 содержит эти коммиты.

Исправление ошибок

  • Устранена проблема, из-за которой метаданные Gradle были повреждены в версии 1.1.5. Эта проблема была вызвана ошибкой в новом DSL плагина AGP KMP, которая препятствовала автоматическому включению метаданных для всех целевых платформ. Из-за этой ошибки некоторые методы DataStore Android больше не видны в сборках клиентов. Чтобы устранить проблему, используйте старый DSL android в build.gradle вместо androidLibrary. (7801abf)

Версия 1.1.5

23 апреля 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.5". Версия 1.1.5 содержит эти коммиты.

Исправление ошибок

  • Чтобы устранить проблемы с CorruptionException в PreferencesDataStore, хранилище по умолчанию было изменено с OkioStorage на FileStorage. Для этого мы добавили PreferencesFileSerializer. b/346197747

Версия 1.1.4

26 марта 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.4". Версия 1.1.4 содержит эти коммиты.

Исправление ошибок

  • Замените хранилище по умолчанию с OkioStorage на FileStorage, чтобы повысить надежность за счет уменьшения CorruptionException. (I71181, b/346197747)

Версия 1.1.3

26 февраля 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.3". Версия 1.1.3 содержит эти коммиты.

Исправление ошибок

  • Устранена проблема с FileNotFoundException в OkioStorage, возникавшая при запуске приложения. Если первая попытка чтения файла не удалась, будет предпринята вторая попытка на случай, если возникло состояние гонки из-за того, что файл был создан другим процессом во время первого чтения. (I43b3f, b/337870543)

Версия 1.1.2

15 января 2025 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.2". Версия 1.1.2 содержит эти коммиты.

Исправление ошибок

  • Улучшение задержки чтения из кеша (DataStore.data.first()) в 8 раз. (22b8a40)
  • ReplaceFileCorruptionHandler можно создать из общего кода KMP. (7632e839)

Версия 1.1.1

1 мая 2024 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.1". Версия 1.1.1 содержит эти коммиты.

Исправление ошибок

  • Устранено ложное срабатывание Linux на ошибку "Resource deadlock would occur" (Возникнет взаимоблокировка ресурсов) в пограничном случае, когда несколько экземпляров DataStore пытаются выполнить запись из разных процессов, отменяя блокировку файла.

Версия 1.1.0

17 апреля 2024 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0". Версия 1.1.0 содержит эти коммиты.

Основные изменения по сравнению с версией 1.0.0

Дополнительную информацию вы найдете в примечаниях к выпуску альфа- и бета-версий 1.1.0. Вот некоторые из основных изменений в версии 1.1.0:

  • Теперь DataStore поддерживает доступ нескольких процессов к одному файлу, а также наблюдаемость между процессами.
  • Новый интерфейс Storage позволяет настраивать хранение и сериализацию моделей данных.
  • Теперь вы можете использовать DataStore в проектах Kotlin Multiplatform.

Версия 1.1.0-rc01

3 апреля 2024 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0-rc01". Версия 1.1.0-rc01 содержит эти коммиты.

Исправление ошибок

  • Исправлена проблема со снижением производительности, из-за которой вызовы updateData не оптимизировали запись на диск, если новые данные совпадали со старыми (d64cfb5).
  • Исправлено состояние гонки, из-за которого MultiProcess DataStore мог пропускать аннулирования во время инициализации. ((b/326141553),(094c2dd))

Версия 1.1.0-beta02

6 марта 2024 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0-beta02". Версия 1.1.0-beta02 содержит эти коммиты.

Исправление ошибок

  • Улучшение производительности на DataStore собирает уведомления об обновлениях, только когда оно наблюдается. (b/267792241)
    • Обратите внимание, что это изменение может вызвать UncompletedCoroutinesError в ваших тестах, если вы используете библиотеку тестирования Coroutines. Чтобы избежать этой проблемы, при инициализации DataStore в тестах передавайте TestScope.backgroundScope.
  • Исправлена проблема, из-за которой вложенные вызовы updateData в одном экземпляре приводили к взаимоблокировке. (b/241760537)
  • Теперь DataStore не выдает ошибку IOExceptions, если не удается удалить SharedPreferences во время переноса. (b/195553816)
  • Исправлена ошибка, из-за которой не удавалось переименовать файл во время updateData в средах JVM, отличных от Android. (b/203087070)
  • Исправлена ошибка, из-за которой CorruptionException не обрабатывался после инициализации DataStore. (b/289582516)

Версия 1.1.0-beta01

10 января 2024 г.

Версия androidx.datastore:datastore-*:1.1.0-beta01 выпущена без изменений по сравнению с версией 1.1.0-alpha07. Версия 1.1.0-beta01 содержит эти коммиты.

Версия 1.1.0-alpha07

29 ноября 2023 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0-alpha07". Версия 1.1.0-alpha07 содержит эти коммиты.

Изменения в API

  • Методы MultiProcessDataStoreFactory больше не являются экспериментальными.Аннотация @ExperimentalMultiProcessDataStore полностью удалена. (Ieee54, I8e607)

Исправление ошибок

  • Удаление аннотаций @ExperimentalMultiProcessDataStore в версии 1.1.0-alpha07. (I8e607)

Версия 1.1.0-alpha06

1 ноября 2023 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0-alpha06". Версия 1.1.0-alpha06 содержит эти коммиты.

Изменения в API

  • Фабричный метод createSingleProcessCoordinator теперь получает путь к файлу (String, java.io.File и okio.Path), чтобы обеспечить совместимость с createMultiProcessCoordinator. (I211c8, b/305755935)

Версия 1.1.0-alpha05

6 сентября 2023 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0-alpha05". Версия 1.1.0-alpha05 содержит эти коммиты.

Изменения в API

  • Datastore FileStorage теперь общедоступен, поэтому клиенты могут предоставлять собственные параметры. (Icb985)
  • Конструктор OkioStorage теперь принимает InterProcessCoordinator, чтобы его можно было использовать на Android с MultiProcessCoordinator. (Iecea3)

Исправление ошибок

  • Исправлена ошибка, из-за которой MultiProcessCoordinator не мог отслеживать несколько файлов в одном каталоге.
  • Исправлена ошибка, из-за которой не удавалось обнаружить повторяющиеся файлы, если пути к ним не были нормализованы.
  • Исправьте неверные значения, возвращаемые из RxDataStore#isDisposed.
  • Исправьте отсутствующую конфигурацию ProGuard для объекта datstore-preferences-core.

Версия 1.1.0-alpha04

5 апреля 2023 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0-alpha04". Версия 1.1.0-alpha04 содержит эти коммиты.

Исправление ошибок

  • Улучшите внутреннюю реализацию, чтобы избежать состояния гонки, когда поток данных DataStore может выдать более старое значение после обновления.

Версия 1.1.0-alpha03

24 марта 2023 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0-alpha03".

Исправление ошибок

  • Удалены ограничения зависимостей из артефактов Maven, чтобы обойти проблему со сборкой в Kotlin Native Targets (b/274786186, KT-57531).

Версия 1.1.0-alpha02

22 марта 2023 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0-alpha02". Версия 1.1.0-alpha02 содержит эти коммиты.

Примечание

Обратите внимание, что эта версия включает важный внутренний рефакторинг, который объединяет реализации для однопроцессных и многопроцессных реализаций DataStore. Следите за возможными непредвиденными изменениями в поведении (например, за временем уведомлений об обновлении). Сообщить о таких изменениях можно с помощью компонента системы отслеживания ошибок.

Новые функции

  • Теперь вы можете использовать DataStore в проектах KMM. Обратите внимание, что целевые платформы DataStore, отличные от Android, все ещё находятся на стадии эксперимента, но мы решили объединить версии, чтобы разработчикам было проще их попробовать.
  • Функции, связанные с несколькими процессами, перенесены из androidx.datastore.multiprocess в androidx.datastore.core.
  • Добавьте новый фабричный метод в androidx.datastore.core.MultiProcessDataStoreFactory, чтобы создавать экземпляры DataStore с объектами Storage для операций с файлами.
  • Добавлен новый интерфейс InterProcessCoordinator, который помогает нескольким экземплярам DataStore обмениваться данными между процессами. Обратите внимание, что многопроцессная реализация InterProcessCoordinator доступна только на устройствах Android.

Изменения в API

  • Добавление InterProcessCoordinator в StorageConnection в интерфейсе datastore-core (I555bb)
  • Измените API в datastore-core MultiProcessDataStoreFactory, чтобы использовать Storage. (Iac02f)
  • Общедоступные API перенесены из datastore-multiprocess в datastore-core (I76d7c).
  • Добавлен класс PreferencesSerializer из datastore-preferences-core (I4b788).
  • Добавление аннотации @JvmDefaultWithCompatibility (I8f206)

Версия 1.1.0-alpha01

9 ноября 2022 г.

Выпущены данные "androidx.datastore:datastore-*:1.1.0-alpha01". Версия 1.1.0-alpha01 содержит эти коммиты.

Новые функции

  • Поддержка многопроцессных сценариев использования, в которых гарантируется согласованность данных между экземплярами DataStore в разных процессах. Добавьте MultiProcessDataStoreFactory#create, чтобы создать такие экземпляры DataStore.
  • Новый интерфейс Storage, который позволяет переключать базовый механизм хранения для Datastore. Предоставляются реализации для java.io и okio. В фабрики DataStore добавлены новые методы, которые принимают этот объект Storage.

Изменения в API

  • Измените API в datastore-core MultiProcessDataStoreFactory, чтобы использовать Storage. (Iac02f)
  • Общедоступные API перенесены из datastore-multiprocess в datastore-core (I76d7c).
  • Добавлен класс PreferencesSerializer из datastore-preferences-core (I4b788).

Версия 1.0.0

Версия 1.0.0

4 августа 2021 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0". Версия 1.0.0 содержит эти коммиты.

Основные функции версии 1.0.0

Jetpack DataStore – это решение для хранения данных, которое позволяет хранить пары "ключ-значение" или типизированные объекты с буферами протокола. DataStore использует сопрограммы Kotlin и Flow для асинхронного, согласованного и транзакционного хранения данных.

Версия 1.0.0-rc02

21 июля 2021 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-rc02". Версия 1.0.0-rc02 содержит эти коммиты.

Исправление ошибок

  • Уточните, что SharedPreferencesMigration не выполняется, если нет ключей. (Icfa32, b/192824325)
  • Исправлена ошибка, из-за которой SharedPreferencesMigration, созданный с помощью MIGRATE_ALL_KEYS, выдавал исключение, если запрашиваемый ключ ещё не существовал. (Ie318a, b/192824325)

Версия 1.0.0-rc01

30 июня 2021 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-rc01". Версия 1.0.0-rc01 содержит эти коммиты.

Исправление ошибок

  • Исправлена ошибка, из-за которой файл .java случайно добавлялся в конечный JAR-файл (I65d96, b/188985637).

Версия 1.0.0-beta02

16 июня 2021 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-beta02". Версия 1.0.0-beta02 содержит эти коммиты.

Исправление ошибок

  • Исправить ClassVerificationFailure (b/187450483)

Версия 1.0.0-beta01

21 апреля 2021 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-beta01". Версия 1.0.0-beta01 содержит эти коммиты.

Изменения в API

  • Удалены перегрузки JVM для методов, предназначенных только для Kotlin (I2adc7).

Исправление ошибок

  • Исправлена ошибка, из-за которой делегаты хранилища данных могли приводить к утечке контекстов (Ie96fc, b/184415662).

Версия 1.0.0-alpha08

10 марта 2021 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-alpha08". Версия 1.0.0-alpha08 содержит эти коммиты.

Изменения в API

  • Теперь вы можете добавить в делегат свойств dataStore и preferencesDataStore перенос, зависящий от контекста. (I4ef69, b/173726702)
  • Добавлены вспомогательные функции для получения имени файла, если вы больше не используете делегат хранилища данных или context.createDataStore (I60f9a).
  • Функции writeTo и readFrom сериализатора теперь приостанавливаются. Если вы реализовали Serializer, вам нужно будет обновить свои функции, чтобы они стали функциями приостановки. (I1e58e)
  • Добавлены делегаты свойств для пользователей RxDataStore. (Ied768, b/173726702)

Исправление ошибок

  • Принудительно применяются ограничения на публичное использование экспериментальных API (I6aa29, b/174531520).

Версия 1.0.0-alpha07

24 февраля 2021 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-alpha07". Версия 1.0.0-alpha07 содержит эти коммиты.

Изменения в API

  • Функция расширения Context.createDataStore удалена и заменена делегатом свойства globalDataStore. Вызовите globalDataStore один раз на верхнем уровне в файле kotlin. Пример:

    val Context.myDataStore by dataStore(...)
    

    Поместите его на верхний уровень файла Kotlin, чтобы у него был только один экземпляр. (I57215, b/173726702)

  • Функции RxDataStore теперь находятся в классе RxDataStore, а не в функциях расширения DataStore. (Idccdb, b/177691248)

  • Если вы хотите перенести EncryptedSharedPreferences (или SharedPreferences с прямой загрузкой) в DataStore, теперь вы можете сделать это с помощью нового конструктора SharedPreferencesMigration, который позволяет внедрять SharedPreferences. (I8e04e, b/177278510)

Исправление ошибок

  • Теперь DataStore будет выдавать исключение, если для одного файла есть несколько активных хранилищ данных. Если вы не управляли DataStore как Singleton или не обеспечивали, чтобы для файла не были одновременно активны два экземпляра DataStore, то теперь при чтении или записи в DataStore могут возникать исключения. Чтобы устранить эти проблемы, управляйте DataStore как Singleton. (Ib43f4, b/177691248)
  • Исправлено поведение при отмене, когда отменяется область вызывающего абонента. (I2c7b3)

Версия 1.0.0-alpha06

13 января 2021 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-alpha06". Версия 1.0.0-alpha06 содержит эти коммиты.

Новые функции

  • Добавлены оболочки RxJava для DataStore. Артефакты datastore-rxjava2/3 содержат оболочки для основных API DataStore (RxDataStore, RxDataStoreBuilder и RxDataMigration). Артефакты datastore-preferences-rxjava2/3 содержат конструктор для создания Preferences DataStore.

Изменения в API

  • Скрыть интерфейс CorruptionHandler. Не было причин делать его общедоступным, поскольку фабрика DataStore принимает только ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
  • Метод preferencesKey<T>(name: String): Key<T> удален и заменен методами, предназначенными для каждого поддерживаемого типа. Например, preferencesKey<Int>("int") теперь называется intPreferencesKey("int") (Ibcfac, b/170311106).

Исправление ошибок

  • Исправлена документация по DataStoreFactory, в которой не было указано, что файл хранилища данных создается в подкаталоге datastore/. (Ica222)

Версия 1.0.0-alpha05

2 декабря 2020 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-alpha05". Версия 1.0.0-alpha05 содержит эти коммиты.

Исправление ошибок

  • Добавьте более подробную документацию и исключения, связанные с параллельной записью из хранилищ данных. (Ia98a2, b/173522155, b/173726702)
  • Теперь мы разрешаем (но не требуем), чтобы OutputStream, переданный в Serializer.writeTo(), был закрыт. (I5c9bf, b/173037611)

Версия 1.0.0-alpha04

17 ноября 2020 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-alpha04". Версия 1.0.0-alpha04 содержит эти коммиты.

Исправление ошибок

  • Исправлена проблема с упаковкой, которая приводила к следующему сбою в Preference Datastore 1.0.0-alpha03: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences

Версия 1.0.0-alpha03

11 ноября 2020 г.

Выпущены данные "androidx.datastore:datastore-*:1.0.0-alpha03". Версия 1.0.0-alpha03 содержит эти коммиты.

Новые функции

  • В Preferences теперь поддерживаются значения double, что полезно, если вам нужна более высокая точность, чем у float (I5be8f, b/169471808).

Изменения в API

  • Создана чистая зависимость Kotlin для хранилища данных, чтобы ускорить компиляцию. androidx.datastore:datastore-core содержит основные API только для Kotlin, а androidx.datastore:datastore – API, зависящие от Android (включая конструкторы SharedPreferencesMigration и Context.createDataStore). (I42d75, b/168512698)
  • Разделение целей для хранилища данных настроек, чтобы ускорить компиляцию Kotlin (Ia3c19).
  • Теперь сериализаторам требуется новое свойство для значения по умолчанию, которое будет использоваться, если на диске нет данных. Это упрощает реализацию пользовательских сериализаторов, поэтому пользователям не нужно создавать специальные пустые входные потоки (пустые входные потоки не анализируются с помощью JSON).

    • Также теперь проверяется, не закрыт ли выходной поток, предоставленный writeTo(). Если он закрыт, выдаются исключения (I16e29).
  • Конструктор SharedPreferencesView теперь внутренний. Изначально она была общедоступной, чтобы ее можно было протестировать. Вместо этого в тестах следует создать SharedPreferencesMigration и тестировать его. (I93891)

Исправление ошибок

  • Параметр produceFile в DataStoreFactory и PreferenceDataStoreFactory теперь является последним в списке, что позволяет использовать синтаксис завершающей лямбда-функции Kotlin. (Ibe7f1, b/169425442)
  • Добавлены новые требования к явному API для Kotlin (I5ae1e).

Известные проблемы

  • Сбой Preference Datastore с ошибкой java.lang.NoClassDefFoundError. (b/173036843)

Версия 1.0.0-alpha02

14 октября 2020 г.

Данные "androidx.datastore:datastore-core:1.0.0-alpha02" и "androidx.datastore:datastore-preferences:1.0.0-alpha02" опубликованы. Версия 1.0.0-alpha02 содержит эти коммиты.

Исправление ошибок

  • Добавлена защита от мутации в datastore-core. Мутация нарушает использование хранилища данных для пользователей, использующих хранилище данных с типами, отличными от proto/preferences (I6aa84).
  • В Preferences.kt добавлен метод toString, упрощающий отладку текущего состояния (I96006).
  • Добавлено исключение для защиты от недопустимого использования DataStore.Preferences (I1134d).
  • Исправлена ошибка, из-за которой приложение аварийно завершало работу при запуске (I69237, b/168580258).

Версия 1.0.0-alpha01

2 сентября 2020 г.

Данные "androidx.datastore:datastore-core:1.0.0-alpha01" и "androidx.datastore:datastore-preferences:1.0.0-alpha01" опубликованы. Версия 1.0.0-alpha01 содержит эти коммиты.

Новые функции

Jetpack DataStore – это новое улучшенное решение для хранения данных, которое должно заменить SharedPreferences. DataStore основан на сопрограммах Kotlin и Flow и предоставляет две разные реализации:

  • Proto DataStore, которое позволяет хранить типизированные объекты (на основе буферов протокола).
  • Preferences DataStore, который хранит пары "ключ-значение".

Данные хранятся асинхронно, последовательно и транзакционно, что позволяет преодолеть большинство недостатков SharedPreferences.