DataStore

一貫性のある、トランザクションとしてのデータの保存を非同期で行い、SharedPreferences の欠点の一部を解消します。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2024 年 3 月 20 日 1.0.0 1.1.0-rc01 - -

依存関係の宣言

DataStore への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

DataStore の実装には、Preferences と Proto という 2 つがあります。どちらか一方を選択します。どちらの実装にも、Android なしの依存関係を追加することもできます。

アプリまたはモジュールの build.gradle ファイルに、必要な実装の依存関係を追加します。

Preferences DataStore

Groovy

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

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-preferences-rxjava2:1.0.0"

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

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-preferences-core:1.0.0"
    }
    

Kotlin

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

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-preferences-rxjava2:1.0.0")

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

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-preferences-core:1.0.0")
    }
    

Proto DataStore

Groovy

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation "androidx.datastore:datastore:1.0.0"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-rxjava2:1.0.0"

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

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-core:1.0.0"
    }
    

Kotlin

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation("androidx.datastore:datastore:1.0.0")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-rxjava2:1.0.0")

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

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-core:1.0.0")
    }
    

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 1.1

バージョン 1.1.0-beta02

2024 年 3 月 6 日

androidx.datastore:datastore-*:1.1.0-beta02 がリリースされました。バージョン 1.1.0-beta02 に含まれる commit については、こちらをご覧ください。

バグの修正

  • DataStore のパフォーマンスの向上が確認された場合にのみ、更新通知が収集されます。(b/267792241
    • コルーチン テスト ライブラリを使用している場合、この変更によりテストで UncompletedCoroutinesError がトリガーされる可能性があります。この問題を回避するには、テストで DataStore を初期化するときに TestScope.backgroundScope を渡すようにしてください。
  • 同じインスタンスでネストされた updateData 呼び出しでデッドロックが発生する問題を修正しました。(b/241760537
  • 移行中に SharedPreferences の削除に失敗した場合に DataStoreIOExceptions をスローしないようにしました。(b/195553816
  • Android 以外の JVM 環境で updateData の実行中にファイル名の変更が失敗する問題を修正しました。(b/203087070
  • DataStore の初期化後に CorruptionException が処理されない問題を修正しました。(b/289582516

バージョン 1.1.0-beta01

2024 年 1 月 10 日

androidx.datastore:datastore-*:1.1.0-beta01 がリリースされました。1.1.0-alpha07 からの変更はありません。バージョン 1.1.0-beta01 に含まれる commit については、こちらをご覧ください

バージョン 1.1.0-alpha07

2023 年 11 月 29 日

androidx.datastore:datastore-*:1.1.0-alpha07 がリリースされました。バージョン 1.1.0-alpha07 に含まれる commit については、こちらをご覧ください。

API の変更

  • MultiProcessDataStoreFactory メソッドは試験運用版ではなくなりました。@ExperimentalMultiProcessDataStore アノテーションは完全に削除されました。(Ieee54I8e607

バグの修正

  • @ExperimentalMultiProcessDataStore アノテーションの削除を 1.1.0-alpha07 にロールアウトしました。(I8e607

バージョン 1.1.0-alpha06

2023 年 11 月 1 日

androidx.datastore:datastore-*:1.1.0-alpha06 がリリースされました。バージョン 1.1.0-alpha06 に含まれる commit については、こちらをご覧ください

API の変更

  • createSingleProcessCoordinator ファクトリ メソッドが createMultiProcessCoordinator に合わせてファイルパス(Stringjava.io.Fileokio.Path)を受け取るようになりました。(I211c8b/305755935

バージョン 1.1.0-alpha05

2023 年 9 月 6 日

androidx.datastore:datastore-*:1.1.0-alpha05 がリリースされました。バージョン 1.1.0-alpha05 に含まれる commit については、こちらをご覧ください

API の変更

  • Datastore FileStorage は現在公開されており、クライアントはカスタム パラメータを指定できます。(Icb985
  • InterProcessCoordinator を受け入れるように OkioStorage コンストラクタを変更し、Android で MultiProcessCoordinator を使用できるようにしました。(Iecea3

バグの修正

  • 同じディレクトリ内の複数のファイルをモニタリングできない MultiProcessCoordinator を修正しました。
  • ファイルパスが正規化されていない場合に重複するファイルを検出できない問題を修正しました。
  • RxDataStore#isDisposed から返された間違った値を修正。
  • datstore-preferences-core アーティファクトの ProGuard 構成の欠落を修正。

バージョン 1.1.0-alpha04

2023 年 4 月 5 日

androidx.datastore:datastore-*:1.1.0-alpha04 がリリースされました。バージョン 1.1.0-alpha04 に含まれる commit については、こちらをご覧ください

バグの修正

  • 更新後に DataStore のデータフローが古い値を出力する競合状態を回避するために、内部実装を改善しました。

バージョン 1.1.0-alpha03

2023 年 3 月 24 日

androidx.datastore:datastore-*:1.1.0-alpha03 がリリースされました。

バグの修正

  • Kotlin Native Targets のビルドの問題を回避するために、Maven アーティファクトから依存関係の制約を削除しました(b/274786186KT-57531)。

バージョン 1.1.0-alpha02

2023 年 3 月 22 日

androidx.datastore:datastore-*:1.1.0-alpha02 がリリースされました。バージョン 1.1.0-alpha02 に含まれる commit については、こちらをご覧ください

このバージョンには、単一プロセスとマルチプロセスの DataStore 実装の実装を統合した重要な内部リファクタリングが含まれています。意図しない動作の変化(更新通知のタイミングなど)にご注意ください。Issue Tracker コンポーネントを使用して、そのような変更を報告できます。

新機能

  • KMM プロジェクトで DataStore を使用できるようになりました。Android 以外の DataStore ターゲットはまだ試験運用版ですが、デベロッパーが簡単に試せるようにバージョンをマージすることにしました。
  • マルチプロセス機能を androidx.datastore.multiprocess から androidx.datastore.core に移動しました。
  • androidx.datastore.core.MultiProcessDataStoreFactory に新しいファクトリ メソッドを追加し、ファイル操作用の Storage オブジェクトを持つ DataStore インスタンスを作成します。
  • 複数の DataStore インスタンスがプロセス間で通信できるように、新しいインターフェース InterProcessCoordinator を追加しました。InterProcessCoordinator のマルチプロセス実装は Android でのみ利用できます。

API の変更

  • datastore-core インターフェースの StorageConnectionInterProcessCoordinator を追加しました。(I555bb
  • Storage を使用するよう、datastore-core MultiProcessDataStoreFactory で API を変更しました。(Iac02f
  • datastore-multiprocess の公開 API を datastore-core に移動しました(I76d7c
  • datastore-preferences-core から PreferencesSerializer を公開しました(I4b788
  • @JvmDefaultWithCompatibility アノテーションを追加しました。(I8f206

バージョン 1.1.0-alpha01

2022 年 11 月 9 日

androidx.datastore:datastore-*:1.1.0-alpha01 がリリースされました。バージョン 1.1.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • プロセス内の DataStore インスタンス間でデータの整合性が保証されるマルチプロセスのユースケースをサポートしました。このような DataStore インスタンスを作成する MultiProcessDataStoreFactory#create を追加しました。
  • 新しい Storage インターフェースで Datastore の基となるストレージ メカニズムを切り替えられます。java.io と okio が実装されています。DataStore ファクトリにこの Storage オブジェクトを受け入れる新しいメソッドが用意されました。

API の変更

  • Storage を使用するよう、datastore-core MultiProcessDataStoreFactory で API を変更しました。(Iac02f
  • datastore-multiprocess の公開 API を datastore-core に移動しました(I76d7c
  • datastore-preferences-core から PreferencesSerializer を公開しました(I4b788

バージョン 1.0.0

バージョン 1.0.0

2021 年 8 月 4 日

androidx.datastore:datastore-*:1.0.0 がリリースされました。バージョン 1.0.0 に含まれる commit については、こちらをご覧ください

1.0.0 の主な機能

Jetpack DataStore は、プロトコル バッファを使用して Key-Value ペアや型付きオブジェクトを格納できるデータ ストレージ ソリューションです。DataStore は、Kotlin コルーチンとフローを使用して、データを非同期的に、一貫した形で、トランザクションとして保存します。

バージョン 1.0.0-rc02

2021 年 7 月 21 日

androidx.datastore:datastore-*:1.0.0-rc02 がリリースされました。バージョン 1.0.0-rc02 に含まれる commit については、こちらをご覧ください

バグの修正

  • キーがない場合、SharedPreferencesMigration が実行されないことを明確にしました。(Icfa32b/192824325
  • リクエストされたキーがまだ存在しない場合に MIGRATE_ALL_KEYS で構築された SharedPreferencesMigration が例外をスローするバグを修正しました。(Ie318ab/192824325

バージョン 1.0.0-rc01

2021 年 6 月 30 日

androidx.datastore:datastore-*:1.0.0-rc01 がリリースされました。バージョン 1.0.0-rc01 に含まれる commit については、こちらをご覧ください

バグの修正

  • .java ファイルが誤って最終的な jar に追加されていたバグを修正しました。(I65d96b/188985637

バージョン 1.0.0-beta02

2021 年 6 月 16 日

androidx.datastore:datastore-*:1.0.0-beta02 がリリースされました。バージョン 1.0.0-beta02 に含まれる commit については、こちらをご覧ください

バグの修正

  • ClassVerificationFailure を修正しました。(b/187450483

バージョン 1.0.0-beta01

2021 年 4 月 21 日

androidx.datastore:datastore-*:1.0.0-beta01 がリリースされました。バージョン 1.0.0-beta01 に含まれる commit については、こちらをご覧ください

API の変更

  • kotlin 専用メソッドの JVM オーバーロードを削除しました。(I2adc7

バグの修正

  • データストア デリゲートがコンテキストをリークさせる可能性があるバグを修正しました(Ie96fcb/184415662)。

バージョン 1.0.0-alpha08

2021 年 3 月 10 日

androidx.datastore:datastore-*:1.0.0-alpha08 がリリースされました。バージョン 1.0.0-alpha08 に含まれる commit については、こちらをご覧ください

API の変更

  • コンテキストに依存する移行を dataStore および preferencesDataStore プロパティ デリゲートに追加できるようになりました。(I4ef69b/173726702
  • データストア デリゲートまたは context.createDataStore を使用しなくなった場合にファイル名を取得するヘルパー関数を追加しています(I60f9a
  • Serialize writeTo と readFrom が suspend 関数になりました。Serialize を実装した場合は、suspend 関数を呼び出すように関数を更新する必要があります。(I1e58e
  • RxDataStore ユーザー用プロパティ デリゲートを追加しました。(Ied768b/173726702

バグの修正

  • 試験運用版 API の一般使用に対する制限を適用します(I6aa29b/174531520

バージョン 1.0.0-alpha07

2021 年 2 月 24 日

androidx.datastore:datastore-*:1.0.0-alpha07 がリリースされました。バージョン 1.0.0-alpha07 に含まれる commit については、こちらをご覧ください。

API の変更

  • Context.createDataStore 拡張関数が削除され、globalDataStore プロパティ デリゲートに置き換えられました。kotlin ファイルの最上位で globalDataStore を 1 回呼び出します。次に例を示します。

    val Context.myDataStore by dataStore(...)
    

    この行を kotlin ファイルの最上位に追加し、インスタンスが 1 つだけになるようにします。(I57215b/173726702

  • RxDataStore 関数が、DataStore の拡張関数ではなく、RxDataStore クラスの関数になりました。(Idccdbb/177691248

  • EncryptedSharedPreferences(またはダイレクト ブートの SharedPreferences)を DataStore に移行する場合、SharedPreferences を挿入できる新しい SharedPreferencesMigration コンストラクタで行えるようになりました。(I8e04eb/177278510

バグの修正

  • 同じファイルにアクティブな Datastore が複数存在する場合、DataStore が例外をスローするようになりました。DataStore をシングルトンとして管理していない場合、または DataStore の 2 つのインスタンスが 1 つのファイルに対して同時にアクティブにならないようにしていない場合、DataStore の読み取りまたは書き込みの際に例外が発生する可能性があります。この問題は、DataStore をシングルトンとして管理することで修正できます。(Ib43f4b/177691248
  • 発信者のスコープがキャンセルされた際のキャンセルの動作を修正しました。(I2c7b3

バージョン 1.0.0-alpha06

2021 年 1 月 13 日

androidx.datastore:datastore-*:1.0.0-alpha06 がリリースされました。バージョン 1.0.0-alpha06 に含まれる commit については、こちらをご覧ください。

新機能

  • DataStore 用の RxJava ラッパーを追加しました。datastore-rxjava2/3 アーティファクトには、コア DataStore API(RxDataStoreRxDataStoreBuilderRxDataMigration)のラッパーが含まれています。datastore-preferences-rxjava2/3 アーティファクトには、Preferences DataStore を構築するためのビルダーが含まれています。

API の変更

  • CorruptionHandler インターフェースが非表示になります。DataStore Factory は ReplaceFileCorruptionHandler しか受け入れないため、これを公開する理由はありませんでした。(I0b3b3b/176032264
  • preferencesKey<T>(name: String): Key<T> メソッドが削除され、サポートされている各タイプに固有のメソッドに置き換えられました。たとえば、preferencesKey<Int>("int")intPreferencesKey("int") になりました。(Ibcfacb/170311106

バグの修正

  • データストアのファイルは「datastore/」サブディレクトリに作成されるという記述が欠けていたため、DataStoreFactory のドキュメントを修正します。(Ica222

バージョン 1.0.0-alpha05

2020 年 12 月 2 日

androidx.datastore:datastore-*:1.0.0-alpha05 がリリースされました。バージョン 1.0.0-alpha05 に含まれる commit については、こちらをご覧ください

バグの修正

  • データストアからの同時書き込みについて、より適切なドキュメントと例外を追加しました。(Ia98a2b/173522155b/173726702
  • Serializer.writeTo() に渡された OutputStream を閉じることができるようにしました(これは必須ではありません)。(I5c9bfb/173037611

バージョン 1.0.0-alpha04

2020 年 11 月 17 日

androidx.datastore:datastore-*:1.0.0-alpha04 がリリースされました。バージョン 1.0.0-alpha04 に含まれる commit については、こちらをご覧ください

バグの修正

  • Preference Datastore 1.0.0-alpha03 で次のクラッシュを引き起こすパッケージングの問題を修正しました: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences

バージョン 1.0.0-alpha03

2020 年 11 月 11 日

androidx.datastore:datastore-*:1.0.0-alpha03 がリリースされました。バージョン 1.0.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • Preferences で倍精度値がサポートされるようになりました(浮動小数点数より高い精度が必要な場合に便利です)(I5be8fb/169471808

API の変更

  • データストア用の純粋な Kotlin 依存関係を作成し、コンパイルを高速化できるようにしました。androidx.datastore:datastore-core にはコア Kotlin のみの API が含まれ、androidx.datastore:datastore には Android に依存する API(SharedPreferencesMigrationContext.createDataStore コンストラクタを含む)が含まれます(I42d75b/168512698
  • Preferences データストアのターゲットを分割し、Kotlin コンパイルを高速化しました(Ia3c19
  • シリアライザには、ディスク上にデータがない場合に使用されるデフォルト値の新しいプロパティが必要になりました。これにより、カスタム シリアライザの実装が容易になるため、ユーザーは空の入力ストリームを特別扱いする必要がなくなります(空の入力ストリームは JSON で解析されません)。

    • また、writeTo() に提供される出力ストリームが閉じられていないことを確認し、閉じられている場合は例外をスローするようになりました(I16e29
  • SharedPreferencesView のコンストラクタを内部用にしました。元々はテストのために一般公開されていました。テストでは代わりに SharedPreferencesMigration を作成し、これに対してテストする必要があります。(I93891

バグの修正

  • DataStoreFactoryPreferenceDataStoreFactoryproduceFile パラメータがリストの最後のパラメータになり、Kotlin の後置ラムダ構文を使用できるようになりました。(Ibe7f1b/169425442
  • Kotlin の新しい明示的な API 要件に従いました(I5ae1e

既知の問題

  • java.lang.NoClassDefFoundError によって Preference Datastore がクラッシュする。(b/173036843

バージョン 1.0.0-alpha02

2020 年 10 月 14 日

androidx.datastore:datastore-core:1.0.0-alpha02androidx.datastore:datastore-preferences:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください

バグの修正

  • datastore-core にミューテーションに対する保護手段を追加しました。ミューテーションは、proto / preferences でないタイプのデータストアを使用するユーザー(I6aa84)によるデータストアの使用を遮断します。
  • 現在の状態を簡単にデバッグできるようにするため、Preferences.kt に toString メソッドを追加しました(I96006
  • DataStore.Preferences の誤用を防ぐための例外を追加しました(I1134d
  • 起動時にアプリがクラッシュする原因となるバグを修正しました(I69237b/168580258

バージョン 1.0.0-alpha01

2020 年 9 月 2 日

androidx.datastore:datastore-core:1.0.0-alpha01androidx.datastore:datastore-preferences:1.0.0-alpha01 がリリースされました。バージョン 1.0.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

Jetpack DataStore は、SharedPreferences に代わるものとして、改善された新しいデータ ストレージ ソリューションです。DataStore は Kotlin のコルーチンとフローに基づいて構築され、次の 2 種類の実装があります。

  • Proto DataStore: 型付きオブジェクトを保存できます(プロトコル バッファによってサポートされます)
  • Preferences DataStore: Key-Value ペアを保存します

一貫して非同期で、トランザクションとしてデータが保存され、SharedPreferences の欠点の大部分を解消します。