DataStore
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2024 年 5 月 1 日 | 1.1.1 | - | - | - |
依存関係の宣言
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.1.1" // optional - RxJava2 support implementation "androidx.datastore:datastore-preferences-rxjava2:1.1.1" // optional - RxJava3 support implementation "androidx.datastore:datastore-preferences-rxjava3:1.1.1" } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation "androidx.datastore:datastore-preferences-core:1.1.1" }
Kotlin
// Preferences DataStore (SharedPreferences like APIs) dependencies { implementation("androidx.datastore:datastore-preferences:1.1.1") // optional - RxJava2 support implementation("androidx.datastore:datastore-preferences-rxjava2:1.1.1") // optional - RxJava3 support implementation("androidx.datastore:datastore-preferences-rxjava3:1.1.1") } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation("androidx.datastore:datastore-preferences-core:1.1.1") }
Proto DataStore
Groovy
// Typed DataStore (Typed API surface, such as Proto) dependencies { implementation "androidx.datastore:datastore:1.1.1" // optional - RxJava2 support implementation "androidx.datastore:datastore-rxjava2:1.1.1" // optional - RxJava3 support implementation "androidx.datastore:datastore-rxjava3:1.1.1" } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation "androidx.datastore:datastore-core:1.1.1" }
Kotlin
// Typed DataStore (Typed API surface, such as Proto) dependencies { implementation("androidx.datastore:datastore:1.1.1") // optional - RxJava2 support implementation("androidx.datastore:datastore-rxjava2:1.1.1") // optional - RxJava3 support implementation("androidx.datastore:datastore-rxjava3:1.1.1") } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation("androidx.datastore:datastore-core:1.1.1") }
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。
詳細については、Issue Tracker のドキュメントをご覧ください。
バージョン 1.1
バージョン 1.1.1
2024 年 5 月 1 日
androidx.datastore:datastore-*:1.1.1
がリリースされました。バージョン 1.1.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- 「リソースのデッドロックが発生する」という Linux の誤アラームを軽減しましたまれに、複数の
DataStore
インスタンスがファイルロックをバックオフして異なるプロセスから書き込みを試行します。
バージョン 1.1.0
2024 年 4 月 17 日
androidx.datastore:datastore-*:1.1.0
がリリースされました。バージョン 1.1.0 に含まれる commit については、こちらをご覧ください。
1.0.0 リリース以降の主な変更
詳しくは、1.1.0 のアルファ版およびベータ版のリリースノートをご覧ください。1.1.0 の主な更新内容は次のとおりです。
- DataStore は、同じファイルにアクセスする複数のプロセスをサポートし、プロセス全体のオブザーバビリティをサポートします。
- Storage の新しいインターフェースでは、データモデルを保存またはシリアル化する方法をカスタマイズできます。
- Kotlin マルチプラットフォーム プロジェクトで DataStore を使用できるようになりました。
バージョン 1.1.0-rc01
2024 年 4 月 3 日
androidx.datastore:datastore-*:1.1.0-rc01
がリリースされました。バージョン 1.1.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
- 新しいデータが古いデータと同じ場合に
updateData
の呼び出しがディスク書き込みで最適化されないパフォーマンス低下を修正しました(d64cfb5) MultiProcess
DataStore
が初期化中に無効化を見逃す競合状態を修正しました。(b/326141553、094c2dd)
バージョン 1.1.0-beta02
2024 年 3 月 6 日
androidx.datastore:datastore-*:1.1.0-beta02
がリリースされました。バージョン 1.1.0-beta02 に含まれる commit については、こちらをご覧ください。
バグの修正
DataStore
のパフォーマンスの向上が確認された場合にのみ、更新通知が収集されます。(b/267792241)。 <ph type="x-smartling-placeholder">- </ph>
- なお、コルーチン テスト ライブラリを使用している場合、この変更によってテストで
UncompletedCoroutinesError
がトリガーされる可能性があります。この問題を回避するには、テストでDataStore
を初期化するときに必ずTestScope.backgroundScope
を渡してください。
- なお、コルーチン テスト ライブラリを使用している場合、この変更によってテストで
- 同じインスタンスにネストされた
updateData
呼び出しでデッドロックが発生する問題を修正しました。(b/241760537)。 - 移行中に
SharedPreferences
の削除に失敗した場合にDataStore
がIOExceptions
をスローしないようにしました。(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
アノテーションは完全に削除されました。(Ieee54、I8e607)。
バグの修正
@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
と一致するようにファイルパス(String
、java.io.File
、okio.Path
)を受け取るようになりました。(I211c8、b/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
コンストラクタを変更し、MultiProcessCoordinator
を使用して Android で使用できるようにしました。(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 ネイティブ ターゲットのビルドの問題を回避するために、Maven アーティファクトから依存関係の制約を削除しました(b/274786186、KT-57531)。
バージョン 1.1.0-alpha02
2023 年 3 月 22 日
androidx.datastore:datastore-*:1.1.0-alpha02
がリリースされました。バージョン 1.1.0-alpha02 に含まれる commit については、こちらをご覧ください。
注
このバージョンには、単一プロセス DataStore 実装とマルチプロセス DataStore 実装の実装を統合した重要な内部リファクタリングが含まれています。予期しない動作変更(アップデート通知のタイミングなど)に注意してください。Issue Tracker コンポーネントを使用して、このような変更を報告できます。
新機能
- KMM プロジェクトで
DataStore
を使用できるようになりました。なお、DataStore の Android 以外のターゲットはまだ試験運用版ですが、デベロッパーが簡単に試せるようにバージョンを統合することにしました。 - マルチプロセス機能は
androidx.datastore.multiprocess
からandroidx.datastore.core
に移動されました。 androidx.datastore.core.MultiProcessDataStoreFactory
に新しいファクトリ メソッドを追加し、ファイル オペレーション用のStorage
オブジェクトを持つ DataStore インスタンスを作成します。- 複数の DataStore インスタンスがプロセス間で通信できるようにする新しいインターフェース
InterProcessCoordinator
を追加します。InterProcessCoordinator
のマルチプロセス実装は、Android でのみ使用できます。
API の変更
- datastore-core インターフェースの
StorageConnection
にInterProcessCoordinator
を追加しました(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
が実行されないことを明確にしました。(Icfa32、b/192824325) - リクエストされたキーがまだ存在しない場合に
MIGRATE_ALL_KEYS
で構築されたSharedPreferencesMigration
が例外をスローするバグを修正しました。(Ie318a、b/192824325)
バージョン 1.0.0-rc01
2021 年 6 月 30 日
androidx.datastore:datastore-*:1.0.0-rc01
がリリースされました。バージョン 1.0.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
- .java ファイルが誤って最終的な jar に追加されていたバグを修正しました。(I65d96、b/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)
バグの修正
- データストア デリゲートがコンテキストをリークさせる可能性があるバグを修正しました(Ie96fc、b/184415662)。
バージョン 1.0.0-alpha08
2021 年 3 月 10 日
androidx.datastore:datastore-*:1.0.0-alpha08
がリリースされました。バージョン 1.0.0-alpha08 に含まれる commit については、こちらをご覧ください。
API の変更
- コンテキストに依存する移行を
dataStore
およびpreferencesDataStore
プロパティ デリゲートに追加できるようになりました。(I4ef69、b/173726702) - データストア デリゲートまたは context.createDataStore を使用しなくなった場合にファイル名を取得するヘルパー関数を追加しています(I60f9a)
- Serialize writeTo と readFrom が suspend 関数になりました。Serialize を実装した場合は、suspend 関数を呼び出すように関数を更新する必要があります。(I1e58e)
- RxDataStore ユーザー用プロパティ デリゲートを追加しました。(Ied768、b/173726702)
バグの修正
- 試験運用版 API の一般使用に対する制限を適用します(I6aa29、b/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 つだけになるようにします。(I57215、b/173726702)
RxDataStore 関数が、DataStore の拡張関数ではなく、RxDataStore クラスの関数になりました。(Idccdb、b/177691248)
EncryptedSharedPreferences(またはダイレクト ブートの SharedPreferences)を DataStore に移行する場合、SharedPreferences を挿入できる新しい SharedPreferencesMigration コンストラクタで行えるようになりました。(I8e04e、b/177278510)
バグの修正
- 同じファイルにアクティブな Datastore が複数存在する場合、DataStore が例外をスローするようになりました。DataStore をシングルトンとして管理していない場合、または DataStore の 2 つのインスタンスが 1 つのファイルに対して同時にアクティブにならないようにしていない場合、DataStore の読み取りまたは書き込みの際に例外が発生する可能性があります。この問題は、DataStore をシングルトンとして管理することで修正できます。(Ib43f4、b/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(RxDataStore
、RxDataStoreBuilder
、RxDataMigration
)のラッパーが含まれています。datastore-preferences-rxjava2/3
アーティファクトには、Preferences DataStore を構築するためのビルダーが含まれています。
API の変更
- CorruptionHandler インターフェースが非表示になります。DataStore Factory は ReplaceFileCorruptionHandler しか受け入れないため、これを公開する理由はありませんでした。(I0b3b3、b/176032264)
preferencesKey<T>(name: String): Key<T>
メソッドが削除され、サポートされている各タイプに固有のメソッドに置き換えられました。たとえば、preferencesKey<Int>("int")
はintPreferencesKey("int")
になりました。(Ibcfac、b/170311106)
バグの修正
- データストアのファイルは「datastore/」サブディレクトリに作成されるという記述が欠けていたため、DataStoreFactory のドキュメントを修正します。(Ica222)
バージョン 1.0.0-alpha05
2020 年 12 月 2 日
androidx.datastore:datastore-*:1.0.0-alpha05
がリリースされました。バージョン 1.0.0-alpha05 に含まれる commit については、こちらをご覧ください。
バグの修正
- データストアからの同時書き込みについて、より適切なドキュメントと例外を追加しました。(Ia98a2、b/173522155、b/173726702)
Serializer.writeTo()
に渡された OutputStream を閉じることができるようにしました(これは必須ではありません)。(I5c9bf、b/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
- このクラッシュは元々 b/173036843 で報告されました。
- (I4712d、b/173036843)
バージョン 1.0.0-alpha03
2020 年 11 月 11 日
androidx.datastore:datastore-*:1.0.0-alpha03
がリリースされました。バージョン 1.0.0-alpha03 に含まれる commit については、こちらをご覧ください。
新機能
- Preferences で倍精度値がサポートされるようになりました(浮動小数点数より高い精度が必要な場合に便利です)(I5be8f、b/169471808)
API の変更
- データストア用の純粋な Kotlin 依存関係を作成し、コンパイルを高速化できるようにしました。
androidx.datastore:datastore-core
にはコア Kotlin のみの API が含まれ、androidx.datastore:datastore
には Android に依存する API(SharedPreferencesMigration
とContext.createDataStore
コンストラクタを含む)が含まれます(I42d75、b/168512698) - Preferences データストアのターゲットを分割し、Kotlin コンパイルを高速化しました(Ia3c19)
シリアライザには、ディスク上にデータがない場合に使用されるデフォルト値の新しいプロパティが必要になりました。これにより、カスタム シリアライザの実装が容易になるため、ユーザーは空の入力ストリームを特別扱いする必要がなくなります(空の入力ストリームは JSON で解析されません)。
- また、writeTo() に提供される出力ストリームが閉じられていないことを確認し、閉じられている場合は例外をスローするようになりました(I16e29)
SharedPreferencesView のコンストラクタを内部用にしました。元々はテストのために一般公開されていました。テストでは代わりに SharedPreferencesMigration を作成し、これに対してテストする必要があります。(I93891)
バグの修正
DataStoreFactory
とPreferenceDataStoreFactory
のproduceFile
パラメータがリストの最後のパラメータになり、Kotlin の後置ラムダ構文を使用できるようになりました。(Ibe7f1、b/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-alpha02
と androidx.datastore:datastore-preferences:1.0.0-alpha02
がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください。
バグの修正
- datastore-core にミューテーションに対する保護手段を追加しました。ミューテーションは、proto / preferences でないタイプのデータストアを使用するユーザー(I6aa84)によるデータストアの使用を遮断します。
- 現在の状態を簡単にデバッグできるようにするため、Preferences.kt に
toString
メソッドを追加しました(I96006) DataStore.Preferences
の誤用を防ぐための例外を追加しました(I1134d)- 起動時にアプリがクラッシュする原因となるバグを修正しました(I69237、b/168580258)
バージョン 1.0.0-alpha01
2020 年 9 月 2 日
androidx.datastore:datastore-core:1.0.0-alpha01
と androidx.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 の欠点の大部分を解消します。