DataStore

以非同步、一致且交易方式儲存資料,克服 SharedPreferences 的某些缺點
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2026 年 10 月 12 日 1.2.1 1.3.0-rc01 - -

宣告依附元件

如要為 DataStore 新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區。

DataStore 提供不同的序列化選項,請擇一使用。您還可以在任一實作方式中新增無 Android 依附元件。

在應用程式或模組的 build.gradle 檔案中,新增您需要實作的依附元件:

Preferences DataStore

在 Gradle 檔案的依附元件部分中新增下列幾行:

Groovy

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

        // Alternatively - without an Android dependency.
        implementation "androidx.datastore:datastore-preferences-core:1.2.1"
    }
    

Kotlin

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

        // Alternatively - without an Android dependency.
        implementation("androidx.datastore:datastore-preferences-core:1.2.1")
    }
    

如要新增選用的 RxJava 支援,請新增下列依附元件:

Groovy

    dependencies {
        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-preferences-rxjava2:1.2.1"

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

Kotlin

    dependencies {
        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-preferences-rxjava2:1.2.1")

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

DataStore

在 Gradle 檔案的依附元件部分中新增下列幾行:

Groovy

    dependencies {
        // Typed DataStore for custom data objects (for example, using Proto or JSON).
        implementation "androidx.datastore:datastore:1.2.1"

        // Alternatively - without an Android dependency.
        implementation "androidx.datastore:datastore-core:1.2.1"
    }
    

Kotlin

    dependencies {
        // Typed DataStore for custom data objects (for example, using Proto or JSON).
        implementation("androidx.datastore:datastore:1.2.1")

        // Alternatively - without an Android dependency.
        implementation("androidx.datastore:datastore-core:1.2.1")
    }
    

新增下列 RxJava 支援的選用依附元件:

Groovy

    dependencies {
        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-rxjava2:1.2.1"

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

Kotlin

    dependencies {
        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-rxjava2:1.2.1")

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

如要序列化內容,請新增通訊協定緩衝區或 JSON 序列化的依附元件。

JSON 序列化

如要使用 JSON 序列化,請在 Gradle 檔案中新增以下內容:

Groovy

    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 檔案中新增以下內容:

Groovy

    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。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 說明文件。

1.3 版本

1.3.0-rc01 版本

2026 年 10 月 12 日

發布 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 以上版本執行套裝生命週期執行階段 Lint 檢查,則必須使用這個版本。(I99bfd、b/556807521)

1.3.0-alpha11 版

2026 年 9 月 9 日

發布 androidx.datastore:datastore-*:1.3.0-alpha11。1.3.0-alpha11 版包含這些修訂項目。

修正錯誤

  • 在DataStore偏好設定剖析失敗期間擲回的 CorruptionException 訊息中,不會包含基礎檔案路徑。(Ia9e8f)

1.3.0-alpha10 版

2026 年 7 月 29 日

發布 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 版

2026 年 5 月 6 日

發布 androidx.datastore:datastore-*:1.3.0-alpha09。1.3.0-alpha09 版本包含這些修訂版本。

API 變更

  • 將 ReThrowCorruptionHandler 設為公開。(I137bb、b/427722902)
  • 讓追蹤生命週期與系統追蹤保持一致。(Ib391b)

1.3.0-alpha08 版

2026 年 4 月 22 日

發布 androidx.datastore:datastore-*:1.3.0-alpha08。1.3.0-alpha08 版包含這些修訂項目。

新功能

  • 在網頁平台的 DataStore 中新增 Origin Private File System (OPFS) 的支援功能。這項實作導入了 WebOpfsStorage,並提供非同步檔案 I/O、使用 BroadcastChannel API 的跨分頁通知,以及透過原生 Web Locks API 進行分散式鎖定以取得專屬寫入權限的架構支援。Id7f5807 b/316376114

API 變更

  • 推出 WebLocalStorage 和 WebSessionStorage API,可在網頁環境中明確管理儲存空間類型。I35fa259b b/316376114

1.3.0-alpha07 版

2026 年 3 月 11 日

發布 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 提供自己的損毀邏輯。此外,Builder API 要求使用 CoroutineContext 而非 CoroutineScope 初始化 DataStore,這是結構化並行機制的改進,因為它允許呼叫端定義執行行為 (例如特定調度器),而不會強制 DataStore 不當管理或受呼叫端範圍的生命週期限制。

    注意:建議所有使用者從 DataStoreFactory 遷移至新的 DataStore.Builder API。API 要求使用 CoroutineContext 而非 CoroutineScope,藉此強制執行更完善的結構化並行。這樣可確保 DataStore 作業不會繫結至短暫的 UI 生命週期 (例如 viewModelScope),避免過早取消和潛在的資料遺失。

    警告:請確認提供給 Builder 的 CoroutineContext 具有 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 版

2026 年 2 月 25 日

發布 androidx.datastore:datastore-*:1.3.0-alpha06。1.3.0-alpha06 版包含這些修訂項目。

新功能

  • DataStore 現在支援 Android 目標廣告平台的 androidx.tracing。如要建立具有追蹤功能的 DataStore,請將 androidx.tracing.Tracer 執行個體提供給 DataStoreFactory.createWithTracing() 函式。(I71bc2、b/427722902)

1.3.0-alpha05 版

2026 年 1 月 28 日

發布 androidx.datastore:datastore-*:1.3.0-alpha05。1.3.0-alpha05 版包含這些修訂項目。

新功能

  • 基準設定檔已新增至資料儲存庫。(3916245、b/469127532)。
  • 透過 localStorage 在 DataStore 中實作 WASM/JS 支援。與現有的 sessionStorage 實作方式相比,這項功能可啟用跨分頁事件通知和同步處理,因此具有明顯優勢。(I67246、b/441511612)

1.3.0-alpha04 版本

2026 年 1 月 14 日

發布 androidx.datastore:datastore-*:1.3.0-alpha04。1.3.0-alpha04 版包含這些修訂項目。

API 變更

  • 新增公用程式複製函式,可用於更新 Preferences DataStore 的資料。(I70a18、b/467120382)

修正錯誤

  • 解決二進位資料在儲存期間可能格式錯誤的問題,方法是將 UTF-8 字串處理方式替換為 Base64 編碼 (適用於網頁)。(Ie3178、b/473790107)

1.3.0-alpha03 版

2025 年 12 月 17 日

發布 androidx.datastore:datastore-*:1.3.0-alpha03。1.3.0-alpha03 版包含這些修訂項目。

修正錯誤

  • 修正無法重新命名暫時資料儲存庫檔案的問題。(I94f89、b/203087070)
  • 修正問題,避免在並行讀取/寫入期間捨棄更新。DataStore.data 上的新收集器與並行 updateData 呼叫之間可能會發生競爭狀況,導致收集器錯過新值。(I6a427、b/431787506)

1.3.0-alpha02 版本

2025 年 12 月 3 日

發布 androidx.datastore:datastore-*:1.3.0-alpha02。1.3.0-alpha02 版包含這些修訂項目。

修正錯誤

1.3.0-alpha01 版本

2025 年 11 月 19 日

發布 androidx.datastore:datastore-*:1.3.0-alpha01。1.3.0-alpha01 版包含這些修訂項目。

新功能

  • 使用 sessionStorage API 在 DataStore 中新增 KMP Web 支援。這項功能可讓 DataStore 在單一瀏覽器分頁中暫時保留資料。(I60fad、b/316376114)

1.2 版本

1.2.1 版本

2026 年 3 月 11 日

發布 androidx.datastore:datastore-*:1.2.1。1.2.1 版包含這些修訂項目。

沒有變更

  • 這個版本修正了基礎架構的小錯誤,並未包含 1.2.0 版的任何 DataStore API 或行為變更。

1.2.0 版本

2025 年 11 月 19 日

發布 androidx.datastore:datastore-*:1.2.0。1.2.0 版包含以下修訂項目。

自 1.1.0 版以來的重大異動

Java/Guava 支援:

  • 新增 datastore-guava 模組,透過 GuavaDataStore 公開適合 Java 和 Guava ListenableFuture 使用者的 API。
  • 在 GuavaDataStore 中新增多程序支援。
  • 新增 GuavaDataStore.from 的超載,可接受 Java Executor (而非 CoroutineContext) 並使用 androidx.core.util.Function。

直接開機支援:

  • 現在支援在直接啟動模式下使用 DataStore。DataStoreFactory 中的 createInDeviceProtectedStorage() 和 DataStoreDelegate 中的 deviceProtectedDataStore() 等新 API 可在裝置受保護儲存空間中建立 DataStore。

儲存空間和 API 異動:

  • 新增實作 androidx.datastore.core.Serializer 的 PreferencesFileSerializer,可與 FileStorage 搭配使用。
  • 定義 ReplaceFileCorruptionHandler 的預設建構函式,以便用於一般程式碼。

修正錯誤:

  • 修正在以 R8 最佳化但未使用標準 ProGuard 檔案的應用程式中使用 DataStore 時的 java.lang.UnsatisfiedLinkError。
  • 修正 GuavaDataStore 作業可能在呼叫執行緒 (例如主執行緒) 上錯誤執行,而非在指定的 IO 調度工具上執行的問題。
  • 解決 OkioStorage 啟動時的 FileNotFoundException 問題,方法是新增第二次嘗試讀取資料,以防發生競爭狀況。

1.2.0-rc01 版本

2025 年 11 月 5 日

發布 androidx.datastore:datastore-*:1.2.0-rc01。1.2.0-rc01 版包含這些修訂項目。

1.2.0-beta01 版本

October 22, 2025

發布 androidx.datastore:datastore-*:1.2.0-beta01。1.2.0-beta01 版包含這些修訂項目。

API 變更

修正錯誤

  • 修正以下問題:在經過 R8 最佳化,但未使用 getDefaultProguardFile('android-proguard-optimize.txt') 的應用程式中,使用 DataStore 時會發生 java.lang.UnsatisfiedLinkError。(I27d0d、b/434696293)
  • 修正以下問題:GuavaDataStore 作業可能會在呼叫執行緒 (例如主執行緒) 上錯誤執行,而非指定的 IO 調度器。(Ic91ea、b/441801112)

1.2.0-alpha02 版本

2025 年 5 月 7 日

發布 androidx.datastore:datastore-*:1.2.0-alpha02。1.2.0-alpha02 版包含這些修訂項目。

API 變更

  • 在 GuavaDataStore 中新增多程序支援。(e0d608a)。
  • 新增輔助方法,可從 DataStore 建立 GuavaDataStore。(9af26f4)
  • 使用 Kotlin 2.0 發布的專案必須搭配 KGP 2.0.0 以上版本。(Idb6b5)
  • 將現有的 datastore 超載替換為委派方法,初始化要在直接啟動期間使用的 DataStore。(If71b9)

1.2.0-alpha01 版本

2025 年 3 月 26 日

發布 androidx.datastore:datastore-*:1.2.0-alpha01。1.2.0-alpha01 版包含這些修訂版本。

新功能

  • 新增 datastore-guava 模組,透過 GuavaDataStore 向 Java 和 Guava ListenableFuture 使用者提供友善的 API。(Iadd5e0)
  • 現在支援在 DirectBoot 模式下使用 DataStore。如要建立在直接啟動模式下使用的資料儲存庫,必須在裝置受保護儲存空間中建立。您可以使用下列新的 DataStore API 達成此目的:DataStoreFactory 中的 createInDeviceProtectedStorage() 和 DataStoreDelegate 中的 deviceProtectedDataStore()。(Ib90e56)

API 變更

  • 新增 PreferencesFileSerializer,可實作 androidx.datastore.core.Serializer 介面,以便與 FileStorage 搭配使用。(I4c71f3)

修正錯誤

  • 在競爭狀況下,新增第二次讀取資料的嘗試,解決啟動時 OkioStorage 中的 FileNotFoundException 問題。(I43b3fb、b/337870543)
  • 為常見的程式碼用法定義 ReplaceFileCorruptionHandler 的預設建構函式。(I795b05、b/358138957)

1.1 版本

1.1.7 版

2025 年 5 月 20 日

發布 androidx.datastore:datastore-*:1.1.7。1.1.7 版包含這些修訂版本。

修正錯誤

  • 修正 datastore-preferences-core 的 Android 構件中缺少 Proguard 規則的問題。(3f3f6e、b/413078297)

1.1.6 版

2025 年 5 月 7 日

發布 androidx.datastore:datastore-*:1.1.6。1.1.6 版包含這些修訂項目。

修正錯誤

  • 解決 Gradle 中繼資料在 1.1.5 版本中損毀的問題。這個問題是由新 AGP KMP 外掛程式 DSL 中的錯誤所造成,導致所有目標平台的中繼資料無法自動納入。這個錯誤會導致用戶端建構作業不再顯示部分 DataStore Android 方法。修正方式是在 build.gradle 中使用舊版 android DSL,而非 androidLibrary。(7801abf)

1.1.5 版

2025 年 4 月 23 日

發布 androidx.datastore:datastore-*:1.1.5。1.1.5 版包含這些修訂項目。

修正錯誤

  • 為緩解 PreferencesDataStore 中的 CorruptionException 問題,預設儲存空間已從 OkioStorage 變更為 FileStorage。這項異動是透過導入 PreferencesFileSerializer 實施。b/346197747

1.1.4 版

2025 年 3 月 26 日

發布 androidx.datastore:datastore-*:1.1.4。1.1.4 版包含這些修訂項目。

修正錯誤

  • 將預設儲存空間從 OkioStorage 替換為 FileStorage,減少 CorruptionException,提高可靠性。(I71181、b/346197747)

1.1.3 版本

2025 年 2 月 26 日

發布 androidx.datastore:datastore-*:1.1.3。1.1.3 版包含這些修訂項目。

修正錯誤

  • 解決應用程式啟動時發生的 FileNotFoundExceptionOkioStorage 問題。如果首次嘗試讀取檔案失敗,系統會再次嘗試,以免在首次讀取期間,因其他程序建立檔案而發生競爭狀況。(I43b3f、b/337870543)

1.1.2 版本

2025 年 1 月 15 日

發布 androidx.datastore:datastore-*:1.1.2。1.1.2 版包含這些修訂項目。

修正錯誤

  • 將暖讀取延遲時間 (DataStore.data.first()) 縮短 8 倍。(22b8a40)
  • ReplaceFileCorruptionHandler 可透過 KMP 通用程式碼建立。(7632e839)

1.1.1 版

2024 年 5 月 1 日

發布 androidx.datastore:datastore-*:1.1.1。1.1.1 版包含這些修訂項目。

修正錯誤

  • 在多個 DataStore 執行個體嘗試從不同程序寫入檔案鎖定時,可避免 Linux 發生「Resource deadlock would occur」(資源死結會發生) 錯誤的誤報。

1.1.0 版本

2024 年 4 月 17 日

發布 androidx.datastore:datastore-*:1.1.0。1.1.0 版包含這些修訂項目。

1.0.0 版發布後的重要異動

如需更多資訊,請參閱 1.1.0 版 Alpha 和 Beta 版的版本資訊。1.1.0 版的主要更新包括:

  • DataStore 現在支援多個程序存取同一個檔案,並支援跨程序觀測能力。
  • 新的 Storage 介面可讓您自訂資料模型的儲存或序列化方式。
  • 您現在可以在 Kotlin Multiplatform 專案中使用 DataStore。

1.1.0-rc01 版本

2024 年 4 月 3 日

發布 androidx.datastore:datastore-*:1.1.0-rc01。1.1.0-rc01 版包含這些修訂版本。

修正錯誤

  • 修正效能下降問題,如果新資料與舊資料相同,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 版包含這些修訂項目。

修正錯誤

  • DataStore 的效能改善功能只會在觀察到更新通知時收集相關資訊。(b/267792241)
    • 請注意,如果您使用協同程式測試程式庫,這項變更可能會在測試中觸發 UncompletedCoroutinesError。請務必在測試中初始化 DataStore 時傳遞 TestScope.backgroundScope,以免發生這個問題。
  • 修正在同一執行個體上巢狀呼叫 updateData 時會發生死結的問題。(b/241760537)
  • 如果 DataStore 在遷移期間無法刪除 SharedPreferences,則不會再擲回 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 版本包含以下修訂項目。

1.1.0-alpha07 版本

2023 年 11 月 29 日

發布 androidx.datastore:datastore-*:1.1.0-alpha07。查看 1.1.0-alpha07 版的修訂項。

API 變更

  • MultiProcessDataStoreFactory 方法不再是實驗性質。已完全移除 @ExperimentalMultiProcessDataStore 註解。(Ieee54、I8e607)

修正錯誤

  • 在 1.1.0-alpha07 中移除 @ExperimentalMultiProcessDataStore 註解。(I8e607)

1.1.0-alpha06 版本

2023 年 11 月 1 日

發布 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 版本

2023 年 9 月 6 日

發布 androidx.datastore:datastore-*:1.1.0-alpha05。查看 1.1.0-alpha05 版的修訂項。

API 變更

  • Datastore FileStorage 現已公開推出,因此用戶端可以提供自訂參數。(Icb985)
  • 將 OkioStorage 建構函式變更為接受 InterProcessCoordinator,以便在 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 版包含此連結所列的修訂項目。

修正錯誤

  • 改善內部實作,避免 DataStore 的資料流程在更新後可能發出舊值的競爭狀況。

1.1.0-alpha03 版本

2023 年 3 月 24 日

發布 androidx.datastore:datastore-*:1.1.0-alpha03。

修正錯誤

  • 移除 Maven 構件的依附元件限制,解決 Kotlin 原生目標中的建構問題 (b/274786186、KT-57531)。

1.1.0-alpha02 版本

2023 年 3 月 22 日

發布 androidx.datastore:datastore-*:1.1.0-alpha02。查看 1.1.0-alpha02 版的修訂項。

注意事項

請注意,這個版本包含重要的內部重構,可合併單一程序和多程序 DataStore 實作項目。請留意可能發生的非預期行為變更 (例如更新通知的時間)。您可以使用 Issue Tracker 元件回報這類變更。

新功能

  • 您現在可以在 KMM 專案中使用 DataStore。請注意,DataStore 的非 Android 目標仍處於實驗階段,但我們決定合併版本,方便開發人員試用。
  • 多程序功能已從 androidx.datastore.multiprocess 移至 androidx.datastore.core。
  • 在 androidx.datastore.core.MultiProcessDataStoreFactory 中新增工廠方法,使用 Storage 物件建立 DataStore 執行個體,以進行檔案作業。
  • 新增介面 InterProcessCoordinator,協助多個 DataStore 執行個體跨程序通訊。請注意,InterProcessCoordinator 的多程序實作僅適用於 Android。

API 變更

  • 在 datastore-core 介面中,將 InterProcessCoordinator 新增至 StorageConnection (I555bb)
  • 變更 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 版包含以下修訂項目。

新功能

  • 支援多程序用途,保證在不同程序 DataStore 執行個體之間的資料一致性。新增 MultiProcessDataStoreFactory#create 以建立這類 DataStore 執行個體。
  • 推出新的儲存介面,可切換 Datastore 的基礎儲存機制。針對 java.io 和 okio 提供實作功能。DataStore 工廠的新方法可接受這個儲存介面物件。

API 變更

  • 變更 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 版包含此連結所列的修訂項目。

1.0.0 的主要功能

Jetpack DataStore 是一項資料儲存解決方案,可讓您使用通訊協定緩衝區儲存鍵/值組合或已輸入的物件。DataStore 使用 Kotlin 協同程式和「流程」,以非同步、一致且交易方式儲存資料。

1.0.0-rc02 版

2021 年 7 月 21 日

發布 androidx.datastore:datastore-*:1.0.0-rc02。查看 1.0.0-rc02 版的修訂項。

修正錯誤

  • 清楚說明沒有索引鍵時不會執行 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 版包含這些修訂項目。

修正錯誤

  • 修正不慎在最終 jar 檔案中加入 .java 檔案的錯誤。(I65d96、b/188985637)

1.0.0-beta02 版

2021 年 6 月 16 日

androidx.datastore:datastore-*:1.0.0-beta02 發布。查看 1.0.0-beta02 版的修訂項。

修正錯誤

1.0.0-beta01 版

2021 年 4 月 21 日

androidx.datastore:datastore-*:1.0.0-beta01 發布。1.0.0-beta01 版包含此連結所列的修訂項目。

API 變更

  • 移除僅限 kotlin 的 JVM 超載方法 (I2adc7)

修正錯誤

  • 已修正 DataStore 委派可能導致結構定義外洩的錯誤 (Ie96fc、b/184415662)

1.0.0-alpha08 版本

2021 年 3 月 10 日

androidx.datastore:datastore-*:1.0.0-alpha08 發布。1.0.0-alpha08 版包含此連結所列的修訂項目。

API 變更

  • 您現在可以新增根據 dataStore 和 preferencesDataStore 資源委派結構定義的遷移作業。(I4ef69、b/173726702)
  • 新增輔助函式,如果已不再使用 DataStore 委派或 context.createDataStore,即可取得檔案名稱 (I60f9a)
  • 序列化程式 writeTo 和 readFrom 現已暫停。如果您實作了序列化程式,則必須更新函式才能暫停函式。(I1e58e)
  • 已為 RxDataStore 使用者新增資源委派。(Ied768、b/173726702)

修正錯誤

1.0.0-alpha07 版本

2021 年 2 月 24 日

androidx.datastore:datastore-*:1.0.0-alpha07 發布。查看 1.0.0-alpha07 版的修訂項。

API 變更

  • Context.createDataStore 的擴充功能函式已移除,並替換為 globalDataStore 資源委派。請在 kotlin 檔案中的頂層呼叫 globalDataStore 一次。例如:

    val Context.myDataStore by dataStore(...)
    

    請將此項目置於 Kotlin 檔案的頂層,這樣就只有一個執行個體。(I57215、b/173726702)

  • RxDataStore 函式現在屬於 RxDataStore 類別,而非 DataStore 中的擴充功能函式。(Idccdb、b/177691248)

  • 如果您想要將 EncryptedSharedPreferences (或直接啟動 SharedPreferences) 遷移至 DataStore,現在可以使用可讓您插入 SharedPreferences 的新 SharedPreferencesMigration 建構函式來完成這項作業。(I8e04e、b/177278510)

修正錯誤

  • 如果同一個檔案有多個有效的 DataStore,則 DataStore 現在會擲回例外狀況。如果您並非以單例模式管理 DataStore,或不確定某個檔案沒有兩個 DataStore 執行個體同時處於有效狀態,那麼在讀取或寫入 DataStore 時,可能會看到例外狀況。只要以單例模式管理 DataStore 即可修正此問題。(Ib43f4、b/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 (RxDataStore、RxDataStoreBuilder 和 RxDataMigration) 的包裝函式。datastore-preferences-rxjava2/3 構件包含建構工具,可用於建構偏好設定 DataStore。

API 變更

  • 隱藏 CorruptionHandler 介面。由於 DataStore 工廠只接受 ReplaceFileCorruptionHandler,因此不對外公開。(I0b3b3、b/176032264)
  • preferencesKey<T>(name: String): Key<T> 方法已移除,並替換成各個支援類型的專屬方法,例如:preferencesKey<Int>("int")現為 intPreferencesKey("int")。(Ibcfac、b/170311106)

修正錯誤

  • 修正 DataStoreFactory 的說明文件,原文件中遺漏 DataStore 檔案是在「datastore/」子目錄中建立的資訊。(Ica222)

1.0.0-alpha05 版本

2020 年 12 月 2 日

androidx.datastore:datastore-*:1.0.0-alpha05 發布。1.0.0-alpha05 版本包含以下修訂項目。

修正錯誤

  • 針對 DataStore 的並行寫入作業新增更詳盡的說明文件和例外狀況。(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 版的修訂項。

修正錯誤

  • 已修正導致偏好設定 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 版的修訂項。

新功能

  • 偏好設定現在支援雙精度值 (如果需要比浮點值更高的精確度,這會非常實用。(I5be8f、b/169471808)

API 變更

  • 為 Datastore 建立純 Kotlin 依附元件,以加快編譯速度。androidx.datastore:datastore-core 包含僅限核心 kotlin 的 API,而 androidx.datastore:datastore 則包含需要 Android 的 API (包括 SharedPreferencesMigration 和 Context.createDataStore 建構函式)。(I42d75、b/168512698)
  • 分割偏好設定資料存放區,加快 Kotlin 編譯作業 (Ia3c19)
  • 如果磁碟上沒有資料,序列化程式現在會要求新的資源以使用預設值。這有助於輕鬆導入自訂序列化程式,讓使用者不必特別設定空白的輸入串流 (空白的輸入串流不會以 JSON 剖析)。

    • 此外,系統現在也會檢查確認提供給 writeTo() 的輸出串流未關閉,若關閉則擲回例外狀況 (I16e29)
  • 將 SharedPreferencesView 的建構函式設為內部函式。此項目原本為公開性質,允許測試。測試時應改為建立 SharedPreferencesMigration 並對此進行測試。(I93891)

修正錯誤

  • DataStoreFactory 和 PreferenceDataStoreFactory 上的 produceFile 參數現是清單中的最後一個參數,可讓您使用 kotlin 結尾 lambda 語法。(Ibe7f1、b/169425442)
  • 遵循 Kotlin 新的明確 API 規定 (I5ae1e)

已知問題

  • 偏好設定 Datastore 發生 java.lang.NoClassDefFoundError 異常終止。(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 版包含此連結所列的修訂項目。

修正錯誤

  • 在 datastore-core 中新增了保護措施以防止發生變化。對於 DataStore 非 proto/非偏好設定類型的使用者而言,變化會打斷 DataStore 的使用 (I6aa84)
  • 已將 toString 方法新增至 Preferences.kt,輕鬆對目前狀態進行偵錯 (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 版包含此連結所列的修訂項目。

新功能

Jetpack DataStore 是全新的進階資料儲存解決方案,旨在取代 SharedPreferences。DataStore 以 Kotlin 協同程式和 Flow 為基礎而設計,可以提供兩種不同的實作方式:

  • Proto DataStore 可讓您儲存已輸入的物件 (由通訊協定緩衝區支援)
  • 用於儲存鍵/值組合的偏好設定 DataStore

資料會以非同步、一致且交易方式儲存,克服 SharedPreferences 的大多數缺點。