DataStore

אחסון נתונים באופן אסינכרוני, עקבי וטרנזקציונלי, תוך התגברות על חלק מהחסרונות של SharedPreferences
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
‫21 באוקטובר 2026 1.3.0 - - -

הצהרה על יחסי תלות

כדי להוסיף תלות ב-DataStore, צריך להוסיף לפרויקט את מאגר Google Maven. מידע נוסף זמין במאמר מאגר ה-Maven של Google.

‫DataStore מספק אפשרויות שונות לסריאליזציה, בחרו אחת מהן. אפשר גם להוסיף יחסי תלות ללא Android לכל אחד מההטמעות.

אתם יכולים להוסיף את יחסי התלות של ההטמעה שאתם צריכים בקובץ build.gradle של האפליקציה או המודול:

‫DataStore להעדפות

מוסיפים את השורות הבאות לחלק של יחסי התלות בקובץ gradle:

Groovy

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

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

Kotlin

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

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

כדי להוסיף תמיכה אופציונלית ב-RxJava, מוסיפים את יחסי התלות הבאים:

Groovy

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

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

Kotlin

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

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

DataStore

מוסיפים את השורות הבאות לחלק של יחסי התלות בקובץ gradle:

Groovy

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

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

Kotlin

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

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

לתמיכה ב-RxJava, צריך להוסיף את יחסי התלות האופציונליים הבאים:

Groovy

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

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

Kotlin

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

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

כדי לבצע סריאליזציה של תוכן, מוסיפים תלות בסריאליזציה של מאגרי אחסון לפרוטוקולים או של 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

‫21 באוקטובר 2026

‫androidx.datastore:datastore-*:1.3.0 מופץ. גרסה 1.3.0 מכילה את השמירות האלה.

שינויים חשובים מאז גרסה 1.2.0:

תכונות חדשות

  • תמיכה באחסון באינטרנט: הוספנו אפשרויות אחסון באינטרנט ב-KMP, שמאפשרות לשמור נתונים באופן גמיש ביעדים באינטרנט:

    • ‫sessionStorage (WebSessionStorage): מאפשר שמירה זמנית של נתונים בכרטיסייה אחת בדפדפן.
    • ‫localStorage (WebLocalStorage): מאפשר אחסון מתמיד עם התראות לגבי אירועים וסנכרון בין כרטיסיות.
    • ‫Origin Private File System (WebOpfsStorage): מספקת תמיכה במערכת הקבצים דרך OPFS, עם קלט/פלט אסינכרוני של קבצים והתראות בכרטיסיות שונות.
  • תמיכה בהצפנה (datastore-tink): נוסף פריט המידע החדש androidx.datastore:datastore-tink, שמספק תמיכה בהצפנה באמצעות ספריית Tink. הוא מציג את AeadSerializer כדי להצפין ולפענח נתונים באמצעות הצפנה מאומתת עם מידע נלווה (AEAD).

  • תמיכה במעקב: הוספנו תמיכה ב-androidx.tracing בפלטפורמת היעד של Android.

  • ‫API של DataStore.Builder: השקנו את DataStore.Builder<T> כחלופה מודרנית וניתנת להתאמה ל-DataStoreFactory. כדי לשפר את המקביליות המובנית, צריך להשתמש ב-CoroutineContext במקום ב-CoroutineScope.

  • פרופילים של Baseline: הוספנו פרופילים של Baseline ל-datastore כדי לשפר את ביצועי ההפעלה.

שינויים ב-API

  • ממשקי ה-API של DataStore.Builder, ReThrowCorruptionHandler ו-InterProcessCoordinator עודכנו לגרסה public.

תיקוני באגים ושיפורים

  • הוספנו מידע על נתיב הקובץ הבסיסי להודעות CorruptionException כדי לשפר את היכולת לנפות באגים במהלך כשלים בניתוח.

  • תוקן אובדן נתונים פוטנציאלי ב-GuavaDataStore על ידי אכיפת סדר קפדני של "נכנס ראשון יוצא ראשון" (FIFO) לעדכונים.

גרסה ‎1.3.0-rc01

‫12 באוקטובר 2026

‫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. הגרסה הזו נדרשת כדי להריץ בדיקות lint של זמן ריצה של מחזור חיים בחבילה עם AGP בגרסה 9.5.0-alpha04 ואילך. (I99bfd, ‏ b/556807521)

גרסה ‎1.3.0-alpha11

‫9 בספטמבר 2026

‫androidx.datastore:datastore-*:1.3.0-alpha11 מופץ. גרסה ‎1.3.0-alpha11 מכילה את השמירות האלה.

תיקוני באגים

  • נתיב הקובץ הבסיסי לא נכלל בהודעות CorruptionException שמוצגות במהלך כשלים בניתוח ההעדפות של DataStore. (Ia9e8f)

גרסה 1.3.0-alpha10

‫29 ביולי 2026

‫androidx.datastore:datastore-*:1.3.0-alpha10 מופץ. גרסה ‎1.3.0-alpha10 מכילה את ה-commits האלה.

שינויים ב-API

  • GeneralSecurityException in AeadSerializer is now wrapped in CorruptionException for better CorruptionHandler integration. (I26e56, b/514941919)

גרסה 1.3.0-alpha09

‫6 במאי 2026

‫androidx.datastore:datastore-*:1.3.0-alpha09 מופץ. גרסה ‎1.3.0-alpha09 מכילה את השמירות האלה.

שינויים ב-API

  • הגדרת ReThrowCorruptionHandler כגלוי לכולם. (I137bb, ‏ b/427722902)
  • התאמה של מחזור החיים של המעקב למעקב המערכת. (Ib391b)

גרסה 1.3.0-alpha08

‫22 באפריל 2026

‫androidx.datastore:datastore-*:1.3.0-alpha08 מופץ. גרסה ‎1.3.0-alpha08 מכילה את השמירות האלה.

תכונות חדשות

  • הוספנו תמיכה במערכת קבצים פרטית של מקור (OPFS) ב-DataStore לפלטפורמות אינטרנט. ההטמעה הזו מציגה את WebOpfsStorage וכוללת תמיכה ארכיטקטונית בקלט/פלט של קבצים אסינכרוניים, התראות בכרטיסיות שונות באמצעות ה-API של BroadcastChannel ונעילה מבוזרת באמצעות Web Locks API המקורי לגישת כתיבה בלעדית. Id7f5807 b/316376114

שינויים ב-API

  • הוספנו את ממשקי ה-API‏ WebLocalStorage ו-WebSessionStorage לניהול מפורש של סוג האחסון בסביבות אינטרנט. I35fa259b b/316376114

גרסה 1.3.0-alpha07

‫11 במרץ 2026

‫androidx.datastore:datastore-*:1.3.0-alpha07 מופץ. גרסה ‎1.3.0-alpha07 מכילה את השמירות האלה.

תכונות חדשות

  • תמיכה בהצפנה: הוספנו את פריט המידע החדש androidx.datastore:datastore-tink, שמאפשר להצפין את מאגר הנתונים באמצעות ספריית Tink. במודול הזה מוצג AeadSerializer, שהוא wrapper class חדש שמטמיע את Serializer<T> ומשתמש בהצפנה מאומתת עם מידע נלווה (AEAD) של Tink כדי להצפין ולפענח נתונים. אפשר להשתמש ב-AeadSerializer בפלטפורמות היעד JVM ו-Android.
  • ‫DataStore Builder API חדש: הוספנו את DataStore.Builder<T> כחלופה שניתנת להתאמה ל-DataStoreFactory. עם ה-API החדש הזה, המשתמשים יכולים עכשיו לספק לוגיקת פגיעה משלהם באמצעות setCorruptionHandler. בנוסף, ב-API של Builder צריך להפעיל את DataStore באמצעות CoroutineContext במקום CoroutineScope. זהו שיפור של בו-זמניות מובנית, כי הוא מאפשר למבצעי הקריאה להגדיר את אופן ההפעלה (כמו Dispatchers ספציפיים) בלי לאלץ את DataStore לנהל באופן לא הולם את מחזור החיים של ההיקף של מבצע הקריאה או להיות כפוף לו.

    הערה: אנחנו ממליצים לכל המשתמשים לעבור מ-DataStoreFactory לממשקי ה-API החדשים של DataStore.Builder. הדרישה ל-CoroutineContext במקום ל-CoroutineScope מאפשרת ל-API לאכוף בו-זמניות מובנית טובה יותר. כך אפשר לוודא שפעולות DataStore לא קשורות למחזורי חיים קצרים של ממשק המשתמש (למשל, viewModelScope), ולמנוע ביטול מוקדם ואובדן נתונים פוטנציאלי.

    אזהרה: ודאו של-CoroutineContext שסופק ל-Builder יש Job, ושהוא ברמת האפליקציה. אם ההקשר מבוטל, הפעולות הפנימיות של DataStore יופסקו לפני הזמן.

שינויים ב-API

  • הוספנו את פריט המידע החדש androidx.datastore:datastore-tink לתמיכה בהצפנה של DataStore. (Ic106d, b/167697691)

    כדי להצפין נתונים באמצעות Tink:

    1. יוצרים מפתח באמצעות ממשקי ה-API של Tink:

      val keysetHandle =
          AndroidKeysetManager.Builder()
              .withSharedPref(applicationContext, "keyset", "keyset_prefs")
              .withKeyTemplate(KeyTemplate.createFrom(PredefinedAeadParameters.AES256_GCM))
              .withMasterKeyUri("android-keystore://master_key")
              .build()
              .keysetHandle
      
    2. יוצרים AeadSerializer שעוטף את ה-serializer הקיים:

      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 הזה במקום ב-serializer כשיוצרים את המופע של מאגר הנתונים:

      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

‫25 בפברואר 2026

‫androidx.datastore:datastore-*:1.3.0-alpha06 מופץ. גרסה ‎1.3.0-alpha06 מכילה את השמירות האלה.

תכונות חדשות

  • DataStore תומך עכשיו ב-androidx.tracing בפלטפורמת היעד של Android. אפשר ליצור DataStore עם מעקב על ידי הוספת מופע של androidx.tracing.Tracer לפונקציה DataStoreFactory.createWithTracing(). thought (I71bc2, b/427722902)

גרסה 1.3.0-alpha05

‫28 בינואר 2026

‫androidx.datastore:datastore-*:1.3.0-alpha05 מופץ. גרסה ‎1.3.0-alpha05 מכילה את ה-commits האלה.

תכונות חדשות

  • פרופילים בסיסיים נוספו למאגר הנתונים. ‫(3916245,b/469127532).
  • הטמעת תמיכה ב-WASM/JS ב-DataStore באמצעות localStorage. כך נוצר יתרון ברור על פני ההטמעה הקיימת של sessionStorage, כי אפשר להפעיל התראות לגבי אירועים וסנכרון בין כרטיסיות. (I67246, b/441511612)

גרסה 1.3.0-alpha04

‫14 בינואר 2026

‫androidx.datastore:datastore-*:1.3.0-alpha04 מופץ. גרסה ‎1.3.0-alpha04 מכילה את השמירות האלה.

שינויים ב-API

  • הוספנו פונקציית העתקה שימושית שאפשר להשתמש בה כדי לעדכן נתונים בהעדפות DataStore. (I70a18, b/467120382)

תיקוני באגים

  • פתרנו בעיה שבה נתונים בינאריים עלולים להיות פגומים במהלך האחסון. כדי לפתור את הבעיה, החלפנו את הטיפול במחרוזות UTF-8 בקידוד Base64 לאינטרנט. (Ie3178, b/473790107)

גרסה 1.3.0-alpha03

‫17 בדצמבר 2025

‫androidx.datastore:datastore-*:1.3.0-alpha03 מופץ. גרסה ‎1.3.0-alpha03 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה שבה שינוי השם של קובץ מאגר הנתונים הזמני נכשל. (I94f89, b/203087070)
  • תוקנה בעיה כדי למנוע עדכונים שנמחקו במהלך קריאה/כתיבה בו-זמנית. יכול להיות שיתרחש מרוץ תהליכים בין אוסף חדש ב-DataStore.data לבין קריאה בו-זמנית ל-updateData, וכתוצאה מכך האוסף יפספס את הערך החדש. (I6a427, b/431787506)

גרסה 1.3.0-alpha02

‫3 בדצמבר 2025

‫androidx.datastore:datastore-*:1.3.0-alpha02 מופץ. גרסה ‎1.3.0-alpha02 מכילה את השמירות האלה.

תיקוני באגים

גרסה 1.3.0-alpha01

‫19 בנובמבר 2025

‫androidx.datastore:datastore-*:1.3.0-alpha01 מופץ. גרסה ‎1.3.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

  • הוספנו תמיכה ב-KMP Web ב-DataStore באמצעות ה-API של sessionStorage. התכונה הזו מאפשרת ל-DataStore לשמור נתונים באופן זמני בכרטיסייה אחת בדפדפן. (I60fad, b/316376114)

גרסה 1.2

גרסה 1.2.1

‫11 במרץ 2026

‫androidx.datastore:datastore-*:1.2.1 מופץ. גרסה 1.2.1 מכילה את השמירות האלה.

ללא שינוי

  • הגרסה הזו כוללת תיקוני באגים קלים בתשתית, ואין בה שינויים ב-DataStore API או בהתנהגות שלו מגרסה 1.2.0.

גרסה 1.2.0

‫19 בנובמבר 2025

‫androidx.datastore:datastore-*:1.2.0 מופץ. גרסה 1.2.0 מכילה את ה-commits האלה.

השינויים העיקריים מאז גרסה 1.1.0

תמיכה ב-Java/Guava:

  • הוספנו את המודול החדש datastore-guava כדי לחשוף ממשקי API שמתאימים למשתמשי Java ו-Guava ListenableFuture דרך GuavaDataStore.
  • הוספנו תמיכה בריבוי תהליכים ב-GuavaDataStore.
  • נוספה פונקציה עם שם זהה (overload) ל-GuavaDataStore.from שמקבלת Executor של Java (במקום CoroutineContext) ומשתמשת ב-androidx.core.util.Function.

תמיכה בהפעלה ישירה:

  • עכשיו יש תמיכה בשימוש ב-DataStore במצב Direct Boot. ממשקי API חדשים כמו createInDeviceProtectedStorage() ב-DataStoreFactory ו-deviceProtectedDataStore() ב-DataStoreDelegate מאפשרים ליצור את DataStore בתוך האחסון המוגן של המכשיר.

שינויים באחסון וב-API:

  • הוספנו את PreferencesFileSerializer שמטמיע את androidx.datastore.core.Serializer לשימוש עם FileStorage.
  • הגדרת ה-constructor שמוגדר כברירת מחדל ל-ReplaceFileCorruptionHandler לשימוש בקוד נפוץ.

תיקוני באגים:

  • תוקנה הבעיה java.lang.UnsatisfiedLinkError כשמשתמשים ב-DataStore באפליקציה שעברה אופטימיזציה באמצעות R8 אבל לא משתמשת בקובץ ProGuard הרגיל.
  • תוקנה בעיה שבה פעולות GuavaDataStore יכלו לפעול באופן שגוי ב-thread הקורא (למשל, ה-thread הראשי) במקום ב-IO dispatcher שצוין.
  • פתרנו בעיה ב-FileNotFoundException ב-OkioStorage בזמן ההפעלה על ידי הוספת ניסיון שני לקריאת נתונים במקרה של מרוץ תהליכים.

גרסה ‎1.2.0-rc01

‫5 בנובמבר 2025

‫androidx.datastore:datastore-*:1.2.0-rc01 מופץ. גרסה ‎1.2.0-rc01 מכילה את השמירות האלה.

גרסה ‎1.2.0-beta01

‫22 באוקטובר 2025

‫androidx.datastore:datastore-*:1.2.0-beta01 מופץ. גרסה ‎1.2.0-beta01 מכילה את השמירות האלה.

שינויים ב-API

  • הגדרת CorruptionHandler כגלוי לכולם. (I9ac35, b/452406457)
  • שימוש בחשבון androidx.core.util.Function ב-GuavaDataStore. (I71eae, ‏ b/448563999)
  • צריך להוסיף עומס יתר ל-GuavaDataStore.from שמקבל Executor במקום CoroutineContext. (I989fa, ‏ b/448563183)

תיקוני באגים

  • תיקון של java.lang.UnsatisfiedLinkError כשמשתמשים ב-DataStore באפליקציה שעברה אופטימיזציה באמצעות R8, אבל לא משתמשת ב-getDefaultProguardFile('android-proguard-optimize.txt'). (I27d0d, b/434696293)
  • תוקנה בעיה שבה פעולות GuavaDataStore יכלו לפעול באופן שגוי ב-thread הקורא (למשל, ה-thread הראשי) במקום ב-IO dispatcher שצוין. (Ic91ea,b/441801112)

גרסה 1.2.0-alpha02

‫7 במאי 2025

‫androidx.datastore:datastore-*:1.2.0-alpha02 מופץ. גרסה ‎1.2.0-alpha02 מכילה את השמירות האלה.

שינויים ב-API

  • הוספנו תמיכה בריבוי תהליכים ב-GuavaDataStore. (e0d608a).
  • נוספה שיטת עזר ליצירת GuavaDataStore מ-DataStore. (9af26f4)
  • פרויקטים שפורסמו עם Kotlin 2.0 דורשים KGP 2.0.0 ואילך כדי לצרוך אותם. (Idb6b5)
  • מחליפים את עומס היתר הקיים של datastore בשיטת נציג כדי לאתחל DataStore לשימוש במהלך הפעלה ישירה. (If71b9)

גרסה ‎1.2.0-alpha01

‫26 במרץ 2025

‫androidx.datastore:datastore-*:1.2.0-alpha01 מופץ. גרסה 1.2.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

  • נוסף מודול datastore-guava כדי לחשוף ממשקי API שמתאימים למשתמשי Java ו-Guava ListenableFuture דרך GuavaDataStore. (Iadd5e0)
  • עכשיו אפשר להשתמש ב-DataStore במצב DirectBoot. כדי ליצור מאגר נתונים שישמש במצב Direct Boot, צריך ליצור אותו בתוך האחסון Device Protected. כדי לעשות את זה, אפשר להשתמש בממשקי ה-API החדשים הבאים של DataStore: ‏createInDeviceProtectedStorage() ב-DataStoreFactory ו-deviceProtectedDataStore() ב-DataStoreDelegate. (Ib90e56)

שינויים ב-API

  • נוסף PreferencesFileSerializer שמטמיע ממשק androidx.datastore.core.Serializer לשימוש עם FileStorage. (I4c71f3)

תיקוני באגים

  • נפתרה בעיה FileNotFoundException ב-OkioStorage בזמן ההפעלה על ידי הוספת ניסיון שני לקריאת נתונים במקרה של מרוץ תהליכים. (I43b3fb, b/337870543)
  • הגדרת את ה-constructor שמוגדר כברירת מחדל ל-ReplaceFileCorruptionHandler לשימוש בקוד נפוץ. (I795b05, ‏ b/358138957)

גרסה 1.1

גרסה 1.1.7

‫20 במאי 2025

‫androidx.datastore:datastore-*:1.1.7 מופץ. גרסה 1.1.7 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה של כללי Proguard חסרים בקובץ ה-Android של datastore-preferences-core. (3f3f6e, b/413078297)

גרסה 1.1.6

‫7 במאי 2025

‫androidx.datastore:datastore-*:1.1.6 מופץ. גרסה 1.1.6 מכילה את ה-commits האלה.

תיקוני באגים

  • נפתרה בעיה שבה המטא-נתונים של Gradle היו פגומים בגרסה 1.1.5. הבעיה הזו נגרמה בגלל באג ב-DSL החדש של הפלאגין AGP KMP, שמנע הכללה אוטומטית של מטא-נתונים לכל פלטפורמות היעד. הבאג גורם לכך שחלק מהשיטות של DataStore ל-Android לא מוצגות יותר בגרסאות ה-build של הלקוחות. כדי לתקן את הבעיה, צריך להשתמש ב-DSL הישן יותר של android ב-build.gradle במקום ב-androidLibrary. (7801abf)

גרסה 1.1.5

‫23 באפריל 2025

‫androidx.datastore:datastore-*:1.1.5 מופץ. גרסה 1.1.5 מכילה את השמירות האלה.

תיקוני באגים

  • כדי לצמצם את הבעיות ב-CorruptionException ב-PreferencesDataStore, האחסון שמוגדר כברירת מחדל השתנה מ-OkioStorage ל-FileStorage. השינוי הזה בוצע באמצעות הוספת PreferencesFileSerializer. b/346197747

גרסה 1.1.4

‫26 במרץ 2025

‫androidx.datastore:datastore-*:1.1.4 מופץ. גרסה 1.1.4 מכילה את השמירות האלה.

תיקוני באגים

  • כדי לשפר את האמינות, כדאי להחליף את האחסון שמוגדר כברירת מחדל מ-OkioStorage ל-FileStorage, וכך לצמצם את CorruptionException. (I71181, ‏ b/346197747)

גרסה 1.1.3

‫26 בפברואר 2025

‫androidx.datastore:datastore-*:1.1.3 מופץ. גרסה 1.1.3 מכילה את השמירות האלה.

תיקוני באגים

  • נפתרה בעיה ב-FileNotFoundException ב-OkioStorage שהתרחשה בזמן הפעלת האפליקציה. אם הניסיון הראשון לקרוא את הקובץ נכשל, המערכת תנסה שוב למקרה שהתרחש מרוץ תהליכים כי הקובץ נוצר בתהליך אחר במהלך הקריאה הראשונה. (I43b3f, ‏ b/337870543)

גרסה 1.1.2

‫15 בינואר 2025

‫androidx.datastore:datastore-*:1.1.2 מופץ. גרסה 1.1.2 מכילה את השמירות האלה.

תיקוני באגים

  • שיפור זמן האחזור של קריאה חמה (DataStore.data.first()) פי 8. (22b8a40)
  • אפשר ליצור את ReplaceFileCorruptionHandler מקוד משותף של KMP. (7632e839)

גרסה 1.1.1

‫1 במאי 2024

‫androidx.datastore:datastore-*:1.1.1 מופץ. גרסה 1.1.1 מכילה את השמירות האלה.

תיקוני באגים

  • הפחתת התראות שווא ב-Linux לגבי השגיאה "Resource deadlock would occur" במקרה קצה שבו כמה מכונות של DataStore מנסות לכתוב מתהליכים שונים, על ידי ביטול נעילת הקובץ.

גרסה 1.1.0

‫17 באפריל 2024

‫androidx.datastore:datastore-*:1.1.0 מופץ. גרסה 1.1.0 מכילה את ה-commits האלה.

שינויים משמעותיים מאז גרסה 1.0.0

למידע נוסף, כדאי לעיין בנתוני הגרסה של גרסאות אלפא וגרסת בטא של 1.1.0. חלק מהעדכונים העיקריים בגרסה 1.1.0 הם:

  • עכשיו DataStore תומך בכמה תהליכים שניגשים לאותו קובץ, עם תמיכה בתצפיתיות (observability) בתהליכים שונים.
  • ממשק האחסון החדש מאפשר לכם להתאים אישית את האופן שבו אתם מאחסנים או מבצעים סריאליזציה של מודלי הנתונים שלכם.
  • עכשיו אפשר להשתמש ב-DataStore בפרויקטים של Kotlin Multiplatform.

גרסה ‎1.1.0-rc01

‫3 באפריל 2024

‫androidx.datastore:datastore-*:1.1.0-rc01 מופץ. גרסה ‎1.1.0-rc01 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה הירידה בביצועים שבה קריאות ל-updateData לא ביצעו אופטימיזציה של כתיבה בדיסק אם הנתונים החדשים זהים לנתונים הישנים (d64cfb5)
  • תוקן מרוץ תהליכים שבו MultiProcess DataStore עלול לפספס ביטולים במהלך האתחול. ((b/326141553),(094c2dd))

גרסה ‎1.1.0-beta02

6 במרץ 2024

‫androidx.datastore:datastore-*:1.1.0-beta02 מופץ. גרסה ‎1.1.0-beta02 מכילה את השמירות האלה.

תיקוני באגים

  • שיפור הביצועים ב-DataStore אוסף התראות על עדכונים רק כשהוא מופעל. (b/267792241)
    • חשוב לזכור שהשינוי הזה עלול להפעיל את UncompletedCoroutinesError בבדיקות אם משתמשים בספריית הבדיקות של Coroutines. כדי למנוע את הבעיה הזו, חשוב להעביר את TestScope.backgroundScope כשמפעילים את DataStore בבדיקות.
  • ​תוקנה הבעיה שבה קריאות updateData מקוננות באותו מופע גרמו למבוי סתום. (b/241760537)
  • הפונקציה DataStore לא מחזירה יותר את השגיאה IOExceptions אם היא לא מצליחה למחוק את SharedPreferences במהלך ההעברה. (b/195553816)
  • תוקנה הבעיה שבה שינוי שם הקובץ נכשל במהלך updateData בסביבות JVM שאינן של Android. (b/203087070)
  • תוקנה הבעיה שבה לא מתבצע טיפול ב-CorruptionException אחרי האתחול של DataStore. (b/289582516)

‫גרסה ‎1.1.0-beta01

‫10 בינואר 2024

גרסה androidx.datastore:datastore-*:1.1.0-beta01 הושקה ללא שינויים מאז גרסה 1.1.0-alpha07. גרסה ‎1.1.0-beta01 מכילה את השינויים האלה.

גרסה 1.1.0-alpha07

‫29 בנובמבר 2023

‫androidx.datastore:datastore-*:1.1.0-alpha07 מופץ. גרסה 1.1.0-alpha07 מכילה את השמירות האלה.

שינויים ב-API

  • השיטות של MultiProcessDataStoreFactory כבר לא ניסיוניות.ההערה @ExperimentalMultiProcessDataStore הוסרה לגמרי. (Ieee54, ‏ I8e607)

תיקוני באגים

  • השקת ההסרה של הערות @ExperimentalMultiProcessDataStore לגרסה 1.1.0-alpha07. (I8e607)

גרסה 1.1.0-alpha06

1 בנובמבר 2023

‫androidx.datastore:datastore-*:1.1.0-alpha06 מופץ. גרסה 1.1.0-alpha06 מכילה את השינויים האלה.

שינויים ב-API

  • ה-method של ה-factory‏ createSingleProcessCoordinator מקבלת עכשיו נתיב קובץ (String, ‏ java.io.File ו-okio.Path) כדי להיות עקבית עם createMultiProcessCoordinator. (I211c8, b/305755935)

גרסה ‎1.1.0-alpha05

‫6 בספטמבר 2023

‫androidx.datastore:datastore-*:1.1.0-alpha05 מופץ. גרסה 1.1.0-alpha05 מכילה את השמירות האלה.

שינויים ב-API

  • ‫Datastore FileStorage זמין עכשיו לכולם, כך שהלקוחות יכולים לספק פרמטרים בהתאמה אישית. (Icb985)
  • שינינו את ה-constructor ‏OkioStorage כך שיקבל InterProcessCoordinator, כדי שאפשר יהיה להשתמש בו ב-Android עם MultiProcessCoordinator. (Iecea3)

תיקוני באגים

  • תיקון: MultiProcessCoordinator לא יכול לעקוב אחרי כמה קבצים באותה ספרייה.
  • תיקון בעיה שבה לא ניתן לזהות קבצים כפולים אם נתיבי הקבצים לא מנורמלים.
  • תיקון ערכים שגויים שהוחזרו מ-RxDataStore#isDisposed.
  • צריך לתקן את הגדרת ProGuard החסרה של פריט המידע שנוצר בתהליך הפיתוח (Artifact) של datstore-preferences-core.

גרסה ‎1.1.0-alpha04

‫5 באפריל 2023

‫androidx.datastore:datastore-*:1.1.0-alpha04 מופץ. גרסה 1.1.0-alpha04 מכילה את השמירות האלה.

תיקוני באגים

  • שיפור ההטמעה הפנימית כדי למנוע מצב של מרוץ תהליכים שבו זרימת הנתונים של DataStore עשויה להפיק ערך ישן יותר אחרי עדכון.

גרסה 1.1.0-alpha03

‫24 במרץ 2023

‫androidx.datastore:datastore-*:1.1.0-alpha03 מופץ.

תיקוני באגים

  • הוסרו אילוצי תלות מקובצי Maven כדי לעקוף בעיה ב-build ביעדים מקוריים של Kotlin (b/274786186, ‏ KT-57531).

גרסה ‎1.1.0-alpha02

‫22 במרץ 2023

‫androidx.datastore:datastore-*:1.1.0-alpha02 מופץ. גרסה 1.1.0-alpha02 מכילה את השמירות האלה.

הערה

חשוב לשים לב שהגרסה הזו כוללת ארגון קוד מחדש פנימי חשוב שמשלב את ההטמעות של DataStore בתהליך יחיד ובתהליכים מרובים. חשוב לשים לב לשינויים לא מכוונים בהתנהגות (למשל, תזמון של התראות על עדכונים). אתם יכולים להשתמש ברכיב של Issue Tracker כדי לדווח על שינויים כאלה.

תכונות חדשות

  • עכשיו אפשר להשתמש ב-DataStore בפרויקטים של KMM. חשוב לשים לב שיעדים שאינם של Android ב-DataStore עדיין ניסיוניים, אבל החלטנו למזג גרסאות כדי להקל על המפתחים לנסות אותם.
  • תכונות של תהליכים מרובים הועברו מ-androidx.datastore.multiprocess אל androidx.datastore.core.
  • מוסיפים שיטת פקטורי חדשה ב-androidx.datastore.core.MultiProcessDataStoreFactory כדי ליצור מופעים של DataStore עם אובייקטים של Storage לפעולות על קבצים.
  • הוספנו ממשק חדש InterProcessCoordinator שעוזר לכמה מופעים של DataStore לתקשר בין תהליכים. חשוב לדעת שהטמעה של InterProcessCoordinator עם כמה תהליכים זמינה רק ב-Android.

שינויים ב-API

  • הוספת InterProcessCoordinator ל-StorageConnection בממשק datastore-core‏ (I555bb)
  • שינוי ממשקי ה-API ב-datastore-core MultiProcessDataStoreFactory לשימוש ב-Storage. (Iac02f)
  • העברת ממשקי API ציבוריים ב-datastore-multiprocess אל datastore-core‏ (I76d7c)
  • חשיפת PreferencesSerializer מ-datastore-preferences-core‏ (I4b788)
  • הוספת הערה מסוג @JvmDefaultWithCompatibility (I8f206)

גרסה 1.1.0-alpha01

9 בנובמבר 2022

‫androidx.datastore:datastore-*:1.1.0-alpha01 מופץ. גרסה 1.1.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

  • תמיכה בתרחישי שימוש עם כמה תהליכים, שבהם מובטחת עקביות בנתונים בין מופעים של DataStore בתהליכים שונים. צריך להוסיף את MultiProcessDataStoreFactory#create כדי ליצור מופעים כאלה של DataStore.
  • ממשק אחסון חדש שמאפשר להחליף את מנגנון האחסון הבסיסי של Datastore. יש הטמעות ל-java.io ול-okio. ל-DataStore factories יש שיטות חדשות שמקבלות את אובייקט האחסון הזה.

שינויים ב-API

  • שינוי ממשקי ה-API ב-datastore-core MultiProcessDataStoreFactory לשימוש ב-Storage. (Iac02f)
  • העברת ממשקי API ציבוריים ב-datastore-multiprocess אל datastore-core‏ (I76d7c)
  • חשיפת PreferencesSerializer מ-datastore-preferences-core‏ (I4b788)

גרסה 1.0.0

גרסה 1.0.0

‫4 באוגוסט 2021

‫androidx.datastore:datastore-*:1.0.0 מופץ. גרסה 1.0.0 מכילה את השמירות האלה.

התכונות העיקריות בגרסה 1.0.0

מאגר הנתונים Jetpack DataStore מאפשר לכם לאחסן צמדי מפתח/ערך או אובייקטים מוקלדים באמצעות מאגרי אחסון לפרוטוקולים. המאגר משתמש בשגרות המשך וב-Flow של Kotlin כדי לאחסן נתונים באופן אסינכרוני, עקבי וטרנזקציונלי.

גרסה ‎1.0.0-rc02

‫21 ביולי 2021

‫androidx.datastore:datastore-*:1.0.0-rc02 מופץ. גרסה 1.0.0-rc02 מכילה את השמירות האלה.

תיקוני באגים

  • הבהרה ש-SharedPreferencesMigration לא פועל אם אין מפתחות. (Icfa32, ‏ b/192824325)
  • תיקון באג שבו SharedPreferencesMigration שנוצר באמצעות MIGRATE_ALL_KEYS זורק חריגה אם המפתח המבוקש עדיין לא קיים. (Ie318a, b/192824325)

גרסה ‎1.0.0-rc01

‫30 ביוני 2021

‫androidx.datastore:datastore-*:1.0.0-rc01 מופץ. גרסה 1.0.0-rc01 מכילה את השמירות האלה.

תיקוני באגים

  • תוקן באג שבו קובץ ‎ .java נוסף בטעות לקובץ ה-JAR הסופי (I65d96, ‏ b/188985637)

גרסה ‎1.0.0-beta02

‫16 ביוני 2021

‫androidx.datastore:datastore-*:1.0.0-beta02 מופץ. גרסה 1.0.0-beta02 מכילה את השינויים האלה.

תיקוני באגים

גרסה 1.0.0-beta01

‫21 באפריל 2021

‫androidx.datastore:datastore-*:1.0.0-beta01 מופץ. גרסה 1.0.0-beta01 מכילה את השינויים האלה.

שינויים ב-API

  • הסרת עומסי יתר של JVM לשיטות של Kotlin בלבד (I2adc7)

תיקוני באגים

  • תוקן באג שבו נציגי datastore עלולים לגרום לדליפת הקשרים (Ie96fc, ‏ b/184415662)

גרסה 1.0.0-alpha08

10 במרץ 2021

‫androidx.datastore:datastore-*:1.0.0-alpha08 מופץ. גרסה 1.0.0-alpha08 מכילה את השינויים האלה.

שינויים ב-API

  • עכשיו אפשר להוסיף העברה שתלויה בהקשר לנציג המאפיינים dataStore ו-preferencesDataStore. (I4ef69, b/173726702)
  • הוספת פונקציות עזר כדי לקבל את שם הקובץ אם אתם כבר לא משתמשים ב-datastore delegate או ב-context.createDataStore (I60f9a)
  • הפונקציות writeTo ו-readFrom של הסריאליזציה מושעות עכשיו. אם הטמעתם Serializer, תצטרכו לעדכן את הפונקציות שלכם כך שיהיו פונקציות השהיה. (I1e58e)
  • נוספו נציגי נכסים למשתמשי RxDataStore. (Ied768, b/173726702)

תיקוני באגים

  • אכיפת הגבלות על שימוש ציבורי בממשקי API ניסיוניים (I6aa29, ‏ b/174531520)

גרסה 1.0.0-alpha07

‫24 בפברואר 2021

‫androidx.datastore:datastore-*:1.0.0-alpha07 מופץ. גרסה 1.0.0-alpha07 מכילה את השמירות האלה.

שינויים ב-API

  • פונקציית התוסף Context.createDataStore הוסרה והוחלפה בנציג המאפיין globalDataStore. קוראים ל-globalDataStore פעם אחת ברמה העליונה של קובץ Kotlin. לדוגמה:

    val Context.myDataStore by dataStore(...)
    

    צריך להוסיף את זה ברמה העליונה של קובץ Kotlin כדי שיהיה רק מופע אחד שלו. (I57215, b/173726702)

  • הפונקציות של RxDataStore נמצאות עכשיו במחלקה RxDataStore במקום בפונקציות של תוספים ב-DataStore. (Idccdb, ‏ b/177691248)

  • אם אתם רוצים להעביר את EncryptedSharedPreferences (או את SharedPreferences של הפעלה ישירה) ל-DataStore, אתם יכולים לעשות את זה עכשיו באמצעות ה-constructor החדש של SharedPreferencesMigration שמאפשר להוסיף את SharedPreferences. (I8e04e, b/177278510)

תיקוני באגים

  • מעכשיו, DataStore יזרוק חריגה אם יש כמה DataStore פעילים לאותו קובץ. אם לא ניהלתם את DataStore כ-Singleton או לא וידאתם שאין שני מופעים של DataStore שפעילים בו-זמנית בקובץ, יכול להיות שעכשיו תראו חריגות בקריאה או בכתיבה ב-DataStore. כדי לפתור את הבעיות האלה, אפשר לנהל את DataStore כ-Singleton. (Ib43f4, ‏ b/177691248)
  • תיקון התנהגות הביטול כשמבטלים את היקף המתקשר. (I2c7b3)

גרסה 1.0.0-alpha06

‫13 בינואר 2021

‫androidx.datastore:datastore-*:1.0.0-alpha06 מופץ. גרסה 1.0.0-alpha06 מכילה את השינויים האלה.

תכונות חדשות

  • נוספו wrapper של RxJava ל-DataStore. רכיבי ה-Artifacts של datastore-rxjava2/3 מכילים את ה-wrappers של ממשקי ה-API העיקריים של DataStore‏ (RxDataStore,‏ RxDataStoreBuilder ו-RxDataMigration). רכיבי ה-Artifacts של datastore-preferences-rxjava2/3 מכילים כלי ליצירת Preferences DataStore.

שינויים ב-API

  • הסתרת הממשק CorruptionHandler. לא הייתה סיבה שהיא תהיה גלויה לכולם כי מפעל DataStore מקבל רק ReplaceFileCorruptionHandler. (I0b3b3, ‏ b/176032264)
  • השיטה preferencesKey<T>(name: String): Key<T> הוסרה והוחלפה בשיטות ספציפיות לכל סוג נתמך, לדוגמה preferencesKey<Int>("int") היא עכשיו intPreferencesKey("int") (Ibcfac, b/170311106)

תיקוני באגים

  • תיקון התיעוד של DataStoreFactory, שבו הושמטה העובדה שקובץ מאגר הנתונים נוצר בספריית המשנה datastore/‎. (Ica222)

גרסה ‎1.0.0-alpha05

‫2 בדצמבר 2020

‫androidx.datastore:datastore-*:1.0.0-alpha05 מופץ. גרסה ‎1.0.0-alpha05 מכילה את השמירות האלה.

תיקוני באגים

  • הוספת תיעוד טוב יותר וחריגים לגבי כתיבה בו-זמנית ממאגרי נתונים. (Ia98a2, ‏ b/173522155, ‏ b/173726702)
  • עכשיו אנחנו מאפשרים (אבל לא דורשים) לסגור את ה-OutputStream שמועבר אל Serializer.writeTo(). (I5c9bf, b/173037611)

גרסה ‎1.0.0-alpha04

17 בנובמבר, 2020

‫androidx.datastore:datastore-*:1.0.0-alpha04 מופץ. גרסה 1.0.0-alpha04 מכילה את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה באריזה שגרמה לקריסה הבאה ב-Preference Datastore 1.0.0-alpha03: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences

גרסה 1.0.0-alpha03

11 בנובמבר 2020

‫androidx.datastore:datastore-*:1.0.0-alpha03 מופץ. גרסה ‎1.0.0-alpha03 מכילה את השינויים האלה.

תכונות חדשות

  • העדפות תומכות עכשיו בערכים כפולים (שימושי אם אתם צריכים דיוק רב יותר מאשר ערכים מסוג float)‏ (I5be8f, ‏ b/169471808)

שינויים ב-API

  • יצרנו תלות ב-Kotlin טהור למאגר נתונים כדי לאפשר הידור מהיר יותר. ‫androidx.datastore:datastore-core מכיל את ממשקי ה-API העיקריים של Kotlin בלבד, ו-androidx.datastore:datastore מכיל את ממשקי ה-API שתלויים ב-Android (כולל ה-constructor של SharedPreferencesMigration ו-Context.createDataStore).(I42d75, b/168512698)
  • פיצול יעדים למאגר נתונים של העדפות כדי לקצר את זמן ההידור של Kotlin‏ (Ia3c19)
  • עכשיו הסריאליזציות דורשות מאפיין חדש לערך ברירת המחדל, שישמש אם אין נתונים בדיסק. כך קל יותר להטמיע סריאליזציה בהתאמה אישית, והמשתמשים לא צריכים להגדיר מקרה מיוחד לזרמי קלט ריקים (זרמי קלט ריקים לא מנותחים באמצעות JSON).

    • בנוסף, יש עכשיו בדיקה כדי לוודא שזרם הפלט שסופק ל-writeTo()‎ לא סגור, ואם הוא סגור, הוא זורק חריגים (I16e29)
  • הפיכת ה-constructor של SharedPreferencesView לפנימי. במקור, הוא היה ציבורי כדי לאפשר בדיקה. במקום זאת, הבדיקות צריכות ליצור SharedPreferencesMigration ולבדוק אותו. (I93891)

תיקוני באגים

  • הפרמטר produceFile ב-DataStoreFactory וב-PreferenceDataStoreFactory הוא עכשיו הפרמטר האחרון ברשימה, כך שאפשר להשתמש בתחביר של lambda בסוף ב-Kotlin. (Ibe7f1, b/169425442)
  • בהתאם לדרישות החדשות של ה-API המפורש ל-Kotlin‏ (I5ae1e)

בעיות מוכרות

  • ה-Preference Datastore קורס עם java.lang.NoClassDefFoundError. (b/173036843)

גרסה 1.0.0-alpha02

‫14 באוקטובר 2020

‫androidx.datastore:datastore-core:1.0.0-alpha02 ו-androidx.datastore:datastore-preferences:1.0.0-alpha02 מופצים. גרסה ‎1.0.0-alpha02 מכילה את השמירות האלה.

תיקוני באגים

  • הוספנו אמצעי הגנה מפני מוטציה ב-datastore-core. המוטציה משבשת את השימוש במאגר הנתונים לאנשים שמשתמשים במאגר הנתונים עם סוגים שאינם proto או העדפות (I6aa84)
  • הוספנו שיטת toString ל-Preferences.kt כדי שיהיה קל לנפות באגים במצב הנוכחי (I96006)
  • הוספנו חריג כדי להגן מפני שימוש לרעה ב-DataStore.Preferences (I1134d)
  • תוקן באג שגרם לאפליקציה לקרוס בזמן ההפעלה (I69237, ‏ b/168580258)

גרסה 1.0.0-alpha01

‫2 בספטמבר 2020

‫androidx.datastore:datastore-core:1.0.0-alpha01 ו-androidx.datastore:datastore-preferences:1.0.0-alpha01 מופצים. גרסה 1.0.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

מאגר הנתונים Jetpack DataStore הוא פתרון חדש ומשופר לאחסון נתונים, שמיועד להחליף את SharedPreferences. המאגר מבוסס על שגרות המשך ו-Flow של Kotlin, ומספק שני סוגים שונים של הטמעה:

הנתונים נשמרים באופן אסינכרוני, עקבי וטרנזקציונלי, מה שפותר את רוב החסרונות של SharedPreferences.