DataStore
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2022 年 11 月 9 日 | 1.0.0 | - | - | 1.1.0-alpha01 |
依存関係の宣言
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-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 の欠点の大部分を解消します。