DataStore

تخزين البيانات بشكل غير متزامن ومتسق ومعاملاتي، والتغلب على بعض عيوب SharedPreferences
آخر تحديث الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأولي
‫12 أكتوبر 2026 ‫1.2.1 1.3.0-rc01 - -

تحديد الاعتماديات

لإضافة اعتمادية على DataStore، يجب تضمين مستودع Google Maven في مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.

يوفّر 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")
    }
    

لتسلسل المحتوى، أضِف الاعتماديات لتسلسل Protocol Buffers أو 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

‫12 أكتوبر 2026

تم طرح androidx.datastore:datastore-*:1.3.0-rc01. يتضمّن الإصدار 1.3.0-rc01 هذه التعديلات.

التغييرات في واجهة برمجة التطبيقات

  • استخدِم WindowCompat#enableEdgeToEdge(Window) بدلاً من EdgeToEdge#enable() (Ibff3e)

إصلاح الأخطاء

  • تم تعديل الاعتمادية androidx.lifecycle:lifecycle-runtime إلى الإصدار 2.10.0. هذا الإصدار مطلوب لتشغيل عمليات فحص lint المجمّعة لوقت تشغيل مراحل النشاط مع الإصدار 9.5.0-alpha04 من AGP أو الإصدارات الأحدث. (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 هذه التعديلات.

التغييرات في واجهة برمجة التطبيقات

  • 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 هذه التعديلات.

التغييرات في واجهة برمجة التطبيقات

  • اجعل 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 ويتضمّن دعمًا معماريًا لوحدات الإدخال والإخراج للملفات غير المتزامن، والإشعارات على مستوى علامات التبويب باستخدام واجهة برمجة التطبيقات BroadcastChannel، والقفل الموزَّع من خلال Web Locks API الأصلي للوصول الحصري إلى الكتابة. Id7f5807 b/316376114

التغييرات في واجهة برمجة التطبيقات

  • تم تقديم واجهتَي برمجة التطبيقات 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، وهو فئة غلاف جديدة تنفّذ Serializer<T> وتستخدم ميزة "التشفير المصادق عليه مع بيانات مرتبطة" (AEAD) من Tink لتشفير البيانات وفك تشفيرها. يتوفّر AeadSerializer للاستخدام في المنصات المستهدفة التي تعمل بنظامَي التشغيل JVM وAndroid.
  • واجهة برمجة التطبيقات الجديدة DataStore Builder API: تم طرح DataStore.Builder<T> كبديل قابل للتوسّع عن DataStoreFactory. باستخدام واجهة برمجة التطبيقات الجديدة هذه، أصبح لدى المستخدمين الآن طريقة لتوفير منطق التلف الخاص بهم من خلال setCorruptionHandler. بالإضافة إلى ذلك، تتطلّب واجهة برمجة التطبيقات Builder إعداد DataStore باستخدام CoroutineContext بدلاً من CoroutineScope، وهو تحسين للتزامن المنظَّم، لأنّه يسمح للمتصلين بتحديد سلوك التنفيذ (مثل Dispatchers محدّدة) بدون فرض إدارة DataStore بشكل غير مناسب أو الالتزام بمراحل نشاط نطاق المتصل.

    ملاحظة: ننصح جميع المستخدمين بالانتقال من DataStoreFactory إلى واجهات برمجة التطبيقات الجديدة في DataStore.Builder. من خلال طلب CoroutineContext بدلاً من CoroutineScope، تفرض واجهة برمجة التطبيقات تزامنًا أفضل من حيث البنية. يضمن ذلك عدم ربط عمليات DataStore بمراحل نشاط واجهة المستخدم القصيرة الأجل (مثل viewModelScope)، ما يمنع الإلغاء المبكر وفقدان البيانات المحتمل.

    تحذير: تأكَّد من أنّ CoroutineContext المقدَّم إلى "أداة الإنشاء" يتضمّن Job وأنّه محدد النطاق بالتطبيق. في حال إلغاء السياق، سيتم إنهاء عمليات DataStore الداخلية قبل الأوان.

تغييرات واجهة برمجة التطبيقات

  • تم تقديم عنصر androidx.datastore:datastore-tink الجديد لإتاحة تشفير DataStore. (Ic106d، b/167697691)

    لتشفير البيانات باستخدام Tink، اتّبِع الخطوات التالية:

    1. إنشاء مفتاح باستخدام واجهات برمجة التطبيقات في 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 يلتف حول أداة تسلسل حالية:

      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

‫25 فبراير 2026

تم طرح androidx.datastore:datastore-*:1.3.0-alpha06. يتضمّن الإصدار 1.3.0-alpha06 هذه التعديلات.

الميزات الجديدة

  • تتيح DataStore الآن استخدام androidx.tracing على نظام Android الأساسي المستهدَف. يمكنك إنشاء DataStore مع التتبُّع من خلال تقديم مثيل androidx.tracing.Tracer إلى الدالة DataStoreFactory.createWithTracing(). (I71bc2، b/427722902)

الإصدار 1.3.0-alpha05

‫28 يناير 2026

تم طرح androidx.datastore:datastore-*:1.3.0-alpha05. يتضمّن الإصدار 1.3.0-alpha05 هذه التعديلات.

الميزات الجديدة

  • تمت إضافة الملفات الشخصية للمرجع إلى مخزن البيانات. (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 هذه التعديلات

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة دالة نسخ مساعِدة يمكن استخدامها لتعديل بيانات "الإعدادات المفضّلة" 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 هذه التعديلات.

إصلاح الأخطاء

  • أضِف هدف js()‎ إلى androidx.datastore. (I1f62b، b/441511612)
  • فرض ترتيب الوارد أولاً يُباع أولاً (FIFO) في تحديثات GuavaDataStore (I6fd00،b/451491257)

الإصدار ‎1.3.0-alpha01

‫19 نوفمبر 2025

تم طرح androidx.datastore:datastore-*:1.3.0-alpha01. يتضمّن الإصدار 1.3.0-alpha01 هذه التعديلات.

الميزات الجديدة

  • تمّت إضافة ميزة KMP Web في DataStore باستخدام واجهة برمجة التطبيقات 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 هذه التعديلات.

التغييرات الرئيسية منذ إصدار 1.1.0

دعم Java/Guava:

  • تمت إضافة وحدة datastore-guava الجديدة لعرض واجهات برمجة التطبيقات المتوافقة مع مستخدمي Java وGuava ListenableFuture من خلال GuavaDataStore.
  • تمت إضافة إمكانية استخدام عدة عمليات في GuavaDataStore.
  • تمت إضافة تحميل زائد لـ GuavaDataStore.from يقبل Java Executor (بدلاً من CoroutineContext) ويستخدم androidx.core.util.Function.

توافق ميزة "التشغيل المباشر":

  • أصبح بإمكانك استخدام DataStore أثناء وضع "التشغيل المباشر". تتيح واجهات برمجة التطبيقات الجديدة، مثل createInDeviceProtectedStorage() في DataStoreFactory وdeviceProtectedDataStore() في DataStoreDelegate، إنشاء DataStore في مساحة التخزين المحمية على الجهاز.

التغييرات في مساحة التخزين وواجهة برمجة التطبيقات:

  • تمت إضافة PreferencesFileSerializer التي تنفّذ androidx.datastore.core.Serializer لاستخدامها مع FileStorage.
  • تم تحديد الدالة الإنشائية التلقائية لـ ReplaceFileCorruptionHandler من أجل الاستخدام الشائع للرموز البرمجية.

إصلاح الأخطاء:

  • تم إصلاح الخطأ java.lang.UnsatisfiedLinkError عند استخدام DataStore في تطبيق محسَّن باستخدام R8 ولكن لا يستخدم ملف ProGuard العادي.
  • تم إصلاح مشكلة تؤدي إلى تشغيل عمليات GuavaDataStore بشكل غير صحيح على سلسلة التعليمات التي يتم استدعاؤها (مثل سلسلة التعليمات الرئيسية) بدلاً من مُرسِل IO المحدّد.
  • تم حلّ مشكلة في 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 هذه التعديلات.

التغييرات في واجهة برمجة التطبيقات

  • ضبط "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 بشكل غير صحيح في سلسلة التعليمات التي يتم استدعاؤها (مثل سلسلة التعليمات الرئيسية) بدلاً من مُرسِل الإدخال/الإخراج المحدّد. (Ic91ea،b/441801112)

الإصدار ‎1.2.0-alpha02

‫7 مايو 2025

تم طرح androidx.datastore:datastore-*:1.2.0-alpha02. يتضمّن الإصدار 1.2.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة إمكانية استخدام عدة عمليات في GuavaDataStore. (e0d608a).
  • تمت إضافة طريقة مساعِدة لإنشاء GuavaDataStore من DataStore. (9af26f4)
  • تتطلّب المشاريع التي تم إصدارها باستخدام Kotlin 2.0 استخدام الإصدار 2.0.0 من KGP أو إصدار أحدث. (Idb6b5)
  • استبدِل التحميل الزائد الحالي لـ datastore بطريقة تفويض لتهيئة DataStore لاستخدامه أثناء التشغيل المباشر. (If71b9)

الإصدار ‎1.2.0-alpha01

‫26 مارس 2025

تم طرح androidx.datastore:datastore-*:1.2.0-alpha01. يتضمّن الإصدار 1.2.0-alpha01 هذه التعديلات.

الميزات الجديدة

  • تمت إضافة وحدة datastore-guava لعرض واجهات برمجة التطبيقات المتوافقة مع مستخدمي Java وGuava ListenableFuture من خلال GuavaDataStore. (Iadd5e0)
  • يمكن الآن استخدام "DataStore" أثناء تفعيل وضع "DirectBoot". لإنشاء مخزن بيانات سيتم استخدامه أثناء وضع "التشغيل المباشر"، يجب إنشاؤه ضمن مساحة التخزين المحمية على الجهاز. ويمكن تحقيق ذلك من خلال واجهتَي برمجة التطبيقات الجديدتَين في DataStore: createInDeviceProtectedStorage() في DataStoreFactory وdeviceProtectedDataStore() في DataStoreDelegate. (Ib90e56)

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة PreferencesFileSerializer التي تنفّذ واجهة androidx.datastore.core.Serializer لاستخدامها مع FileStorage. (I4c71f3)

إصلاح الأخطاء

  • تم حلّ مشكلة FileNotFoundException في OkioStorage عند بدء التشغيل من خلال إضافة محاولة ثانية لقراءة البيانات في حال حدوث تعارض. (I43b3fb، b/337870543)
  • تم تحديد الدالة الإنشائية التلقائية لـ 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 هذه التعديلات.

إصلاح الأخطاء

  • تم حلّ مشكلة تعطُّل البيانات الوصفية في Gradle في الإصدار 1.1.5. حدثت هذه المشكلة بسبب خطأ في DSL الخاص بمكوّن AGP KMP الإضافي الجديد الذي يمنع تضمين البيانات الوصفية لجميع المنصات المستهدَفة تلقائيًا. يؤدي هذا الخطأ إلى عدم ظهور بعض طرق DataStore Android في إصدارات العملاء. تتضمّن الإصلاح استخدام لغة android DSL القديمة في 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 بشأن الخطأ "سيحدث توقف تام للموارد" في حالة استخدام عدة مثيلات من DataStore تحاول الكتابة من عمليات مختلفة عن طريق التراجع عن قفل الملف.

الإصدار 1.1.0

‫17 أبريل 2024

تم طرح androidx.datastore:datastore-*:1.1.0. يتضمّن الإصدار 1.1.0 هذه التعديلات.

التغييرات الرئيسية منذ طرح الإصدار 1.0.0

يُرجى مراجعة ملاحظات الإصدار من الإصدارَين الأولي والتجريبي 1.1.0 للحصول على مزيد من المعلومات. في ما يلي بعض التحديثات الرئيسية في الإصدار 1.1.0:

  • تتيح مكتبة DataStore الآن إمكانية وصول عمليات متعددة إلى الملف نفسه، مع إتاحة إمكانية المراقبة على مستوى العمليات.
  • تتيح لك واجهة Storage الجديدة تخصيص طريقة تخزين نماذج البيانات أو تسلسلها.
  • يمكنك الآن استخدام 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 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • لم تعُد طرق MultiProcessDataStoreFactory تجريبية، وتمت إزالة التعليق التوضيحي @ExperimentalMultiProcessDataStore بالكامل. (Ieee54، I8e607)

إصلاح الأخطاء

  • طرحنا الإصدار 1.1.0-alpha07 الذي لا يتضمّن تعليقات @ExperimentalMultiProcessDataStore التوضيحية. (I8e607)

الإصدار ‎1.1.0-alpha06

1 تشرين الثاني (نوفمبر) 2023

تم طرح androidx.datastore:datastore-*:1.1.0-alpha06. يتضمّن الإصدار 1.1.0-alpha06 هذه التعديلات.

التغييرات في واجهة برمجة التطبيقات

  • تتلقّى الطريقة 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 هذه التعديلات.

التغييرات في واجهة برمجة التطبيقات

  • يتوفّر Datastore FileStorage الآن للجميع، لذا يمكن للعملاء تقديم مَعلمات مخصّصة. (Icb985)
  • تم تغيير مُنشئ OkioStorage لقبول InterProcessCoordinator حتى يمكن استخدامه على Android مع MultiProcessCoordinator. (Iecea3)

إصلاح الأخطاء

  • تم إصلاح المشكلة التي تسبّبت في MultiProcessCoordinator عدم إمكانية مراقبة ملفات متعددة في الدليل نفسه.
  • تم إصلاح مشكلة تعذُّر رصد الملفات المكرّرة إذا لم تتم تسوية مسارات الملفات.
  • إصلاح القيم الخاطئة التي تم عرضها من RxDataStore#isDisposed
  • يجب إصلاح إعدادات proguard غير المتوفّرة لملف 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 لحلّ مشكلة في عملية الإنشاء في Kotlin Native Targets (b/274786186، KT-57531).

الإصدار ‎1.1.0-alpha02

‫22 مارس 2023

تم طرح androidx.datastore:datastore-*:1.1.0-alpha02. يتضمّن الإصدار 1.1.0-alpha02 هذه التعديلات.

ملاحظة

يُرجى العِلم أنّ هذا الإصدار يتضمّن إعادة تصميم داخلية مهمة تدمج عمليات التنفيذ لكلّ من عمليات تنفيذ DataStore ذات العملية الواحدة وعمليات تنفيذ DataStore ذات العمليات المتعدّدة. يُرجى مراقبة أي تغييرات محتملة في السلوك غير المقصود (مثل توقيت إشعارات التحديث). يمكنك استخدام مكوّن Issue Tracker للإبلاغ عن هذه التغييرات.

الميزات الجديدة

  • يمكنك الآن استخدام DataStore في مشاريع KMM. يُرجى العِلم أنّ أهداف DataStore غير المتوافقة مع Android لا تزال تجريبية، ولكننا قرّرنا دمج الإصدارات لتسهيل تجربتها على المطوّرين.
  • تم نقل ميزات العمليات المتعددة من androidx.datastore.multiprocess إلى androidx.datastore.core.
  • أضِف طريقة مصنع جديدة في androidx.datastore.core.MultiProcessDataStoreFactory لإنشاء مثيلات DataStore باستخدام عناصر Storage لعمليات الملفات.
  • إضافة واجهة جديدة InterProcessCoordinator تساعد عدة مثيلات من DataStore في التواصل مع بعضها البعض على مستوى العمليات يُرجى العِلم أنّ تنفيذ InterProcessCoordinator باستخدام عمليات متعدّدة متاح على Android فقط.

التغييرات في واجهة برمجة التطبيقات

  • إضافة InterProcessCoordinator إلى StorageConnection في واجهة datastore-core (I555bb)
  • تغيير واجهات برمجة التطبيقات في datastore-core MultiProcessDataStoreFactory لاستخدام Storage (Iac02f)
  • نقل واجهات برمجة التطبيقات العامة في 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 طرقًا جديدة تقبل عنصر Storage هذا.

التغييرات في واجهة برمجة التطبيقات

  • تغيير واجهات برمجة التطبيقات في datastore-core MultiProcessDataStoreFactory لاستخدام Storage (Iac02f)
  • نقل واجهات برمجة التطبيقات العامة في 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 هي حلّ لتخزين البيانات يتيح لك تخزين أزواج المفتاح/القيمة أو العناصر المكتوبة باستخدام Protocol Buffers. يستخدم DataStore دوال Kotlin coroutines وFlow لتخزين البيانات بشكل غير متزامن ومتسق ومعاملاتي.

الإصدار ‎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 هذه التعديلات.

إصلاح الأخطاء

  • حلّ المشاكل في ClassVerificationFailure (b/187450483)

الإصدار 1.0.0-beta01

‫21 أبريل 2021

تم طرح androidx.datastore:datastore-*:1.0.0-beta01. يتضمّن الإصدار 1.0.0-beta01 هذه التعديلات.

التغييرات في واجهة برمجة التطبيقات

  • إزالة أحمال JVM الزائدة لطُرق Kotlin فقط (I2adc7)

إصلاح الأخطاء

  • تم إصلاح خطأ حيث يمكن أن يؤدي تفويض مخزن البيانات إلى تسرُّب السياقات (Ie96fc، b/184415662)

الإصدار ‎1.0.0-alpha08

10 آذار (مارس) 2021

تم طرح androidx.datastore:datastore-*:1.0.0-alpha08. يتضمّن الإصدار 1.0.0-alpha08 هذه التعديلات.

التغييرات في واجهة برمجة التطبيقات

  • يمكنك الآن إضافة عملية نقل بيانات تعتمد على السياق إلى المفوَّض عن السمتَين dataStore وpreferencesDataStore. (I4ef69، b/173726702)
  • إضافة دوال مساعدة للحصول على اسم الملف في حال عدم استخدام وكيل datastore أو context.createDataStore (I60f9a)
  • أصبحت دالتا writeTo وreadFrom في Serializer معلّقتَين الآن. إذا كنت قد نفّذت Serializer، عليك تعديل وظائفك لتصبح وظائف معلّقة. (I1e58e)
  • تمت إضافة مفوّضين للسمات لمستخدمي RxDataStore. (Ied768، b/173726702)

إصلاح الأخطاء

  • فرض قيود على الاستخدام العام لواجهات برمجة التطبيقات التجريبية (I6aa29، b/174531520)

الإصدار ‎1.0.0-alpha07

‫24 فبراير 2021

تم طرح androidx.datastore:datastore-*:1.0.0-alpha07. يتضمّن الإصدار 1.0.0-alpha07 هذه التعديلات.

التغييرات في واجهة برمجة التطبيقات

  • تمت إزالة دالة الإضافة Context.createDataStore واستبدالها بمفوّض السمة globalDataStore. استدعِ globalDataStore مرة واحدة على مستوى أعلى في ملف Kotlin. على سبيل المثال:

    val Context.myDataStore by dataStore(...)
    

    ضَع هذا في المستوى الأعلى من ملف kotlin ليكون هناك مثيل واحد فقط منه. (I57215، b/173726702)

  • أصبحت دوال RxDataStore الآن ضمن فئة RxDataStore بدلاً من دوال الإضافة في DataStore. (Idccdb، b/177691248)

  • إذا أردت نقل EncryptedSharedPreferences (أو SharedPreferences للتشغيل المباشر) إلى DataStore، يمكنك الآن إجراء ذلك باستخدام دالة 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 هذه التعديلات.

الميزات الجديدة

  • تمت إضافة برامج تضمين RxJava إلى DataStore. تحتوي عناصر datastore-rxjava2/3 على برامج تضمين لواجهات برمجة تطبيقات DataStore الأساسية (RxDataStore وRxDataStoreBuilder وRxDataMigration)، بينما تحتوي عناصر datastore-preferences-rxjava2/3 على أداة إنشاء لإنشاء Preferences DataStore.

التغييرات في واجهة برمجة التطبيقات

  • إخفاء واجهة 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

‫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 هذه التعديلات.

الميزات الجديدة

  • تتيح "الإعدادات المفضّلة" الآن استخدام القيم المزدوجة (وهو أمر مفيد إذا كنت بحاجة إلى دقة أكبر من القيم العشرية) (I5be8f، b/169471808)

التغييرات في واجهة برمجة التطبيقات

  • تم إنشاء تبعية Kotlin خالصة لمخزن البيانات للسماح بتجميع أسرع. يحتوي androidx.datastore:datastore-core على واجهات برمجة التطبيقات الأساسية في Kotlin فقط، ويحتوي androidx.datastore:datastore على واجهات برمجة التطبيقات التي تعتمد على Android (بما في ذلك الدالة الإنشائية SharedPreferencesMigration وContext.createDataStore).(I42d75، b/168512698)
  • تقسيم الأهداف لمخزن بيانات الإعدادات المفضّلة من أجل تجميع Kotlin بشكل أسرع (Ia3c19)
  • تتطلّب أدوات التسلسل الآن سمة جديدة للقيمة التلقائية التي سيتم استخدامها في حال عدم توفّر بيانات على القرص. يسهّل ذلك تنفيذ أدوات التسلسل المخصّصة، وبالتالي لا يحتاج المستخدمون إلى معالجة حالات خاصة لتدفقات الإدخال الفارغة (لا يتم تحليل تدفقات الإدخال الفارغة باستخدام JSON).

    • هناك أيضًا عملية تحقّق للتأكّد من أنّ مصدر الإخراج المقدَّم إلى writeTo()‎ ليس مغلقًا، وإذا كان مغلقًا، فسيتم عرض استثناءات (I16e29).
  • جعل الدالة الإنشائية لـ SharedPreferencesView داخلية كانت هذه السمة متاحة للجميع في الأصل للسماح بإجراء الاختبارات. بدلاً من ذلك، يجب أن تنشئ الاختبارات SharedPreferencesMigration وتختبرها. (I93891)

إصلاح الأخطاء

  • أصبحت المَعلمة produceFile في DataStoreFactory وPreferenceDataStoreFactory الآن المَعلمة الأخيرة في القائمة، ما يتيح لك استخدام بنية دالة lambda اللاحقة في Kotlin. (Ibe7f1، b/169425442)
  • اتّباع متطلبات واجهة برمجة التطبيقات الصريحة الجديدة للغة 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. تؤدي عملية التعديل إلى إيقاف استخدام Datastore للمستخدمين الذين يستخدمون Datastore مع أنواع غير أولية أو غير مفضّلة (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. يوفّر DataStore، المستنِد إلى دوال Kotlin coroutines وFlow، طريقتين مختلفتين للتنفيذ:

  • Proto DataStore، الذي يتيح لك تخزين عناصر مكتوبة (مدعومة بواسطة Protocol Buffers)
  • ‫Preferences DataStore، الذي يخزّن أزواج المفتاح/القيمة

يتم تخزين البيانات بشكل غير متزامن ومتسق ومعاملاتي، ما يتغلب على معظم عيوب SharedPreferences.