DataStore

一貫して非同期で、トランザクションとしてデータを保存し、SharedPreferences の欠点の一部を解消します。
最新の更新 現在の安定版リリース 次のリリース候補 ベータ版リリース アルファ版リリース
2021 年 8 月 4 日 1.0.0 - - -

依存関係の宣言

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

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

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

Datastore Typed

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

Datastore Preferences

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

フィードバック

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

新しい問題を報告する

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

バージョン 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 に含まれるコミットについては、こちらをご覧ください

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 に含まれるコミットについては、こちらをご覧ください。

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 に含まれるコミットについては、こちらをご覧ください。

新機能

  • 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 の欠点の大部分を解消します。