Room

توفر مكتبة Room للبيانات الثابتة طبقة تجريد فوق SQLite للسماح بالوصول إلى قاعدة البيانات بشكل أكثر فعالية مع الاستفادة من إمكانات SQLite الكاملة.
آخر الأخبار الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأوّلي
‫19 نوفمبر 2025 2.8.4 - - -

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

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

تشمل التبعيات الخاصة بمكتبة Room اختبار عمليات نقل البيانات في Room وRoom RxJava.

أضِف الاعتماديات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:

Kotlin

dependencies {
    val room_version = "2.8.4"

    implementation("androidx.room:room-runtime:$room_version")

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Groovy

dependencies {
    def room_version = "2.8.4"

    implementation "androidx.room:room-runtime:$room_version"

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See KSP Quickstart to add KSP to your build
    ksp "androidx.room:room-compiler:$room_version"

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

للحصول على معلومات حول استخدام إضافة KAPT، يُرجى الاطّلاع على مستندات KAPT.

للحصول على معلومات حول استخدام المكوّن الإضافي KSP، يُرجى الاطّلاع على مستندات البدء السريع في KSP.

للحصول على معلومات حول استخدام إضافات Kotlin، يُرجى الاطّلاع على مستندات ktx.

لمزيد من المعلومات حول الاعتماديات، يُرجى الاطّلاع على إضافة اعتماديات البناء.

يمكنك اختياريًا الاعتماد على androidx.room:room-common لاستخدام تعليقات Room التوضيحية مع المكتبات غير التابعة لنظام Android (أي وحدات Gradle التي تستخدم Java أو Kotlin فقط).

ضبط خيارات المترجم

تتضمّن Room خيارات معالجة التعليقات التوضيحية التالية.

room.schemaLocation directory
يتيح تصدير مخططات قاعدة البيانات إلى ملفات JSON في الدليل المحدّد. يمكنك الاطّلاع على عمليات نقل البيانات في Room للحصول على مزيد من المعلومات.
room.incremental boolean
تفعيل معالج التعليقات التوضيحية التدريجي في Gradle القيمة التلقائية هي true.
room.generateKotlin boolean
إنشاء ملفات مصدر Kotlin بدلاً من Java تتطلّب هذه الميزة KSP. القيمة التلقائية هي true اعتبارًا من الإصدار 2.7.0. يمكنك الاطّلاع على ملاحظات الإصدار 2.6.0 عند طرحه لمعرفة المزيد من التفاصيل.

استخدام مكوّن Room الإضافي لنظام Gradle

في الإصدار 2.6.0 من Room والإصدارات الأحدث، يمكنك استخدام المكوّن الإضافي لنظام Gradle المتوافق مع Room من أجل ضبط خيارات برنامج الترجمة البرمجية في Room. يضبط المكوّن الإضافي المشروع بحيث يتم ضبط المخططات التي تم إنشاؤها (وهي ناتج مهام التجميع ويتم استخدامها لعمليات النقل التلقائي) بشكل صحيح لإنشاء إصدارات قابلة للتكرار وقابلة للتخزين المؤقت.

لإضافة المكوّن الإضافي، حدِّد المكوّن الإضافي وإصداره في ملف تصميم Gradle ذي المستوى الأعلى.

Groovy

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

في ملف تصميم Gradle على مستوى الوحدة، طبِّق المكوّن الإضافي واستخدِم إضافة room.

Groovy

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Kotlin

plugins {
    id("androidx.room")
}

android {
    ...
    room {
        schemaDirectory("$projectDir/schemas")
    }
}

يجب ضبط schemaDirectory عند استخدام Room Gradle Plugin. سيؤدي ذلك إلى ضبط إعدادات برنامج Room المجمّع ومهام التجميع المختلفة والخوادم الخلفية (javac وKAPT وKSP) لإخراج ملفات المخطط إلى مجلدات بنكهات مختلفة، مثل schemas/flavorOneDebug/com.package.MyDatabase/1.json. يجب إيداع هذه الملفات في المستودع لاستخدامها في عمليات التحقّق وعمليات النقل التلقائي.

لا يمكن ضبط بعض الخيارات في جميع إصدارات Room Gradle Plugin، على الرغم من أنّها متوافقة مع برنامج Room المجمّع. يسرد الجدول أدناه كل خيار ويعرض إصدار إضافة Room Gradle الذي أتاح إمكانية ضبط هذا الخيار باستخدام الإضافة room. إذا كان إصدارك أقل، أو إذا لم يكن الخيار متاحًا بعد، يمكنك استخدام خيارات معالج التعليقات التوضيحية بدلاً من ذلك.

خيار منذ الإصدار
room.schemaLocation (مطلوب) 2.6.0
room.incremental -
room.generateKotlin -

استخدام خيارات معالج التعليقات التوضيحية

إذا كنت لا تستخدم Room Gradle Plugin، أو إذا كان الخيار الذي تريده غير متوافق مع إصدار المكوّن الإضافي، يمكنك ضبط Room باستخدام خيارات معالج التعليقات التوضيحية، كما هو موضّح في إضافة تبعيات الإصدار. تعتمد طريقة تحديد خيارات التعليقات التوضيحية على ما إذا كنت تستخدم KSP أو KAPT مع Room.

Groovy

// For KSP
ksp {
    arg("option_name", "option_value")
    // other otions...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "option_name":"option_value",
                    // other options...
                    ]
            }
        }
    }
}

Kotlin

// For KSP
ksp {
    arg("option_name", "option_value")
    // other options...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "option_name" to "option_value",
                    // other options...
                )
            }
        }
    }
}

بما أنّ room.schemaLocation هو دليل وليس نوعًا أساسيًا، يجب استخدام CommandLineArgumentsProvider عند إضافة هذا الخيار لكي يتعرّف Gradle على هذا الدليل عند إجراء عمليات التحقّق من الحداثة. نقل قاعدة بيانات Room تعرض عملية تنفيذ كاملة للرمز CommandLineArgumentsProvider الذي يوفّر موقع المخطط.

الملاحظات

تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.

إنشاء مشكلة جديدة

يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.

الإصدار 2.8

الإصدار 2.8.4

‫19 نوفمبر 2025

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

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

  • تمت إضافة ذاكرة تخزين مؤقت لعبارات SQL المُعدّة مسبقًا إلى مجموعة الاتصالات في Room عند استخدام SQLiteDriver لا تتضمّن مجموعة داخليًا، مثل BundledSQLiteDriver. يؤدي ذلك إلى تحسين الأداء عند تنفيذ بيان SQL نفسه بشكل متكرّر. (5f43bc، b/319653917)
  • تم إصلاح مشكلة عدم توفّر معلومات في رسالة الخطأ الفعلية / المتوقّعة عند التحقّق من صحة المخطط. (8b23da، b/454531083)
  • تم إصلاح مشكلة في إنشاء رمز Kotlin في Room، وهي عدم توفّر دوال @Transaction DAO مع متغيرات النوع. (a8365d، b/251316420)
  • تحسين أداء SupportSQLite Wrapper في Room من خلال تجنُّب عمليات نقل سلاسل المحادثات والحفاظ على سلوك الحظر نفسه الذي توفّره واجهات برمجة التطبيقات SupportSQLiteDatabase (fc70e4)

الإصدار 2.8.3

‫22 أكتوبر 2025

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

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

  • تم إصلاح مشكلة في الأداء في Room SQLite Wrapper كانت تتسبّب في إجراء عدد كبير من طلبات JNI وتدهور كبير في الأداء عند تكرار Cursor.

الإصدار 2.8.2

‫8 أكتوبر 2025

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

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

  • تم إصلاح مشكلة توقّف تام كان من المحتمل حدوثها عند إعادة فتح قاعدة بيانات تم إغلاقها تلقائيًا من خلال إصدار Flow (b/446643789).

الإصدار 2.8.1

‫24 سبتمبر 2025

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

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

  • تم إصلاح عُطل في المعالج كان يحدث عند معالجة دالة DAO باستخدام تعليق لامدا. (b/442220723).
  • تم إصلاح مشكلة حالة التسابق التي كانت تمنع "الرسومات المتحركة" من تلقّي آخر التحديثات.

الإصدار 2.8.0

‫10 سبتمبر 2025

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

التغييرات المهمة منذ الإصدار 2.7.0:

  • تمت إضافة عنصر جديد androidx.room:room-sqlite-wrapper يحتوي على واجهات برمجة تطبيقات للحصول على برنامج تضمين SupportSQLiteDatabase من RoomDatabase مع SQLiteDriver تم إعداده. للحصول على برنامج تضمين، استخدِم دالة الإضافة الجديدة RoomDatabase.getSupportWrapper(). هذا العنصر هو عنصر توافق للحفاظ على استخدامات SupportSQLiteDatabase، التي يتم الحصول عليها عادةً من roomDatabase.openHelper.writableDatabase، حتى إذا تم ضبط قاعدة بيانات Room باستخدام SQLiteDriver. تكون هذه الأداة المجمّعة مفيدة لنقل قواعد البيانات بشكل تدريجي إلى الإصدارات الأحدث من الذين يريدون استخدام واجهات برمجة التطبيقات SQLiteDriver ولكن لديهم استخدامات مكثّفة لواجهات برمجة التطبيقات SupportSQLite ويريدون الاستفادة من BundledSQLiteDriver. اطّلِع على دليل نقل البيانات لمزيد من المعلومات.
  • تمّت إضافة دعم لأهداف KMP Watch OS وTv OS.
  • تم تعديل الحد الأدنى من إصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android في المكتبة من المستوى 21 إلى المستوى 23 من واجهة برمجة التطبيقات

الإصدار 2.8.0-rc02

‫27 أغسطس 2025

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

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

  • تعديل minSDK من المستوى 21 لواجهة برمجة التطبيقات إلى المستوى 23 (Ibdfca وb/380448311 وb/435705964 وb/435705223)
  • تعديل الحدّ الأدنى لإصدار "المكوّن الإضافي لنظام Gradle المتوافق مع Android" (AGP) المتوافق مع "المكوّن الإضافي لنظام Gradle المتوافق مع Room" من 8.1 إلى 8.4 (Ia0d28)

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

  • تم إصلاح مشكلة تنفيذ عملية نقل البيانات المدمرة حتى في حال توفُّر مسار نقل بيانات لقاعدة بيانات مُعدّة مسبقًا (b/432634197).

الإصدار 2.8.0-rc01

‫13 أغسطس 2025

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

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

  • إزالة التعليقات التوضيحية القديمة @RequiresApi(21) (Ic4792، I9103b)

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

  • إصلاح مشكلة تداخل في التنفيذ حيث لا تعرض Room Flows أحدث نتيجة طلب بحث في حالة طلب بحث/كتابة غير متزامن ومتعدد. (Ic9a3c)

الإصدار 2.8.0-beta01

‫1 أغسطس 2025

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

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

  • تم الآن إلغاء الأحرف الخاصة بشكل صحيح في أسماء الجداول وطرق العرض أثناء عمليات نقل البيانات المدمرة. (9e55f8، b/427095319)

الإصدار 2.8.0-alpha01

‫16 يوليو 2025

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

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

  • تمت إضافة عنصر جديد androidx.room:room-sqlite-wrapper يحتوي على واجهات برمجة تطبيقات للحصول على برنامج تضمين SupportSQLiteDatabase من RoomDatabase مع SQLiteDriver تم إعداده. للحصول على برنامج تضمين، استخدِم دالة الإضافة الجديدة RoomDatabase.getSupportWrapper(). هذا العنصر هو عنصر توافق للحفاظ على استخدامات SupportSQLiteDatabase، التي يتم الحصول عليها عادةً من RoomDatabase.openHelper.writableDatabase، حتى إذا تم ضبط قاعدة بيانات Room باستخدام SQLiteDriver. تكون هذه الأداة المجمّعة مفيدة لنقل قواعد البيانات بشكل تدريجي للمطوّرين الذين يريدون استخدام SQLiteDriver ولكنهم يستخدمون واجهات برمجة التطبيقات SupportSQLite بشكل كبير ويريدون الاستفادة من BundledSQLiteDriver. (Icf6ac)
  • إضافة استهدافات KMP لنظامَي التشغيل Watch OS وTV OS (I228f6 وb/394238801)

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

  • إصلاح مشكلة توقّف تام كان من الممكن أن تحدث أحيانًا عند استخدام المعاملات المعلّقة وAndroidSQLiteDriver (b/415006268)

الإصدار 2.7

الإصدار 2.7.2

‫18 يونيو 2025

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

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

  • تم إصلاح مشكلة القراءة غير الصحيحة لقيم التعليقات التوضيحية عند معالجة المصادر الأصلية باستخدام KSP، ما يؤدي أحيانًا إلى عدم تضمين عمليات تصدير المخطط. (b/416549580)
  • تم إصلاح الخطأ الذي كان يتسبب في تنفيذ العبارات كما لو كانت استعلامات غير قابلة للقراءة عند إضافة تعليقات في بداية عبارة SQL. (b/413061402)
  • تم إصلاح مشكلة تعذُّر إعداد إضافة Gradle في Room بسبب فراغ دليل المخطط. (b/417823384)
  • لن يتم عرض الخطأ SQLiteException بعد الآن عندما يستغرق الحصول على اتصال وقتًا طويلاً جدًا، بل سيتم إرسال رسالة سجلّ من خلال المكتبة. يؤدي تسجيل الأخطاء بدلاً من عرضها إلى حلّ المشاكل المتعلّقة بتعليق أدوات الربط في نظام التشغيل iOS، ما يؤدي إلى تفسير Room بشكل خاطئ للمهلة التي تحدث في روتين Kotlin الفرعي الذي يحصل على الاتصال، وبالتالي منع عرض الاستثناء عند تصغير تطبيق iOS ثم إعادة فتحه أثناء تنفيذ عملية قاعدة بيانات. (b/422448815)

الإصدار 2.7.1

‫23 أبريل 2025

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

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

  • تم إصلاح الخطأ IndexOutOfBoundsException أثناء التحقّق من صحة محوّل النوع المقدَّم. (b/409804755).
  • تتيح هذه السمة استخدام RoomDatabase.runInTransaction() عند ضبط SQLiteDriver باستخدام Room. (b/408364828).

الإصدار 2.7.0

‫9 أبريل 2025

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

التغييرات المهمة منذ الإصدار 2.6.0

  • إتاحة استخدام Kotlin Multiplatform (KMP): في هذا الإصدار، تمت إعادة تصميم Room لتصبح مكتبة Kotlin Multiplatform (KMP). الأنظمة الأساسية المتوافقة حاليًا هي Android وiOS وJVM (الكمبيوتر) وMac وLinux. لمزيد من المعلومات حول كيفية بدء استخدام Room KMP، يُرجى الرجوع إلى مستندات Room KMP الرسمية. كجزء من توافق KMP، يمكن أيضًا ضبط Room باستخدام SQLiteDriver. للحصول على معلومات حول كيفية نقل تطبيق حالي إلى واجهات برمجة التطبيقات الخاصة بميزة "وضع القيادة" وإلى Room KMP، يُرجى الاطّلاع على مستندات النقل.
  • تم تفعيل إنشاء رمز Kotlin البرمجي على KSP تلقائيًا في حال تتم المعالجة من خلال KSP. بالنسبة إلى المشاريع التي تستخدم KAPT أو Java فقط، سيظل Room ينشئ مصادر Java.
  • الإصدار 2.0 من Kotlin وKSP2: يستهدف Room الآن الإصدار 2.0 من لغة Kotlin، وسيتطلّب من المشاريع أيضًا التجميع باستخدام الإصدار 2.0 من Kotlin أو إصدار لغة مكافئ أو أحدث. تمت أيضًا إضافة دعم KSP2 ويُنصح باستخدامه عند استخدام Room مع Kotlin 2.0 أو إصدار أحدث.

الإصدار 2.7.0-rc03

‫26 مارس 2025

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

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

  • لن يتم عرض الخطأ InterruptedExceptionعند مقاطعة سلسلة محادثات أثناء تنفيذ واجهات برمجة التطبيقات الحظر في Room، بما في ذلك دوال DAO الحظر (b/400584611).
  • إعادة تنفيذ مجموعة الاتصالات في Room في محاولة لتخفيف المشاكل المشابهة SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection. (b/380088809)

الإصدار 2.7.0-rc02

‫12 مارس 2025

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

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

  • إصلاح المشكلة التي تتسبّب في عدم معالجة "عمليات النقل التلقائي" بشكل صحيح لعمود جديد في جدول "البحث النصي الكامل" (b/348227770، Ic53f3)
  • إصلاح عُطل في أداة تجميع الغرف بسبب NullPointerException عند معالجة مصادر غير JVM من خلال KSP (b/396607230, I693c9)
  • إصلاح مشكلة عدم إبطال Room للجداول في نهاية استخدام اتصال الكاتب (b/340606803, I73ef6)

الإصدار 2.7.0-rc01

‫26 فبراير 2025

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

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

  • تم إصلاح مشكلة عدم ضبط Room لـ busy_timeout في عملية الربط الأولية بقاعدة البيانات، ما يؤدي إلى حدوث مشاكل في SQLException: Error code: 5, message: database is locked (I93208 وb/380088809).
  • تم إصلاح مشكلة في برنامج التحويل البرمجي الخاص بمكتبة Room كانت تؤدي إلى تعطُّل معالج KSP عند معالجة مجموعات المصادر الأصلية (مثل iOS) على الإصدار 2.1.x من Kotlin والإصدار 1 من KSP (I883b8، b/396607230).

الإصدار 2.7.0-beta01

‫12 فبراير 2025

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

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

  • تم إصلاح مشكلة في RoomDatabase.inTransaction() تسبّبت في فتح قاعدة بيانات مغلقة عندما لا يكون ذلك ضروريًا، وكان من المفترض أن تعرض القيمة "خطأ" بسرعة إذا كانت قاعدة البيانات مغلقة (b/325432967).
  • إصلاح عُطل (IllegalArgumentException: not a valid name) في برنامج التحويل البرمجي الخاص بمكتبة Room عند معالجة دوال DAO باستخدام فئات Kotlin المضمّنة / فئات القيم (b/388299754)
  • تضمين قواعد Proguard في عنصر JVM الخاص بـ room-runtime حتى لا تتم إزالة الدالة الإنشائية التلقائية لتنفيذ قاعدة البيانات الذي تم إنشاؤه لأنّ Room تستخدمه في عملية التهيئة التلقائية التي تستخدم الانعكاس (b/392657750).

الإصدار 2.7.0-alpha13

‫29 يناير 2025

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

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

  • يستهدف Room الآن لغة Kotlin 2.0 وسيتطلّب من المشاريع أيضًا التجميع باستخدام Kotlin 2.0 وإصدار لغة مكافئ أو أعلى. (I8efb0، b/315461431، b/384600605)

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

  • تم إصلاح مشكلة في أداة إنشاء قاعدة بيانات Room KMP عند استخدام اسم بسيط بدلاً من مسار في Android، ولم يكن من الممكن العثور على المسار الذي تم تحديد موقعه لملف قاعدة البيانات في دليل بيانات التطبيق. (I83315، b/377830104)
  • تم إصلاح مشكلة في المكوّن الإضافي لنظام Gradle المتوافق مع Room، حيث كان ضبط إدخالات المخطط وإخراجه يتسبّب في حدوث مشكلة في مشاريع Android: property 'inputDirectory' is final and cannot be changed any further. (1dbb4c، b/376071291)
  • تمت إضافة إمكانية استخدام KSP2 في Room Gradle Plugin، ما يؤدي إلى إصلاح مشكلة عدم إعداد دليل المخطط بشكل صحيح من خلال المكوّن الإضافي. (Iec3c4، b/379159770)

المساهمة الخارجية

  • تم إصلاح مشكلة في دمج تقسيم الصفحات Room كانت تتسبّب في حدوث قفزات في واجهة المستخدم عندما يكون المفتاح الأوّلي لإعادة التحميل قريبًا جدًا من نهاية القائمة. شكرًا "إيفا". (I2abbe، b/389729367)

الإصدار 2.7.0-alpha12

‫11 ديسمبر 2024

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

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

  • أضِف واجهة برمجة التطبيقات التجريبية RoomDatabase.Builder.setInMemoryTrackingMode() لتحديد ما إذا كان Room سيستخدم جدولاً في الذاكرة أم لا لتتبُّع الإبطال. (I2a9b2، b/185414040)

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

  • تؤدي عمليات النقل المدمرة الآن إلى حذف طرق العرض لضمان إعادة إنشائها، ما يؤدي إلى توافق السلوك عندما تكون allowDestructiveMigrationForAllTables مفعّلة (الإعداد التلقائي في KMP) مع السلوك الحالي عندما تكون غير مفعّلة. (0a3e83، b/381518941)

الإصدار 2.7.0-alpha11

‫30 أكتوبر 2024

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

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

  • أعِد النظر في توقيع طريقة convertRows() التي تمت إضافتها حديثًا لتصبح دالة تعليق تتلقّى RawRoomQuery لتقسيم البيانات إلى صفحات في Room. (Ie57b5، b/369136627)

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

  • تم إصلاح المشكلة في تقسيم الغرف إلى صفحات حيث كان يتم إنشاء رمز غير صالح عند استخدام @Relation مع PagingSource.

الإصدار 2.7.0-alpha10

‫16 أكتوبر 2024

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

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

  • إنشاء فئة ByteArrayWrapper داخلية لدعم العلاقات مع ByteBuffer على الأنظمة الأساسية غير Android وغير JVM (I75543، b/367205685)
  • أضِف SQLiteStatement.getColumnType() مع ثوابت النتائج المختلفة SQLITE_DATA_* لتتمكّن من استرداد نوع بيانات عمود. (I1985c، b/369636251)

الإصدار 2.7.0-alpha09

‫2 أكتوبر 2024

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

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

  • تم إصلاح مشكلة في تنفيذ room-paging في KMP كانت تتسبّب في حدوث Error code: 8, message: attempt to write a readonly database بسبب بدء معاملة كتابة على اتصال قراءة. (b/368380988)

الإصدار 2.7.0-alpha08

‫18 سبتمبر 2024

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

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

  • تم نقل عناصر room-paging لتكون متوافقة مع KMP. (Ib8756، b/339934824)
  • تمت إتاحة واجهة برمجة التطبيقات invalidationTrackerFlow() كواجهة برمجة تطبيقات تابعة للطرف الأول باسم InvalidationTracker.createFlow()، وهي متاحة الآن لمجموعات المصادر غير التابعة لنظام التشغيل Android في مشاريع KMP. (I1fbfa و(I8fb29) وb/329291639 وb/329315924)

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

  • تمت إزالة أو استبدال جميع رسائل التحذير والخطأ في Room التي تستخدم الكلمة Cursor، لأنّ Cursor لم تعُد مصطلحًا عامًا دقيقًا يمكن استخدامه في إصدار KMP من Room. (Id8cd9، b/334087492)

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

  • تم إصلاح مشكلة كانت تتسبّب في محاولة Room KMP إصدار الرمز باستخدام UUID للأنظمة الأساسية غير JVM. (b/362994709)
  • تم إصلاح مشكلة في Room Gradle Plugin كانت تؤدي إلى ظهور خطأ مثل "لا يمكن تغيير سمات الإعداد … بعد أن تم قفله للتعديل" عند استخدامه في مشروع KMP مع Compose Multiplatform. (b/343408758)

الإصدار 2.7.0-alpha07

‫21 أغسطس 2024

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

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

  • سيضيف المكوّن الإضافي لنظام Gradle المتوافق مع Room الآن المخططات التي تم تصديرها تلقائيًا إلى مصادر موارد "اختبار الأجهزة" في Android، ما يتيح استخدامها من خلال MigrationTestHelper.

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

  • تم إصلاح مشكلة في "القيمة الفعلية" التي تم إنشاؤها في RoomDatabaseConstructor، حيث لم يتم تضمين المعدِّل "فعلي" في الدالة initialize إذا تم أيضًا إلغاء هذه الدالة في تعريف "القيمة المتوقّعة". (359631627)
  • تم إصلاح مشكلة عدم تطابق "القيمة الفعلية" التي تم إنشاؤها للرمز RoomDatabaseConstructor مع مستوى ظهور تعريف "القيمة المتوقّعة". (358138953)

الإصدار 2.7.0-alpha06

‫7 أغسطس 2024

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

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

  • تغيير إعدادات إنشاء مثيل RoomDatabase في مشروع KMP

بسبب نموذج تجميع Kotlin 2.0، لم تعُد استراتيجية الإشارة إلى دالة سيتم إنشاؤها، واسمها instantiateImpl()، صالحة. تم طرح واجهتَي برمجة تطبيقات جديدتَين، @ConstructedBy وRoomDatabaseConstructor، تحلّان محلّ استراتيجية instantiateImpl(). في ما يلي الاستراتيجية الجديدة:

  1. تحديد عنصر "توقّع" ينفّذ RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. اربط العنصر ببيان @Database باستخدام @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. إنشاء مثيل قاعدة بيانات جديد بدون تمرير وسيطة المصنع

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

إصلاح الأخطاء b/316978491 وb/338446862 وb/342905180

  • إتاحة @RawQuery في Room KMP من خلال إضافة واجهة برمجة تطبيقات جديدة باسم RoomRawQuery تشبه SupportSQLiteQuery من حيث الاحتفاظ بسلسلة SQL الأولية ووظيفة لربط الوسيطات بعبارة يمكن الآن للدوال التي تتضمّن التعليق التوضيحي @RawQuery قبول RoomRawQuery كمَعلمة واحدة. (Iea844، b/330586815)
  • أضِف حمولة زائدة من setQueryCallback() تقبل CoroutineContext. (Id66ff، b/309996304)
  • تمّت إضافة دعم لأهداف linuxArm64 Kotlin Multiplatform (I139d3، b/338268719)

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

  • تم إصلاح مشكلة كانت تتسبّب في إنشاء Room بشكلٍ غير صحيح لطلب إلى recursiveFetchArrayMap في الاستهدافات غير التابعة لنظام التشغيل Android. (710c36، b/352482325)
  • تم إصلاح مشكلة كانت تتسبّب أحيانًا في ظهور استثناء في Room بشأن "انتهت مهلة محاولة الاتصال" في مشروع KMP. (fa72d0، b/347737870)
  • تم إصلاح مشكلة في عمليات النقل التلقائي كانت تتحقّق من المفاتيح الخارجية في وقت مبكر جدًا قبل أن تغيّر الجداول الأخرى مخططاتها لتتوافق مع المفاتيح الخارجية الجديدة. (7672c0، b/352085724)

الإصدار 2.7.0-alpha05

‫10 يوليو 2024

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

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

  • تمت إعادة تسمية "SQLiteKt" إلى "SQLite" و"BundledSQLiteKt" إلى "BundledSQLite". (I8b501)

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى حدوث توقّف تام أو ظهور خطأ في RoomDatabase مع انتهاء مهلة الاتصال عند استخدام AndroidSQLiteDriver.

الإصدار 2.7.0-alpha04

‫12 يونيو 2024

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

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

  • تم إصلاح مشكلة في معالج التعليقات التوضيحية في Room كانت تؤدي إلى إنشاء رمز KMP غير متوافق عند تحديد نوع إرجاع متعدد الخرائط في كائن الوصول إلى البيانات (DAO). (b/340983093)
  • تم إصلاح المشكلة التي يتعذّر فيها على Room العثور على تنفيذ قاعدة البيانات الذي تم إنشاؤه إذا لم يكن لفئة @Database التي تمّت إضافة التعليقات التوضيحية إليها أي حزمة. (b/342097292)
  • تم إصلاح مشكلة كانت تؤدي في بعض الأحيان إلى ظهور الخطأ ConcurrentModificationException عند تفعيل ميزة الإغلاق التلقائي وإبطال صلاحية مثيلات متعددة، وذلك عند إغلاق قاعدة البيانات تلقائيًا بسبب عدم النشاط.

الإصدار 2.7.0-alpha03

‫29 مايو 2024

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

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

  • إصلاح مشاكل مختلفة متعلّقة بالإصدار 2.0 من Kotlin وKSP يُرجى العِلم أنّ الإصدار 2.0 من Kotlin مع الإصدار 2 من KSP لم يكتمل بعد، ويعمل الفريق على واجهات برمجة التطبيقات المختلفة والتغييرات في السلوك في المحول البرمجي الجديد. (b/314151707)

الإصدار 2.7.0-alpha02

‫14 مايو 2024

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

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

  • تم إصلاح مشاكل متنوّعة في KSP.

الإصدار 2.7.0-alpha01

‫1 مايو 2024

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

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

  • إتاحة استخدام Kotlin Multiplatform (KMP): في هذا الإصدار، تمت إعادة تصميم Room لتصبح مكتبة Kotlin Multiplatform (KMP). على الرغم من أنّه لا يزال هناك بعض العمل الذي يجب إكماله، يقدّم هذا الإصدار نسخة جديدة من Room تم فيها "توحيد" معظم الوظائف (أي جعلها متوافقة مع عدة منصات). الأنظمة الأساسية المتوافقة حاليًا هي Android وiOS وJVM (الكمبيوتر) وMac وLinux. سيتم توفير أي وظائف غير متوفّرة في المنصات التي تمّت إضافة دعمها حديثًا في إصدارات Room القادمة.

لمزيد من المعلومات حول كيفية بدء استخدام Room KMP، يُرجى الرجوع إلى مستندات Room KMP الرسمية.

  • تم تفعيل إنشاء رمز Kotlin البرمجي على KSP تلقائيًا في حال تتم المعالجة من خلال KSP. بالنسبة إلى المشاريع التي تستخدم KAPT أو Java فقط، سيظل Room ينشئ مصادر Java.

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

  • تمت إضافة تحميل زائد للدالة Room.databaseBuilder() يقبل مَعلمة lambda من المفترض استخدامها مع دالة تم إنشاؤها في Room لتجنُّب استخدام الانعكاس عند إنشاء تنفيذ RoomDatabase الذي تم إنشاؤه. مثال على الاستخدام:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • تمت إضافة واجهة برمجة تطبيقات لإعداد غرفة باستخدام CoroutineContext إلى أداة الإنشاء: RoomDatabase.Builder.setQueryCoroutineContext. يُرجى العِلم أنّه لا يمكن ضبط RoomDatabase إلا باستخدام المنفّذين الذين يستعملون setQueryExecutor أو باستخدام سياق Coroutine، وليس كليهما.
  • تمت إضافة واجهة برمجة تطبيقات لإعداد Room باستخدام برنامج تشغيل SQLite: RoomDatabase.Builder.setDriver(). لمزيد من المعلومات حول SQLite Driver API، يُرجى الرجوع إلى مستندات SQLite KMP.
  • تمت إضافة واجهات برمجة التطبيقات للوصول إلى SQLiteConnection الأساسي من واجهات برمجة التطبيقات الخاصة ببرامج التشغيل: RoomDatabase.useReaderConnection وRoomDatabase.useWriterConnection.
  • تتضمّن الآن عدة عمليات ردّ اتصال مرتبطة بمكتبة Room إصدارًا محمّلاً بشكل زائد يتلقّى SQLiteConnection بدلاً من SupportSQLiteDatabase. وتهدف هذه الإعدادات إلى أن يتم تجاهلها عند نقل البيانات إلى مشروع KMP. لمزيد من المعلومات حول نقل استخدامات Room في تطبيق Android إلى وحدة KMP مشترَكة، يُرجى الرجوع إلى دليل نقل البيانات. عمليات الاسترجاع هي:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • تم دمج العنصر androidx.room:room-ktx في KTX مع androidx.room:room-runtime وجميع واجهات برمجة التطبيقات الخاصة به، وأصبح العنصر فارغًا الآن. يُرجى إزالته من قائمة التبعيات.

الإصدار 2.6

الإصدار 2.6.1

‫29 نوفمبر 2023

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

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

  • تم حلّ مشكلة في الرمز البرمجي الذي تم إنشاؤه، حيث تم ضبط القيمة التلقائية لأعمدة "العدد المضاعف" في EntityCursorConverter على 0 بدلاً من 0.0. تم أيضًا تضمين حلّ محتمل لحالة استخدام مشابهة لأعمدة من النوع Float. (Id75f5، b/304584179)
  • سيتم الآن نشر الاستثناءات التي تم طرحها من عمليات تحميل PagingSource كـ LoadStateUpdate من LoadResult.Error يحتوي على Throwable. يمكن ملاحظة حالة الخطأ هذه من خلال PagingDataAdapter.loadStateFlow(Views) أو LazyPagingItems.loadState(Compose). يُرجى العِلم أنّ هذا يشير إلى تغيير في السلوك، ففي السابق، كانت أخطاء التحميل تظهر كاستثناء تم طرحه من خلال طريقة dao التي أدّت إلى التحميل. (I93887، b/302708983)

الإصدار 2.6.0

‫18 أكتوبر 2023

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

التغييرات المهمة منذ الإصدار 2.5.0

  • يتوفّر الآن خيار تفعيل إنشاء رمز Kotlin (أو "Kotlin CodeGen") في Room KSP. (4297ec0). لتفعيل ميزة Kotlin CodeGen في Room، أضِف اسم الخيار room.generateKotlin إلى خيارات المعالج في KSP. لمزيد من التفاصيل حول كيفية تمرير خيارات المعالج في "إطار الشفافية والموافقة في كوريا"، يُرجى الاطّلاع على مستندات "إطار الشفافية والموافقة في كوريا".

ملاحظة: عند استخدام Kotlin CodeGen، من المهم ملاحظة أنّه تمّت إضافة قيود إضافية. لا يُسمح باستخدام السمات المجردة كدوال جلب أو طلبات بحث في DAO في Kotlin CodeGen، ويُتوقع بدلاً من ذلك إعادة كتابتها كدوال لتجنُّب الاعتقاد الخاطئ بأنّ قيمة السمة غير قابلة للتغيير ولها نتيجة مخزّنة ثابتة. تمت إضافة قيود أخرى، وهي أنّه لم يعُد يُسمح باستخدام أنواع الإرجاع القابلة للتصغير في مجموعات في Room لإنشاء الرموز البرمجية في Kotlin.

تحذير: قد تجد أنّ مشاريعك أكثر صرامة من حيث إمكانية قبول القيم الفارغة عند استخدام Kotlin CodeGen. في Kotlin CodeGen، تكون إمكانية القيم الفارغة لوسيطات الأنواع مهمة، بينما يتم تجاهلها في Java في الغالب. على سبيل المثال، لنفترض أنّ لديك نوع إرجاع `Flow<foo\>` والجدول فارغ. لن يؤدي ذلك إلى حدوث أي مشاكل في Java CodeGen، ولكن سيظهر لك خطأ في Kotlin CodeGen. ولتجنُّب ذلك، عليك استخدام `Flow<foo?\>`، على افتراض أنّه يتم إصدار قيمة فارغة. </foo?\></foo\>

  • تمت إضافة العنصر الجديد الخاص بالمكوّن الإضافي لنظام Gradle المتوافق مع Room إلى Room باستخدام المعرّف androidx.room، ما يحلّ العديد من المشاكل الحالية في Room المتعلّقة بتوفير مدخلات ومخرجات المخططات عبر خيارات معالج التعليقات التوضيحية في Gradle. لمزيد من التفاصيل، يُرجى الرجوع إلى ملاحظات إصدار Room 2.6.0-alpha02.
  • تتوفّر الآن فئات القيم في عناصر Room لبرنامج KSP. (4194095)
  • أصبحت أنواع الإرجاع Nested Map في دوال DAO متاحة الآن في Room. (I13f48، 203008711)

الإصدار 2.6.0-rc01

‫20 سبتمبر 2023

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

الإصدار 2.6.0-beta01

‫23 أغسطس 2023

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

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

  • التعامل مع استثناء SQLite الخاص أثناء عملية الإدراج أو التعديل التي تمّت مواجهتها عند طرح استثناء 2067 SQLITE_CONSTRAINT_UNIQUE أثناء عملية الإدراج أو التعديل، يجب أن تنفّذ عملية الإدراج أو التعديل عملية تعديل. (If2849، b/243039555)

الإصدار 2.6.0-alpha03

‫9 أغسطس 2023

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

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

  • أصبحت أنواع الإرجاع Nested Map في دوال DAO متاحة الآن في Room. (I13f48، 203008711)

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

  • تم إنشاء تعليق توضيحي جديد للنوع يُسمى @MapColumn ليحلّ محلّ @MapInfo، الذي تم إيقافه نهائيًا الآن. لكل اسم عمود (keyColumnName أو valueColumnName أو كليهما) يتم توفيره في التعليق التوضيحي @MapInfo، عليك تعريف التعليق التوضيحي @MapColumn الذي يتضمّن columnName فقط واستخدام التعليق التوضيحي في وسيطة النوع المحدَّد التي تتم الإشارة إليها (مفتاح أو قيمة الخريطة) في نوع الإرجاع لدالة DAO. ويرجع ذلك إلى استخدام التعليق التوضيحي @MapColumn مباشرةً في وسيطة النوع ضمن نوع الإرجاع لدالة DAO، بدلاً من استخدامه في الدالة نفسها مثل @MapInfo. لمزيد من المعلومات، يُرجى الرجوع إلى مستندات @MapColumn. (Ib0305، b/203008711)
  • تم تعديل ملفات واجهة برمجة التطبيقات لإضافة تعليقات توضيحية بشأن إيقاف التوافق (I8e87a، b/287516207)
  • تم تعديل واجهات برمجة التطبيقات الخاصة بمكوّن Room الإضافي في Gradle لكي لا تتطلّب دائمًا إعدادات لكل صيغة. وهذا يعني أنّ المكوّن الإضافي يمكنه قبول موقع جغرافي عام لجميع الأنواع بدون إنشاء أدلة متعدّدة، ما يتيح عمليات نقل أكثر سلاسة، ولكنّه أيضًا مرن بما يكفي لإعداد مخططات النكهات أو أنواع الإصدارات يدويًا مع الاحتفاظ بمزايا المكوّن الإضافي (عمليات إنشاء قابلة للتكرار والتخزين المؤقت). (I09d6f، b/278266663)

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

  • تم إصلاح ثغرة أمنية محتملة لتسرُّب الذاكرة في QueryInterceptorStatement. (I193d1)
  • تم إصلاح السلوك غير الصحيح في الدالة QueryInterceptorDatabase execSQL(). (Iefdc8)

الإصدار 2.6.0-alpha02

‫21 حزيران (يونيو) 2023

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

مكوّن Room الإضافي لنظام Gradle

يحتوي هذا الإصدار الجديد على عنصر جديد لـ "المكوّن الإضافي لنظام Gradle المتوافق مع Room" مع المعرّف androidx.room، ما يحلّ العديد من المشاكل الحالية في Room المتعلّقة بتوفير مدخلات ومخرجات المخططات عبر خيارات معالج التعليقات التوضيحية في Gradle. يضبط Room Gradle Plugin المشروع بحيث يتم ضبط المخططات التي يتم إنشاؤها والتي يتم استخدامها لعمليات النقل التلقائي والتي تكون ناتجًا لمهام التجميع بشكلٍ صحيح لإجراء عمليات إنشاء قابلة للتكرار وقابلة للتخزين مؤقتًا. توفّر الإضافة لغة خاصة بالمجال (DSL) لضبط موقع المخطط الأساسي:

room {
    schemaDirectory("$projectDir/schemas/")
}

سيضبط المكوّن الإضافي بعد ذلك برنامج Room المجمّع ومهام التجميع المختلفة وبرامج الخلفية (javac وKAPT وKSP) لإخراج ملفات المخطط في مجلدات ذات إصدارات مختلفة، أي schemas/flavorOneDebug/com.package.MyDatabase/1.json. وكالعادة، يتم تسجيل هذه الملفات في المستودع لاستخدامها في عمليات التحقّق وعمليات النقل التلقائي. عند الانتقال إلى استخدام المكوّن الإضافي بدلاً من خيارات معالجة التعليقات التوضيحية، يجب نسخ ملفات المخطط الحالية إلى أدلة الإصدارات التي تم إنشاؤها بواسطة المكوّن الإضافي. هذه عملية نقل لمرة واحدة يجب إجراؤها يدويًا. سيتم تعديل مستندات المخطط على developers.android.com في المستقبل بعد معالجة الملاحظات والوصول إلى إصدار ثابت من المكوّن الإضافي، لذا يُرجى تجربته.

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

  • تم تعريف RoomDatabase.QueryCallback على أنّه واجهة وظيفية للسماح باستخدامات تحويل SAM. (Iab8ea، b/281008549)

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

  • حلّ المشكلة التي تنشأ عند إنشاء قاعدة البيانات في Robolectric بعد نقل مصادر Room من Java إلى Kotlin (Ic053c، b/274924903)

الإصدار 2.6.0-alpha01

‫22 مارس 2023

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

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

  • فئات القيم المتوافقة في Room مع KSP يمكن الآن لـ Room التعامل مع فئات القيم في الكيانات. (4194095)
  • يمكن الآن تفعيل ميزة إنشاء رموز Kotlin البرمجية(أو "Kotlin CodeGen") في Room (4297ec0). لتفعيل ميزة Kotlin CodeGen في Room، أضِف اسم الخيار room.generateKotlin إلى خيارات المعالج في KSP. لمزيد من التفاصيل حول كيفية تمرير خيارات المعالج في "إطار الشفافية والموافقة في كوريا"، يُرجى الاطّلاع على مستندات "إطار الشفافية والموافقة في كوريا".

ملاحظة: عند استخدام Kotlin CodeGen، من المهم ملاحظة أنّه تمّت إضافة قيود إضافية. لا يُسمح باستخدام السمات المجردة كدوال جلب أو طلبات بحث في DAO في Kotlin CodeGen، ويُتوقع بدلاً من ذلك إعادة كتابتها كدوال لتجنُّب الاعتقاد الخاطئ بأنّ قيمة السمة غير قابلة للتغيير ولها نتيجة مخزّنة ثابتة. تمت إضافة قيود أخرى، وهي أنّه لم يعُد يُسمح باستخدام أنواع الإرجاع القابلة للتصغير في مجموعات في Room لإنشاء الرموز البرمجية في Kotlin.

تحذير: قد تجد أنّ مشاريعك أكثر صرامة من حيث إمكانية قبول القيم الفارغة عند استخدام Kotlin CodeGen. في Kotlin CodeGen، تكون إمكانية القيم الفارغة لوسيطات الأنواع مهمة، بينما يتم تجاهلها في Java في الغالب. على سبيل المثال، لنفترض أنّ لديك نوع إرجاع `Flow<foo\>` والجدول فارغ. لن يؤدي ذلك إلى حدوث أي مشاكل في Java CodeGen، ولكن سيظهر لك خطأ في Kotlin CodeGen. ولتجنُّب ذلك، عليك استخدام `Flow<foo?\>`، على افتراض أنّه يتم إصدار قيمة فارغة. </foo?\></foo\>

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

  • الحماية من الاستخدام غير المجدي للمجموعات القابلة للقيم الخالية في أنواع الإرجاع لطُرق DAO (I777dc، b/253271782، b/259426907)
  • أضِف واجهة برمجة تطبيقات لإنشاء Flow ينقل تغييرات أداة تتبُّع الإبطال. تكون واجهة برمجة التطبيقات مفيدة لإنشاء عمليات بث تحتاج إلى التفاعل مع تغييرات قاعدة البيانات. (I8c790، b/252899305)

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

  • عدم السماح بالخصائص المجردة كدوال جلب أو استعلامات DAO في إنشاء الرموز البرمجية في Kotlin، بل يجب إعادة كتابتها كدوال لتجنُّب الاعتقاد الخاطئ بأنّ قيمة الخاصية غير قابلة للتغيير ولها نتيجة ثابتة مخزَّنة. (If6a13، b/127483380، b/257967987)

الإصدار 2.5.2

الإصدار 2.5.2

‫21 حزيران (يونيو) 2023

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

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

  • تم إصلاح مشكلة عدم التوافق مع kotlinx-metadata-jvm. (386d5c)
  • إصلاح مشكلة تتسبّب في ظهور خطأ في Room عند استخدامه في اختبار Robolectric (f79bea، b/274924903)

الإصدار 2.5.1

الإصدار 2.5.1

‫22 مارس 2023

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

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

  • تجنَّب وضع علامة في المربّع FrameworkSQLiteHelper لدليل قاعدة البيانات الرئيسي إذا كانت قاعدة البيانات مفتوحة. (5de86b8)
  • استخدِم عملية التحقّق isOpenInternal عند التحقّق مما إذا كانت قاعدة البيانات مفتوحة من قبل. (e91fb35)
  • أصبحت الآن متاحة معالجة أفضل لحالة إعادة الدخول في acquireTransactionThread() من Room. (219f98b). أثناء تعليق المعاملة، يستخدم Room سلسلة محادثات من منفّذ المعاملات، ويبدأ حلقة أحداث فيها، ويرسل عمليات قاعدة البيانات المعلقة إليها حتى يتم تضمينها بالكامل في روتين فرعي للمعاملات. من المتوقّع عادةً أن يكون سلسلة محادثات المعاملة مختلفة عن سلسلة المحادثات التي بدأت المعاملة، ولكن في بعض الحالات تكون هي نفسها. للتعامل مع حالات إعادة الدخول هذه، تمت إعادة تصميم withTransaction() لكي لا يعتمد بعد الآن على مهمة تحكّم، وبدلاً من ذلك سيتم تنفيذ حظر المعاملات المعلقة من داخل runBlocking في سلسلة عمليات المعاملات.

الإصدار 2.5.0

الإصدار 2.5.0

‫22 فبراير 2023

تم إصدار androidx.room:room-paging-guava:2.5.0 وandroidx.room:room-paging-rxjava2:2.5.0 وandroidx.room:room-paging-rxjava3:2.5.0. يتضمّن الإصدار 2.5.0 هذه التعديلات.

الإصدار 2.5.0

‫11 يناير 2023

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

التغييرات المهمة منذ الإصدار 2.4.0

  • تم تحويل جميع مصادر room-runtime من Java إلى Kotlin. يُرجى العِلم أنّه قد تواجه مشاكل في عدم توافق المصدر إذا كان الرمز البرمجي بلغة Kotlin بسبب تحويل المكتبة إلى Kotlin. على سبيل المثال، أحد التغييرات المعروفة غير المتوافقة هو أنّه في الإصدار InvalidationTracker، عليك الآن تعريف onInvalidate() في Observer ليكون لديك مَعلمة من النوع Set وليس MutableSet. علاوةً على ذلك، تم تحويل بعض طرق getter إلى خصائص تتطلّب بنية الوصول إلى الخصائص في ملفات Kotlin. يُرجى الإبلاغ عن الخطأ إذا كانت هناك أي حالات عدم توافق كبيرة.
  • تمت إضافة تعليق توضيحي جديد للاختصار، @Upsert، يحاول إدراج كيان عندما لا يكون هناك تعارض في التفرد أو تعديل الكيان إذا كان هناك تعارض. (I7aaab، b/241964353)
  • تمت إضافة عناصر جديدة لتصفّح الغرف room-paging-rxjava2 وroom-paging-rxjava3 وroom-paging-guava لتوفير الدعم في ميزة "تصفّح الغرف".
  • تمت إضافة واجهات برمجة تطبيقات لتوفير أسماء جداول المفاتيح والقيم لإزالة الغموض في @MapInfo (Icc4b5)

الإصدار 2.5.0-rc01

‫7 كانون الأول (ديسمبر) 2022

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

  • هذا الإصدار مطابق للإصدار 2.5.0-beta02.

الإصدار 2.5.0-beta02

‫9 نوفمبر 2022

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

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

  • إصلاح واجهات برمجة تطبيقات مختلفة تأخذ وسيطات طلب بحث من ثابتة (Array<Any?>) إلى متغيرة عكسيًا (Array<out Any?>) لتتوافق مع سلوك مصفوفة Java (b/253531073)

الإصدار 2.5.0-beta01

‫5 أكتوبر 2022

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

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

  • يجب أن يكون الحدّ الأدنى للإصدار المتوافق مع @Upsert هو المستوى 16 من واجهة برمجة التطبيقات. ويرجع ذلك إلى عدم القدرة على تحديد تعارض قيود المفتاح الأساسي في واجهات برمجة التطبيقات القديمة. (I5f67f، b/243039555)

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

  • تم إصلاح المشكلة المتمثّلة في تصدير الجداول الثانوية بشكلٍ غير صحيح إلى ملفات المخطط .json، ما يؤدي إلى تلفها. (I4f83b، b/246751839)

الإصدار 2.5.0-alpha03

‫24 أغسطس 2022

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

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

  • تمت إضافة تعليق توضيحي جديد للاختصار، @Upsert، يحاول إدراج كيان عندما لا يكون هناك تعارض في التفرد أو تعديل الكيان إذا كان هناك تعارض. (I7aaab، b/241964353)

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

  • سيُظهر Room الآن الخطأ SQLiteConstraintException بدلاً من IllegalStateException أثناء عملية التحقّق من قيود المفتاح الخارجي لعملية النقل التلقائي. (I328dd)
  • إصلاح تغيير غير متوافق في مصدر Kotlin للدالة getter أو خصائص getOpenHelper وgetQueryExecutor وgetTransactionExecutor (Iad0ac)

الإصدار 2.5.0-alpha02

‫1 يونيو 2022

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

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

  • تمت إضافة عناصر room-paging الجديدة room-paging-rxjava2 وroom-paging-rxjava3 وroom-paging-guava لتوفير الدعم في "تقسيم Room إلى صفحات".(41a1d4 وb/203666906) و(eb6098 وb/203666906) و(1b9ae4 وb/203666906)

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

  • تم تحويل جميع الرموز البرمجية في room-runtime من Java إلى Kotlin. (If2069، b/206859668)،(Ie4b55، b/206859668)، (I697ee، b/206859668)، (I96c25، b/206859668)

    ملاحظة: قد تواجه مشاكل عدم توافق المصدر بسبب تحويل المكتبة إلى Kotlin. إذا كان الرمز البرمجي مكتوبًا بلغة Kotlin ويستدعي الإصدار القديم من Room، يجب أن يتعامل الإصدار الجديد مع هذه الحالات. على سبيل المثال، أحد التغييرات المعروفة غير المتوافقة هو أنّه في الإصدار InvalidationTracker، عليك الآن تعريف onInvalidate() في Observer ليكون لديك مَعلمة من النوع Set وليس MutableSet.

  • تمت إضافة واجهات برمجة تطبيقات لتوفير أسماء جداول المفاتيح والقيم لإزالة الغموض في @MapInfo (Icc4b5)
  • حلّ مشكلة توافق المصدر لإعادة السماح باستخدام @Ignore في دوال الحصول على القيم في المواقع (Ifc2fb)

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

  • خوارزمية استدلالية لحلّ مشكلة الأعمدة المكرّرة سيحاول Room الآن حلّ الأعمدة الغامضة في طلب بحث متعدد الخرائط. يتيح ذلك ربط عبارات JOIN بشكل صحيح بجداول تحتوي على جداول تحمل الاسم نفسه بكائن بيانات النتائج. (I4b444، b/201306012، b/212279118)

الإصدار 2.5.0-alpha01

‫23 فبراير 2022

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

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

  • تم إصلاح مشكلة عدم فرض استخدام Room @IntDef في مصادر Kotlin. (I75f41، b/217951311)
  • تم إصلاح مشكلة في توافق المصدر لإعادة السماح باستخدام @Query في دوال الحصول على القيم الخاصة بالسمات. (I0a09b)
  • تم تحويل room-common من Java إلى Kotlin. (I69c48، b/206858235)

    ملاحظة: قد تواجه مشاكل عدم توافق المصدر لأنّه تم نقل بعض السمات إلى عناصر مصاحبة أثناء تحويل المكتبة إلى Kotlin. إذا كان الرمز البرمجي مكتوبًا بلغة Kotlin ويستدعي الإصدار القديم من Room، سيتطلّب الإصدار الجديد اللاحقة ".Companion" عند الوصول إلى هذه الخصائص.

  • تم تحويل عملية نقل بيانات Room من Java إلى Kotlin. (I2724b، b/206858622)
  • تم تحويل paging ملفًا ذا صلة في room-runtime من Java إلى Kotlin. (I82fc8، b/206859668)
  • تمت إضافة واجهة برمجة تطبيقات لقفل العمليات المتعددة واستخدامها على مستوى FrameworkSQLite*، وذلك لحماية إنشاء قواعد البيانات وعمليات نقل البيانات لأول مرة في العمليات المتعددة. (Ied267، b/193182592)

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

  • تمّت إضافة إمكانية استخدام الخصائص الداخلية في مصادر Kotlin. هذا تغيير طفيف في سلوك Room، حيث سيستخدم اسم المصدر للدوال أثناء مطابقتها مع السمات كدوال جلب/ضبط (في السابق، كان يستخدم اسم JVM للدالة الذي يختلف بالنسبة إلى الدوال/السمات الداخلية). إذا كنت تستخدم تعليقات توضيحية مخصّصة @JvmName لمطابقة دوال الجلب/الضبط مع الخصائص الخاصة، يُرجى التحقّق جيدًا من الرمز البرمجي الذي تم إنشاؤه بعد التحديث (If6531 وb/205289020).

الإصدار 2.4.3

الإصدار 2.4.3

‫27 يوليو 2022

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

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

  • تم إصلاح مشكلة كانت تتسبّب في عدم تعرّف Room على دوال التعليق في Kotlin 1.7 (b/236612358)

الإصدار 2.4.2

الإصدار 2.4.2

‫23 فبراير 2022

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

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

  • تم إصلاح مشكلة في إنشاء رمز لدالة تعليق @Transaction في Dao تتضمّن نصًا برمجيًا ينشئ طريقة واجهة تلقائية بسبب التجميع باستخدام -Xjvm-default=all أو ما يعادله. (Ia4ce5)
  • تم إصلاح الخطأ الذي يتسبب في إنشاء Room لرمز لطريقة طلب بحث من نوع الإرجاع Array<ByteArray>. (If086e، b/213789489)

الإصدار 2.4.1

الإصدار 2.4.1

‫12 يناير 2022

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

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

  • تمّت إضافة إمكانية استخدام الخصائص الداخلية في مصادر Kotlin. هذا تغيير طفيف في سلوك Room، حيث سيستخدم اسم المصدر للدوال أثناء مطابقتها مع السمات كدوال جلب/ضبط (في السابق، كان يستخدم اسم JVM للدالة الذي يختلف بالنسبة إلى الدوال/السمات الداخلية). إذا كنت تستخدم تعليقات توضيحية مخصّصة @JvmName لمطابقة دوال الجلب/الضبط مع الخصائص الخاصة، يُرجى التحقّق جيدًا من الرمز البرمجي الذي تم إنشاؤه بعد التحديث (If6531 وb/205289020).

الإصدار 2.4.0

الإصدار 2.4.0

15 كانون الأول (ديسمبر) 2021

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

التغييرات المهمة منذ الإصدار 2.3.0

  • عمليات نقل البيانات التلقائية: يوفّر Room الآن واجهة برمجة تطبيقات لإنشاء عمليات نقل البيانات تلقائيًا طالما تم تصدير المخططات. لإعلام Room بأنّه يجب إنشاء عملية نقل تلقائي للبيانات، يمكن استخدام السمة الجديدة @Database#autoMigrations لتحديد الإصدارات التي سيتم نقل البيانات منها وإليها تلقائيًا. عندما يحتاج Room إلى معلومات إضافية بشأن إعادة تسمية الجداول والأعمدة أو حذفها، يمكن أن يعرّف التعليق التوضيحي @AutoMigration فئة مواصفات تحتوي على هذه المدخلات. لمزيد من التفاصيل، يُرجى الاطّلاع على مستندات @AutoMigration.
  • تضمين التبعية في عمليات النقل التلقائي: @ProvidedAutoMigrationSpec هي واجهة برمجة تطبيقات جديدة للإشارة إلى أنّه سيتم توفير AutoMigrationSpec في وقت التشغيل من خلال RoomDatabase.Builder#addAutoMigrationSpec(). يتيح ذلك إطار عمل لتوفير مواصفات كهذه عند الحاجة إلى تبعيات معقّدة.
  • أداة مساعدة اختبار عملية النقل تتوافق مع عمليات النقل التلقائية: تم تعديل MigrationTestHelper في Room ليتوافق مع عمليات النقل التلقائية من خلال توفير واجهة برمجة تطبيقات جديدة للإنشاء تتلقّى فئة قاعدة البيانات قيد الاختبار. يسمح ذلك للأداة المساعدة بإضافة عمليات نقل البيانات التلقائية بالطريقة نفسها أثناء runMigrationsAndValidate.
  • إتاحة استخدام مكتبة Paging مع Room: تم إصدار androidx.room:room-paging، ما يتيح استخدام مكتبة Paging 3.0 مع طلبات البحث في Room التي تعرض androidx.paging.PagingSource.
  • طُرق الاستعلام العلائقية: تتيح Room الآن أنواع الإرجاع المتعددة الخرائط @Dao، وهي طرق مفيدة لعبارات JOIN. أنواع الخرائط المتعددة المتوافقة هي Map وSparseArray وLongSparseArray، بالإضافة إلى ImmutableMap وImmutableSetMultimap وImmutableListMultimap من Guava.

الإصدار 2.4.0-rc01

‫1 كانون الأول (ديسمبر) 2021

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

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

  • تعديل اعتماد Room على KSP إلى 1.6.0-1.0.1 لتوفير إمكانية استخدام Kotlin 1.6

الإصدار 2.4.0-beta02

‫17 نوفمبر 2021

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

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

  • أضفنا دعمًا لفئتَي SparseArray وLongSparseArray في ‎ @MapInfo. (Ic91a2b/138910317)

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

  • لقد أضفنا أداة تحليل جديدة باسم TypeConverter تراعي معلومات قابلية القيم للّتصفير في الأنواع. بما أنّ هذه المعلومات تتوفّر فقط في "متجر تطبيقات كوريا"، يتم تفعيلها تلقائيًا في هذا المتجر فقط. إذا تسبّب ذلك في أي مشاكل، يمكنك إيقافه من خلال تمرير room.useNullAwareTypeAnalysis=false إلى معالج التعليقات التوضيحية. في حال حدوث ذلك، يُرجى الإبلاغ عن خلل لأنّه ستتم إزالة هذا الخيار في المستقبل. باستخدام أداة التحليل الجديدة TypeConverter، يُنصح بتوفير TypeConverter غير فارغ فقط، لأنّ أداة التحليل الجديدة يمكنها تضمين عملية التحقّق من القيمة الفارغة. يُرجى العِلم أنّ هذا لا يؤثر في المستخدمين الذين يستعملون KAPT أو Java كمعالجات للتعليقات التوضيحية (على عكس KSP)، ولا يتضمّن معلومات حول إمكانية القيم الفارغة في الأنواع. (Ia88f9، b/193437407)
  • إصلاح الخطأ الذي يؤدي إلى تعذُّر تجميع Room مع ظهور خطأ SQL عند تعريف عنصر FTS لاستخدام أداة تحليل ICU (I00db9، b/201753224)
  • تم حلّ مشكلة في عمليات النقل التلقائي للبيانات تتعلّق بإضافة عمود جديد إلى عنصر مضمّن بين الإصدارات. (I5fcb1b/193798291)
  • لقد حللنا مشكلة متعلّقة بأنواع الإرجاع لطريقة الاستعلام العلائقية في استعلامات LEFT JOIN. في حال توفّر عملية ربط بين عنصر واحد وعدة عناصر، لن تتضمّن المجموعة التي يتم عرضها لمفتاح معيّن عنصر القيمة غير الصالح إذا لم يتم العثور عليه في المؤشر. في حال عدم العثور على قيم صالحة، سيتم ربط المفتاح بمجموعة فارغة. (Id5552b/201946438)
  • تم حلّ مشكلة النقل التلقائي للبيانات التي لم يتم فيها تجاهل كلمات SQLite الرئيسية في أسماء الأعمدة. (Idbed4b/197133152)

الإصدار 2.4.0-beta01

‫13 أكتوبر 2021

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

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

  • تم إصلاح مشكلة عدم إضافة أعمدة جديدة عند إجراء عمليات نقل تلقائية للبيانات، وذلك عندما يحتوي جدول آخر في عملية النقل التلقائي نفسها على عمود جديد بالاسم نفسه. (Ia5db5، b/200818663)
  • يستخدم تنفيذ PagingSource الذي تم إنشاؤه بواسطة room-paging الآن queryExecutor الذي تم تمريره من خلال RoomDatabase.Builder، وبالتالي يمكن إلغاؤه بدلاً من Dispatchers.IO سابقًا. (Iae259)

الإصدار 2.4.0-alpha05

‫29 سبتمبر 2021

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

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

  • تمّت إضافة أداة تحويل أنواع مضمَّنة لـ UUID. (I671e8، b/73132006)

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

  • تمت إضافة سمة جديدة إلى التعليق التوضيحي TypeConverters للسماح للمطوّرين بإيقاف المحوّلات المضمّنة لـ Enum وUUID. تكون أدوات التحويل هذه مفعَّلة تلقائيًا، ولكن يمكنك إيقافها لنطاق معيّن أو لقاعدة البيانات بأكملها. راجِع مستندات TypeConverters للحصول على التفاصيل. (36ae9e، b/195413406)

  • إتاحة استخدام مفاتيح/قيم غير POJO لأنواع الإرجاع Multimap في عناصر DAO من خلال التعليق التوضيحي @MapInfo (I4d704)

ستكون السمة @MapInfo مطلوبة عندما يكون عمود المفتاح أو القيمة في الخريطة من عمود واحد. ويمكنك الاطّلاع على المثال التالي:

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • اجعل room-paging عنصرًا إلزاميًا عند استخدام Paging3 مع Room. (Ieaffe)

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

  • تم إصلاح مشكلة عدم ترتيب نتائج طلبات البحث المتعددة الخرائط بشكل صحيح عندما يحتوي طلب البحث على عبارة ORDER BY لعمود من مفتاح الخريطة. (I6b887)

المساهمة الخارجية

  • تمت إضافة واجهة برمجة تطبيقات جديدة لتحديد ترتيب الفهرس في @Index. نشكر "نيكيتا زيلونكين". (I033fc)

الإصدار 2.4.0-alpha04

21 تموز (يوليو) 2021

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

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

  • تتيح Room الآن أنواع الإرجاع المتعدّدة الخرائط لطُرق @Dao، وهي مفيدة لعبارات JOIN. أنواع الخرائط المتعددة المتوافقة هي Map بالإضافة إلى ImmutableMap وImmutableSetMultimap وImmutableListMultimap من Guava.

    في ما يلي أمثلة على طلبات البحث التي تتضمّن خرائط متعددة:

    خريطة العلاقة بين عنصرين

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    خريطة علاقة بين عنصر واحد وعدّة عناصر (خريطة متعدّدة عادية)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    يمكن أيضًا تضمين نتيجة الخريطة المتعددة في أنواع العرض غير المتزامن المتوافقة، مثل LiveData أو Observable من Rx أو Flow من الروتينات الفرعية.

Room-Paging

  • تم إصدار androidx.room:room-paging، ما يتيح توفير توافق أصلي مع الإصدار 3.0 من مكتبة Paging لطلبات البحث في Room التي تعرض androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • يحلّ هذا العنصر محلّ عملية التنفيذ androidx.paging.PagingSource التي أنشأتها Room، ويتم إنشاؤه استنادًا إلى واجهات برمجة التطبيقات Paging 3.0. يحلّل التنفيذ الجديد لفئة PagingSource المفاتيح بشكل مختلف، لذا يجب أن يراعي أي مفتاح يتم توفيره يدويًا لفئة PagingSource في Room هذا التغيير في السلوك، بما في ذلك initialKey الذي يتم تمريره من خلال الدالة الإنشائية لفئة Pager. ستبدأ الصفحات في التحميل من Key، وسيكون Key هو العنصر الأول الذي يتم تحميله. يختلف هذا السلوك عن السلوك الحالي الذي يتم فيه التعامل مع LoadParams.Refresh.Key على أنّه موضع التمرير للمستخدم، ويتم تحميل العناصر قبل المفتاح وبعده.

  • العنصر الاصطناعي اختياري، وفي حال إيقافه، سيتم الرجوع إلى الدعم الحالي لمكتبة Paging 3.0 الذي تم تقديمه في Room 2.3. ومع ذلك، سيصبح هذا العنصر غير اختياري في الإصدارات المستقبلية للمستخدمين الذين يستعملون Room مع الإصدار 3.0 من مكتبة Paging. للموافقة على استخدام هذه الميزة، أضِف العنصر الجديد الخاص بتقسيم الذاكرة إلى صفحات في Room إلى مسار الفئة. إذا كنت تستخدم Gradle، يمكنك إضافة المقتطف التالي إلى ملف build.gradle:

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

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

  • تم إصلاح مشكلة في عمليات نقل البيانات التلقائية تتعلّق بالتعامل مع انتهاكات المفتاح الخارجي. (b/190113935)

الإصدار 2.4.0-alpha03

16 حزيران (يونيو) 2021

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

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

  • عدِّل MigrationTestHelper في Room لإتاحة عمليات النقل التلقائي من خلال توفير واجهة برمجة تطبيقات جديدة للدالة الإنشائية تتلقّى فئة قاعدة البيانات قيد الاختبار. يسمح ذلك للأداة المساعدة بإضافة عمليات نقل البيانات التلقائية بالطريقة نفسها أثناء runMigrationsAndValidate.

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

  • تم إصلاح مشكلة في مكتبة SQLite الأصلية في Room لتتوافق مع شرائح M1 من Apple. (b/174695268

  • تم إصلاح مشكلة عدم ظهور خطأ في Room عندما يكون نوع الإرجاع لدالة ‎ @Transaction هو Flow (I56ddd، b/190075899)

  • تم إصلاح مشكلة في عمليات النقل التلقائي للبيانات تتعلّق بالفهارس. b/177673291

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

  • يعتمد توفّر KSP في Room الآن على KSP 1.5.10-1.0.0-beta01. (1ecb11، b/160322705)

الإصدار 2.4.0-alpha02

‫5 أيار (مايو) 2021

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

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

  • @ProvidedAutoMigrationSpec هي واجهة برمجة تطبيقات جديدة للإشارة إلى أنّه سيتم توفير AutoMigrationSpec في وقت التشغيل من خلال RoomDatabase.Builder#addAutoMigrationSpec(). يتيح ذلك إطار عمل لتوفير مواصفات كهذه عند الحاجة إلى تبعيات معقّدة.

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

  • تم حلّ مشكلة في عمليات نقل البيانات التلقائية حيث لم تتم إعادة إنشاء @DatabaseView بشكلٍ صحيح.

المساهمة الخارجية

  • تم إصلاح مشكلة في JournalMode.TRUNCATE في Room حيث كان يتم استدعاء InvalidationTracker في بعض الأحيان بشكل غير صالح أو متأخر جدًا أو لا يتم استدعاؤه على الإطلاق. شكرًا Uli Bubenheimer | bubenheimer@users.noreply.github.com (b/154040286)

الإصدار 2.4.0-alpha01

‫21 أبريل 2021

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

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

  • عمليات نقل البيانات التلقائية: يوفّر Room الآن واجهة برمجة تطبيقات لإنشاء عمليات نقل البيانات تلقائيًا طالما تم تصدير المخططات. لإعلام Room بأنّه يجب إنشاء عملية نقل تلقائي للبيانات، يمكن استخدام السمة الجديدة @Database#autoMigrations لتحديد الإصدارات التي سيتم نقل البيانات منها وإليها تلقائيًا. عندما يحتاج Room إلى معلومات إضافية بشأن إعادة تسمية الجداول والأعمدة أو حذفها، يمكن أن يعرّف التعليق التوضيحي @AutoMigration فئة مواصفات تحتوي على هذه المدخلات. لمزيد من التفاصيل، يُرجى الاطّلاع على مستندات @AutoMigration.

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

  • تم إصلاح مشكلة عدم التحقّق من صحة defaultValue التي تتضمّن أقواسًا إضافية بشكل صحيح من خلال ميزة التحقّق من صحة المخطط في Room. b/182284899

الإصدار 2.3.0

الإصدار 2.3.0

‫21 أبريل 2021

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

التغييرات المهمة منذ الإصدار 2.2.0

  • توافق مدمج مع التعداد: سيستخدم Room الآن تلقائيًا محوّلاً من النوع "تعداد إلى سلسلة" والعكس إذا لم يتم توفير أي محوّل. إذا كان هناك محوّل أنواع لقيمة تعدادية، ستعطي Room الأولوية لاستخدامه بدلاً من المحوّل التلقائي.
  • استدعاء دالة معالجة طلب البحث: يوفّر Room الآن واجهة برمجة تطبيقات عامة لاستدعاء دالة معالجة طلب البحث RoomDatabase.QueryCallback، وذلك عندما تكون طلبات البحث على وشك التنفيذ، ما قد يكون مفيدًا في تسجيل عمليات تصحيح الأخطاء. يمكن ضبط رد الاتصال من خلال RoomDatabase.Builder#setQueryCallback().
  • التحسين المُسبَق: تتضمّن Room الآن واجهات برمجة تطبيقات لإنشاء قاعدة بيانات باستخدام قاعدة بيانات مُسبَقة القيمة تتم قراءتها من مصدر بيانات. ويتيح ذلك حالات مثل ضغط قاعدة بيانات الحزمة المُسبَقة باستخدام gzip.
  • محوّلات الأنواع المتوفّرة: تتضمّن Room الآن واجهات برمجة تطبيقات لتوفير مثيلات من محوّلات الأنواع، ما يتيح للتطبيق التحكّم في عملية تهيئتها. لوضع علامة على محوّل نوع سيتم توفيره لاستخدام Room، استخدِم التعليق التوضيحي الجديد ‎ @ProvidedTypeConverter.
  • التوافق مع RxJava3: تتوافق Room الآن مع أنواع RxJava3. على غرار RxJava2، يمكنك تعريف طرق DAO التي يكون نوع الإرجاع فيها Flowable وSingle وMaybe وCompletable. بالإضافة إلى ذلك، يتوفّر عنصر جديد androidx.room:room-rxjava3 لدعم RxJava3.
  • توافق الإصدار 3.0 من مكتبة Paging: ستتيح Room الآن إنشاء عمليات تنفيذ للطُرق التي تحمل التعليق التوضيحي @Query والتي يكون نوع الإرجاع فيها هو androidx.paging.PagingSource.

الإصدار 2.3.0-rc01

‫24 مارس 2021

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

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

  • تم إصلاح مشكلة كانت تمنع استهلاك طلبات Coroutine Flow التي أنشأتها Room في كتلة withTransaction معلّقة. (I797bf)

الإصدار 2.3.0-beta03

‫10 مارس 2021

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

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

  • تمت إضافة إمكانية التجميع التدريجي إلى KSP. (I031c1، b/176453350)

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى ظهور خطأ ANR عند إنشاء PagingSource في سلسلة التعليمات الرئيسية. (I42b74، b/181221318)
  • تم إصلاح مستوى رؤية @ExperimentalRoomApi ليصبح علنيًا بدلاً من مستوى رؤية الحزمة الخاص. (b/181356119)

المساهمة الخارجية

  • السماح لمكتبة Room بقبول نوع إرجاع POJO في طريقة DAO التي تحمل التعليق التوضيحي @Query عندما تحمل أيضًا التعليق التوضيحي @SkipQueryVerification ستبذل Room قصارى جهدها لتحويل نتيجة طلب البحث إلى نوع الإرجاع POJO بالطريقة نفسها التي يتم بها تنفيذ ذلك لطريقة DAO التي تمّت إضافة التعليق التوضيحي @RawQuery إليها. شكرًا لـ Markus Riegel | hey@marcorei.com. (I45acb)

الإصدار 2.3.0-beta02

‫18 شباط (فبراير) 2021

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

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

  • يتوافق Room الآن بشكل تجريبي مع أداة KSP لمعالجة رموز Kotlin.

    ‫KSP هي بديل عن KAPT لتشغيل أدوات معالجة التعليقات التوضيحية بشكل أصلي على برنامج الترجمة البرمجية Kotlin، ما يؤدي إلى تقليل أوقات الإنشاء بشكل كبير.

    لاستخدام Room مع KSP، يمكنك تطبيق المكوّن الإضافي KSP Gradle واستبدال إعداد kapt في ملف الإصدار بـ ksp. على سبيل المثال، استخدِم ksp 'androidx.room:room-compiler:2.3.0-beta02' بدلاً من kapt 'androidx.room:room-compiler:2.3.0-beta02'. لمزيد من التفاصيل، يُرجى الاطّلاع على مستندات KSP.

    يُرجى العِلم أنّه بما أنّ KSP لا يزال في مرحلة تجريبية، ننصحك بمواصلة استخدام KAPT لرمز الإنتاج. لا ينطبق تقليل أوقات الإنشاء إلا في حال عدم توفّر معالِجات أخرى تستخدم KAPT. راجِع b/160322705 للاطّلاع على المشاكل المعروفة.

الإصدار 2.3.0-beta01

‫27 يناير 2021

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

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

  • قواعد البيانات القابلة للإغلاق التلقائي: يمكن الآن لـ Room إغلاق قواعد البيانات التي لم يتم الوصول إليها بعد فترة زمنية معيّنة. هذه ميزة تجريبية ويمكن تفعيلها من خلال الاتصال بالرقم RoomDatabase.Builder#setAutoCloseTimeout(). هذه الميزة مفيدة للتطبيقات التي تتضمّن قواعد بيانات متعددة.

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

  • تم إصلاح مشكلة كانت تؤدي إلى إنشاء رمز باستخدام إحدى الاستراتيجيات فقط، مع تجاهل الاستراتيجية المحدّدة، وذلك في حال استخدام طرق Dao مع طرق @Update أو @Delete متعددة تتضمّن استراتيجيات تعارض مختلفة. (/I0b90d، b/176138543)

الإصدار 2.3.0-alpha04

16 كانون الأول (ديسمبر) 2020

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

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

  • توفّر مكتبة Room الآن واجهة برمجة تطبيقات عامة للدالة الخلفية RoomDatabase.QueryCallback، وذلك عندما تكون طلبات البحث على وشك التنفيذ، ما قد يكون مفيدًا لتسجيل عمليات تصحيح الأخطاء. يمكن ضبط رد الاتصال من خلال RoomDatabase.Builder#setQueryCallback(). (Iaa513، b/174478034، b/74877608)
  • سيتم الآن ضبط Room تلقائيًا على استخدام محوّل نوع Enum إلى String والعكس إذا لم يتم توفير أي محوّل. إذا كان هناك محوّل أنواع لقيمة تعدادية، ستعطي Room الأولوية لاستخدامه بدلاً من المحوّل التلقائي. (b/73132006)

مشكلة معروفة

  • إذا كان هناك محوّل أحادي الاتجاه للقراءة متاحًا بالفعل لفئة Enum، قد تستخدم Room عن طريق الخطأ المحوّل المضمّن من السلسلة إلى فئة Enum، وهو ما قد لا يكون مرغوبًا فيه. هذه مشكلة معروفة ويمكن حلّها من خلال تحويلها إلى محوّل ثنائي الاتجاه. يمكنك الاطّلاع على: b/175707691

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

  • تم إصلاح المشكلة التي كانت تؤدي إلى إيقاف Room بشكلٍ غير صحيح لمعالجة التعليقات التوضيحية التزايدية في إصدارات JDK الأحدث. (b/171387388)
  • تم إصلاح مشكلة في Room تتعلق بالعثور على الفئة التي تم إنشاؤها عند استخدام أدوات تحميل فئات متعددة. شكرًا على حلّ المشكلة "Serendipity | 892449346@qq.com"! (b/170141113)
  • تم إصلاح مشكلة كانت تتسبّب في إنشاء Room لرمز غير صحيح عندما كان @Dao في Kotlin يتضمّن فئة أساسية تكون الأنواع العامة فيها أنواعًا أولية في JVM. (b/160258066)

المساهمة الخارجية

  • سيتم الآن ضبط Room تلقائيًا على استخدام beginTransactionNonExclusive في حال تفعيل وضع WAL وكان مستوى واجهة برمجة التطبيقات 16 أو أكثر. شكرًا "أحمد أ." Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)

الإصدار 2.3.0-alpha03

‫14 أكتوبر 2020

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

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

  • تتضمّن Room الآن واجهات برمجة تطبيقات لتوفير مثيلات من محوّلات الأنواع، ما يتيح للتطبيق التحكّم في عملية إعدادها. لوضع علامة على محوّل نوع سيتم توفيره لاستخدام Room، استخدِم التعليق التوضيحي الجديد @ProvidedTypeConverter. شكرًا على مساهمة "mzgreen yairobbe@gmail.com". (Ie4fa5، b/121067210)

  • تتضمّن مكتبة Room الآن واجهات برمجة تطبيقات لإنشاء قاعدة بيانات باستخدام قاعدة بيانات مُعدّة مسبقًا يتم قراءتها من مصدر بيانات. ويتيح ذلك حالات مثل ضغط قاعدة بيانات الحزمة المُسبَقة باستخدام gzip. نشكر "أحمد الحلو ahmedre@gmail.com" (3e6792، b/146911060)

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

  • تمت إضافة عنصر مستهدَف ناقص إلى التعليق التوضيحي @ForeignKey لمنع استخدامه خارج التعليق التوضيحي @Entity. (Iced1e)

  • تم الآن إخفاء الحقل mCallbacks فيRoomDatabase.java. (d576cb، b/76109329)

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

  • تعديل على مستندات TypeConverters لتوضيح أنّه لا يمكن استخدام TypeConverters إلا لتحويل الأعمدة أو الحقول وليس الصفوف (I07c56، b/77307836)

  • تعديل على DaoProcessor لإصلاح خطأ في المترجم البرمجي في Dao مع نوع فائق عام باستخدام "أنواع أولية" في Kotlin (Ice6bb، b/160258066)

  • تعديل مستندات طرق إضافة/إزالة المراقب لتوضيح عملية إنشاء سلاسل المحادثات (Ifd1d9، b/153948821)

  • تم إصلاح مشكلة في Room تتعلّق بالتحقّق بشكل غير صحيح من صحة جداول البحث النصي الكامل التي حدّدت عمود rowid. (d62ebc، b/145858914)

المساهمات الخارجية

  • حلّ مشاكل اللغة المتعلقة بالأحرف الكبيرة والصغيرة في اللغة التركية (5746e3b/68159494

  • استبدِل ConcurrentHashMap داخل RoomDatabase بـ Collections.synchronizedMap() لتجنُّب حدوث مشاكل على Android Lollipop (d1cfc7، b/162431855)

  • أضِف دالة ردّ الاتصال onOpenPrepackagedDatabase لتنفيذها عند نسخ قاعدة بيانات مُعدّة مسبقًا. (I1ba74، b/148934423)

الإصدار 2.3.0-alpha02

‫22 تموز (يوليو) 2020

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

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

  • التوافق مع RxJava3: تتوافق Room الآن مع أنواع RxJava3. على غرار RxJava2، يمكنك تعريف طرق DAO التي يكون نوع الإرجاع فيها Flowable وSingle وMaybe وCompletable. بالإضافة إلى ذلك، يتوفّر عنصر جديد androidx.room:room-rxjava3 لدعم RxJava3. (b/152427884)

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

  • أصبح من الممكن الآن تعريف @TypeConverter في فئة Kotlin Object. (b/151110764)
  • تم الآن تفعيل خيار Room المعالجة التزايدية للتعليقات التوضيحية تلقائيًا. (b/112110217)

الإصدار 2.3.0-alpha01

‫10 يونيو 2020

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

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

  • توافق الإصدار 3.0 من مكتبة Paging: ستتيح Room الآن إنشاء عمليات تنفيذ للطُرق التي تحمل التعليق التوضيحي @Query والتي يكون نوع الإرجاع فيها هو androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

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

  • @RewriteQueriesToDropUnusedColumns هي تعليق توضيحي جديد ومناسب يتيح لـ Room إعادة كتابة عملية العرض "*" في طلب البحث، وذلك لإزالة الأعمدة غير المستخدَمة في النتيجة.
  • تم الآن إيقاف خيار المعالج room.expandProjection نهائيًا. استخدِم @RewriteQueriesToDropUnusedColumns كبديل لطلبات البحث التي تحسّن الغرف باستخدام عمليات عرض النجوم. يُرجى العِلم أنّ @RewriteQueriesToDropUnusedColumns لا يحلّ محلّ حلّ تعارض الأعمدة room.expandProjection المقدَّم فيما يتعلّق بأنواع العائد التي تحتوي على حقول @Embedded.

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

  • تم إصلاح الخطأ الذي كان يتسبّب في عدم رصد Room بشكل صحيح لإصدار JDK المستخدَم لتفعيل معالج التعليقات التوضيحية التزايدي. نشكر Blaz Solar (me@blaz.solar) (b/155215201)
  • تضمّن Room الآن تبعية ANTLR مع معالج التعليقات التوضيحية لتجنُّب تعارض الإصدارات مع المعالِجات الأخرى التي تستخدم ANTLR أيضًا. (b/150106190)

الإصدار 2.2.6

الإصدار 2.2.6

16 كانون الأول (ديسمبر) 2020

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

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

  • تم إصلاح المشكلة التي كانت تؤدي إلى إيقاف Room بشكلٍ غير صحيح لمعالجة التعليقات التوضيحية التزايدية في إصدارات JDK الأحدث. (b/171387388)

الإصدار 2.2.5

الإصدار 2.2.5

‫18 مارس 2020

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

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

  • اجعل MultiInstanceInvalidationService متوافقًا مع وضع "التمهيد المباشر". نشكر "Mygod contact-git@mygod.be" (b/148240967).
  • تم إصلاح خطأ كان يؤدي إلى حدوث تعطُّل عند تفعيل الإبطال المتعدد المثيلات وكانت قاعدة البيانات تحتوي على عنصر FTS. (b/148969394)
  • تم إصلاح مشكلة كانت تحدث عند تحميل المكتبات المجمّعة من رموز برمجية أصلية في معالج التعليقات التوضيحية Room، ما كان يؤدي إلى تعطُّل المحول البرمجي بسبب عمليات التجميع المتوازية. (b/146217083)

الإصدار 2.2.4

الإصدار 2.2.4

‫19 شباط (فبراير) 2020

تم إصدار الإصدارات androidx.room:room-common:2.2.4 وandroidx.room:room-compiler:2.2.4 وandroidx.room:room-guava:2.2.4 وandroidx.room:room-ktx:2.2.4 وandroidx.room:room-migration:2.2.4 وandroidx.room:room-runtime:2.2.4 وandroidx.room:room-rxjava2:2.2.4 وandroidx.room:room-testing:2.2.4. يتضمّن الإصدار 2.2.4 هذه التعديلات.

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

  • تم إصلاح مشكلة تعليق المعاملات التي كانت تحدث عند إلغاء الروتين الفرعي بسرعة قبل بدء المعاملة فعليًا. (b/148181325)
  • تم إصلاح مشكلة الاستخدام الخاطئ للتعليق التوضيحي ‎ @Generated عند الإنشاء باستخدام JDK 9. (b/146538330)
  • تم إصلاح المشكلة التي كانت تتسبب في إنشاء Room لرمز غير صحيح عندما كانت واجهة DAO في Kotlin تتضمّن دالة ملموسة. (b/146825845)

الإصدار 2.2.3

الإصدار 2.2.3

‫18 كانون الأول (ديسمبر) 2019

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

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى تعذُّر تحقّق Room من صحة قاعدة بيانات لم يتم نقل بياناتها مطلقًا وكانت تحتوي على قيمة تجزئة قديمة مع فهارس في المخطط. (b/139306173)

الإصدار 2.2.2

الإصدار 2.2.2

‫20 تشرين الثاني (نوفمبر) 2019

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

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى عرض Room لقيمة فارغة للعناصر ذات الصلة عند جمع علاقة فردية مع أكثر من 999 صف. (b/143105450)

الإصدار 2.2.1

الإصدار 2.2.1

‫23 تشرين الأول (أكتوبر) 2019

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

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

  • تم إصلاح الخطأ الذي كان يتسبّب في أن تحذّر مكتبة Room بشكل غير صحيح من CURSOR_MISMATCH عند تفعيل خيار المحول البرمجي expandProjection. (b/140759491)
  • تمت إضافة آلية إعادة المحاولة للتعامل مع المكتبة الأصلية غير المتوفّرة والمستخدَمة للتحقّق من طلبات البحث أثناء وقت التجميع.

الإصدار 2.2.0

الإصدار 2.2.0

‫9 أكتوبر 2019

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

التغييرات المهمة منذ الإصدار 2.1.0

  • قاعدة بيانات مُعدّة مسبقًا: تتوفّر الآن واجهتا برمجة تطبيقات جديدتان في RoomDatabase.Builder لإنشاء RoomDatabase باستخدام ملف قاعدة بيانات تمت تعبئته مسبقًا. يتم استخدام createFromAsset() عندما يكون ملف قاعدة البيانات الذي تمت تعبئته مسبقًا في مجلد مواد العرض الخاص بحزمة APK، بينما يتم استخدام createFromFile() عندما يكون الملف في موقع جغرافي عشوائي. تغيّر استخدامات واجهة برمجة التطبيقات هذه سلوك عمليات النقل المدمرة، إذ سيحاول Room أثناء عملية النقل الاحتياطية إعادة نسخ قاعدة البيانات التي تم ملؤها مسبقًا إذا كانت متاحة، وإلا سيعود إلى مجرد حذف جميع الجداول وإعادة إنشائها. b/62185732
  • القيم التلقائية للمخطط: يحتوي @ColumnInfo الآن على سمة جديدة defaultValue يمكن استخدامها لتحديد القيمة التلقائية لعمود. تشكّل القيم التلقائية جزءًا من مخطط قاعدة البيانات، وسيتم التحقّق من صحتها أثناء عمليات نقل البيانات إذا تم تحديدها. b/64088772
  • علاقات متعددة إلى متعددة: يحتوي @Relation الآن على السمة الجديدة associateBy، التي تقبل التعليق التوضيحي الجديد @Junction، ويُستخدم هذا التعليق للإشارة إلى علاقة يجب استيفاؤها من خلال جدول ربط (يُعرف أيضًا باسم جدول دمج). b/69201917
  • علاقات فردية: تم إلغاء القيود المفروضة على حقول POJO التي تمّت إضافة التعليقات التوضيحية إليها باستخدام @Relation لتكون من النوع List أو Set، ما يتيح تمثيل العلاقات ذات القيمة الواحدة. b/62905145
  • الكيان المستهدف: تحتوي تعليقات DAO التوضيحية @Insert و@Update و@Delete الآن على السمة الجديدة targetEntity التي تتيح تحديد الجدول المستهدف الذي من المفترض أن يعمل عليه إجراء DAO. يتيح ذلك أن تكون مَعلمات طرق DAO عبارة عن POJO عشوائية سيتم تفسيرها على أنّها كيانات جزئية. في الواقع، يتيح ذلك عمليات إدراج وحذف وتعديل جزئية. b/127549506
  • Coroutines Flow: يمكن أن تكون طرق DAO الآن من نوع الإرجاع Flow<T>.@Query ستعيد Flow المعروضة إصدار مجموعة جديدة من القيم إذا تم إبطال الجداول التي يتم رصدها في طلب البحث. يُعدّ تحديد نوع إرجاع Channel<T> لدالة DAO خطأً، بل ينصحك Room باستخدام Flow ثم استخدام الدوال المجاورة لتحويل Flow إلى Channel. b/130428884
  • معالج التعليقات التوضيحية التزايدي في Gradle: أصبحت Room الآن معالج تعليقات توضيحية في Gradle يعمل على عزل التعليقات التوضيحية، ويمكن تفعيل إمكانية الزيادة من خلال خيار المعالج room.incremental. يمكنك الاطّلاع على خيارات Room Compiler لمزيد من المعلومات. في حال مواجهة أي مشاكل، يُرجى الإبلاغ عن خطأ هنا. نخطّط لتفعيل ميزة "إمكانية الزيادة" تلقائيًا في إصدار ثابت مستقبلي. b/112110217
  • توسيع عمليات العرض: تمت إضافة خيار جديد تجريبي للمترجم room.expandProjection يؤدي إلى إعادة كتابة طلب بحث في Room باستخدام عملية عرض بنجمة لتضمين الأعمدة في نوع الإرجاع POJO فقط. على سبيل المثال، بالنسبة إلى طريقة DAO مع @Query("SELECT * FROM Song") التي تعرض POJO باسم SongIdAndTitle مع حقلَين فقط. بعد ذلك، ستعيد Room كتابة طلب البحث إلى SELECT id, title FROM Song بحيث يتم جلب الحد الأدنى من مجموعة الأعمدة لتلبية نوع الإرجاع. يؤدي ذلك بشكل أساسي إلى إزالة التحذير CURSOR_MISMATCH الذي يظهر عندما يعرض طلب البحث أعمدة إضافية لا تتطابق مع أي حقل في نوع POJO المعروض.

الإصدار 2.2.0-rc01

‫5 أيلول (سبتمبر) 2019

تم طرح androidx.room:room:2.2.0-rc01. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

لم يتم إجراء أي تغييرات عامة منذ إصدار Room 2.2.0-beta01.

الإصدار 2.2.0-beta01

‫22 أغسطس 2019

تم طرح androidx.room:room-*:2.2.0-beta01. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى توقّف طلب Coroutine Flow عن إعادة إصدار قيم جديدة بعد فترة زمنية معيّنة. (b/139175786)
  • تم إصلاح الخطأ الذي كان يتسبّب في عدم قبول Room لرمز التجزئة لمخطط قديم عند فتح قاعدة بيانات لم يتم نقلها منذ الإصدار 1.0 من Room، ما يؤدي إلى حدوث عطل في وقت التشغيل بسبب المخطط غير الصالح. (b/139306173)

الإصدار 2.2.0-alpha02

‫7 آب (أغسطس) 2019

تم طرح androidx.room:room-*:2.2.0-alpha02. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

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

  • Coroutines Flow: يمكن أن تكون طرق DAO الآن من نوع الإرجاع Flow<T>.@Query ستعيد Flow المعروضة إصدار مجموعة جديدة من القيم إذا تم إبطال الجداول التي يتم رصدها في طلب البحث. يُعدّ تحديد نوع إرجاع Channel<T> لدالة DAO خطأً، بل ينصحك Room باستخدام Flow ثم استخدام الدوال المجاورة لتحويل Flow إلى Channel. b/130428884
  • توسيع عمليات العرض: تمت إضافة خيار جديد تجريبي للمترجم room.expandProjection يؤدي إلى إعادة كتابة طلب بحث في Room باستخدام عملية عرض بنجمة لتضمين الأعمدة في نوع الإرجاع POJO فقط. على سبيل المثال، بالنسبة إلى طريقة DAO مع @Query("SELECT * FROM Song") التي تعرض POJO باسم SongIdAndTitle مع حقلَين فقط. بعد ذلك، ستعيد Room كتابة طلب البحث إلى SELECT id, title FROM Song بحيث يتم جلب الحد الأدنى من مجموعة الأعمدة لتلبية نوع الإرجاع. يؤدي ذلك بشكل أساسي إلى إزالة التحذير CURSOR_MISMATCH الذي يظهر عندما يعرض طلب البحث أعمدة إضافية لا تتطابق مع أي حقل في نوع POJO المعروض.
  • onDestructiveMigrate هي واجهة برمجة تطبيقات جديدة للردّ تمّت إضافتها إلى RoomDatabase.Callback عندما ينقل Room قاعدة بيانات بشكل غير قابل للتراجع. b/79962330

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

  • تم إصلاح خطأ كان يتسبّب في إنشاء Room لرمز غير صحيح باستخدام طريقة كأداة ضبط الحقل عندما يكون الحقل محميًا. b/136194628
  • تم إصلاح خطأ تسبّب في طرح InvalidationTracker لخطأ NPE في عملية ثانية عند تفعيل الإبطال المتعدد المثيلات وإيقاف خدمة الإبطال.b/137454915
  • تم إصلاح الخطأ الذي كان يتسبّب في عدم تحديد Room بشكل صحيح لنوع القيمة المعروضة من دالة تعليق موروثة تمّت إضافة التعليق التوضيحي @RawQuery إليها. b/137878827
  • تم تعديل الرمز الذي تم إنشاؤه لـ @Relation عندما يكون المفتاح ذو الصلة من النوع BLOB لاستخدام ByteBuffer يمكن مقارنته. b/137881998
  • تم إصلاح الخطأ الذي كان يتسبّب في ظهور رسالة خطأ في Room بشأن عدم توفّر أدوات ضبط في عناصر POJO المستخدَمة كمعلَمات كيان جزئي في @Insert و@Update و@Delete. b/138664463
  • تم إصلاح الخطأ الذي كان يتسبّب في ظهور رسالة خطأ في Room بشأن عدم توفّر دوال جلب وتعيين لعمود تم تجاهله من خلال @Entity عند استخدام فئة العنصر في بعض طرق DAO. b/138238182
  • تم إصلاح الخطأ الذي كان يتسبّب في عدم تحويل Room بشكل صحيح لوسيطات الربط المسماة إلى وسيطات موضعية، ما يؤدي إلى حدوث استثناء وقت التشغيل عند تنفيذ طلب بحث يتضمّن مَعلمات مُعاد استخدامها. b/137254857

الإصدار 2.2.0-alpha01

‫10 يوليو 2019

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

  • قاعدة بيانات مُعدّة مسبقًا: تتوفّر الآن واجهتا برمجة تطبيقات جديدتان في RoomDatabase.Builder لإنشاء RoomDatabase باستخدام ملف قاعدة بيانات تمت تعبئته مسبقًا. يتم استخدام createFromAsset() عندما يكون ملف قاعدة البيانات الذي تمت تعبئته مسبقًا في مجلد مواد العرض الخاص بحزمة APK، بينما يتم استخدام createFromFile() عندما يكون الملف في موقع جغرافي عشوائي. تغيّر استخدامات واجهة برمجة التطبيقات هذه سلوك عمليات النقل المدمرة، إذ سيحاول Room أثناء عملية النقل الاحتياطية إعادة نسخ قاعدة البيانات التي تم ملؤها مسبقًا إذا كانت متاحة، وإلا سيعود إلى مجرد حذف جميع الجداول وإعادة إنشائها. b/62185732
  • القيم التلقائية للمخطط: يحتوي @ColumnInfo الآن على سمة جديدة defaultValue يمكن استخدامها لتحديد القيمة التلقائية لعمود. تشكّل القيم التلقائية جزءًا من مخطط قاعدة البيانات، وسيتم التحقّق من صحتها أثناء عمليات نقل البيانات إذا تم تحديدها. b/64088772

    ملاحظة: إذا كان مخطط قاعدة البيانات يتضمّن قيمًا تلقائية، مثل تلك التي تمت إضافتها عبر ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z، وقرّرت تحديد قيم تلقائية عبر @ColumnInfo للأعمدة نفسها، قد تحتاج إلى توفير عملية نقل بيانات للتحقّق من صحة القيم التلقائية غير المفسّرة. لمزيد من المعلومات، اطّلِع على مقالة عمليات نقل البيانات في Room.

  • علاقات متعددة إلى متعددة: يحتوي @Relation الآن على السمة الجديدة associateBy، التي تقبل التعليق التوضيحي الجديد @Junction، ويُستخدم هذا التعليق للإشارة إلى علاقة يجب استيفاؤها من خلال جدول ربط (يُعرف أيضًا باسم جدول دمج). b/69201917
  • علاقات فردية: تم إلغاء القيود المفروضة على حقول POJO التي تمّت إضافة التعليقات التوضيحية إليها باستخدام @Relation لتكون من النوع List أو Set، ما يتيح تمثيل العلاقات ذات القيمة الواحدة. b/62905145
  • الكيان المستهدف: تحتوي تعليقات DAO التوضيحية @Insert و@Update و@Delete الآن على السمة الجديدة targetEntity التي تتيح تحديد الجدول المستهدف الذي من المفترض أن يعمل عليه إجراء DAO. يتيح ذلك أن تكون مَعلمات طرق DAO عبارة عن POJO عشوائية سيتم تفسيرها على أنّها كيانات جزئية. في الواقع، يتيح ذلك عمليات إدراج وحذف وتعديل جزئية. b/127549506
  • معالج التعليقات التوضيحية التزايدي في Gradle: أصبحت Room الآن معالج تعليقات توضيحية في Gradle يعمل على عزل التعليقات التوضيحية، ويمكن تفعيل إمكانية الزيادة من خلال خيار المعالج room.incremental. يمكنك الاطّلاع على خيارات Room Compiler لمزيد من المعلومات. في حال مواجهة أي مشاكل، يُرجى الإبلاغ عن خطأ هنا. نخطّط لتفعيل ميزة "إمكانية الزيادة" تلقائيًا في إصدار ثابت مستقبلي. b/112110217

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

  • لن يعود Room ينقل EmptySetResultException إلى معالج الأخطاء العام عندما يتم التخلص من بث Rx الخاص بطلب البحث قبل اكتمال طلب البحث. b/130257475
  • تم إصلاح الخطأ الذي كان يؤدي إلى عرض Room لرسالة خطأ غير صحيحة عندما لا تتضمّن دالة DAO المعلّقة والمزوّدة بالتعليق التوضيحي @RawQuery نوع إرجاع. b/134303897
  • لن تنشئ Room بعد الآن برامج تضمين DAO مع أنواع أولية. b/135747255

الإصدار 2.1.0

الإصدار 2.1.0

13 حزيران (يونيو) 2019

تم إصدار Room 2.1.0 بدون أي تغييرات منذ 2.1.0-rc01. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

التغييرات المهمة منذ الإصدار 2.0.0

  • البحث النصي الكامل: تتيح مكتبة Room الآن استخدام عناصر ذات جدول FTS3 أو FTS4. يمكن الآن إضافة التعليق التوضيحي @Fts3 أو @Fts4 إلى الصفوف التي تمّت إضافة التعليق التوضيحي @Entity إليها، وذلك للإشارة إلى صف يتضمّن جدول بحث نصي كامل مع ربط البيانات. تتوفّر خيارات البحث النصي الكامل (FTS) لإجراء المزيد من التخصيصات من خلال طرق التعليق التوضيحي.
  • طرق العرض: تتيح Room الآن تعريف فئة كطلب بحث مخزّن، يُعرف أيضًا باسم طريقة العرض، باستخدام التعليق التوضيحي @DatabaseView.
  • الكوروتينات: يمكن أن تكون طرق DAO الآن دوال تعليق. أدرِج room-ktx في العناصر التابعة للاستفادة من هذه الوظيفة. توفر أداة ktx أيضًا دالة الإضافة RoomDatabase.withTransaction لتنفيذ عمليات قاعدة البيانات ضِمن روتين فرعي.
  • Auto Value: يتيح Room الآن تعريف الفئات التي تمّت إضافة التعليقات التوضيحية إليها باستخدام AutoValue ككيانات وكائنات POJO. يمكن الآن تعريف التعليقات التوضيحية الخاصة بمكتبة Room، وهي @PrimaryKey و@ColumnInfo و@Embedded و@Relation، في الطرق المجردة لفئة تمّت إضافة التعليق التوضيحي auto إليها. يُرجى العِلم أنّه يجب أن تكون هذه التعليقات التوضيحية مصحوبة أيضًا بـ @CopyAnnotations لكي يفهمها Room بشكل صحيح.
  • إتاحة المزيد من عمليات التنفيذ غير المتزامن: أصبحت طرق DAO التي تمّت إضافة التعليقات التوضيحية @Insert أو @Delete أو @Update إليها، بالإضافة إلى @Query التي تحتوي على عبارات INSERT أو DELETE أو UPDATE، تتيح الآن أنواع الإرجاع Rx Completable وSingle وMaybe، ونوع الإرجاع ListenableFuture من Guava، ويمكن أن تكون أيضًا دوال تعليق.
  • enableMultiInstanceInvalidation هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder تتيح إبطال صحة البيانات في عدة مثيلات من RoomDatabase باستخدام ملف قاعدة البيانات نفسه.
  • fallbackToDestructiveMigrationOnDowngrade هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder لإعادة إنشاء قاعدة البيانات تلقائيًا في حال حدوث إصدار أقدم.
  • ignoredColumns هي واجهة برمجة تطبيقات جديدة في التعليق التوضيحي @Entity يمكن استخدامها لإدراج الحقول التي تم تجاهلها حسب الاسم.
  • سيستخدم Room الآن بشكلٍ صحيح الدالة الإنشائية الأساسية في Kotlin في فئات البيانات، ما يجنّبك الحاجة إلى تعريف السمات على أنّها vars.

الإصدار 2.1.0-rc01

‫29 مايو 2019

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

  • تم إصلاح خطأ في بدء Room قد يحدث بسبب إعدادات temp_store التي تم ضبطها مسبقًا. b/132602198
  • تم إصلاح تحذير بشأن استخدام علامات الاقتباس المزدوجة للمستخدمين الذين لديهم الإصدار 3.27.0 من SQLite والإصدارات الأحدث. b/131712640
  • تم إصلاح خطأ كان يتسبّب في تعطُّل InvalidationTracker عند إجراء عمليات تحقّق متعددة من الإبطال بالتوازي. b/133457594

الإصدار 2.1.0-beta01

7 أيار (مايو) 2019

تم إصدار androidx.room 2.1.0-beta01 بدون أي تغييرات منذ الإصدار 2.1.0-alpha07. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.

الإصدار 2.1.0-alpha07

‫25 أبريل 2019

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

  • تم تغيير وظيفة الإضافة RoomDatabase.withTransaction بحيث لم تعُد تقبل كتلة وظائف مع CoroutineScope كمستقبِل. يمنع ذلك تخطّي برنامج تضمين coroutineScope { } الإضافي المطلوب لتشغيل العناصر في حزمة المعاملات بشكل متزامن.

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى تعذُّر مطابقة Room مع TypeConverter لدالة Kotlin DAO تتضمّن مَعلمة من النوع Collection. b/122066791

الإصدار 2.1.0-alpha06

‫22 مارس 2019

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

  • تم الآن تسلسل طلبات البحث عن المعاملات غير المتزامنة، وبالتالي لن تستخدم Room أكثر من سلسلة محادثات واحدة لتنفيذ معاملات قاعدة البيانات. تمت إضافة RoomDatabase.Builder.setTransactionExecutor(Executor) للسماح بإعداد المنفّذ الذي سيتم استخدامه في المعاملات.
  • لن يغلّف RoomDatabase.runInTransaction(Callable) بعد الآن الاستثناءات التي تم التحقّق منها في RuntimeExceptions. b/128623748

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى توقّف أداة تتبُّع الإبطال عن مراقبة جدول محتوى في حال إضافة أدوات مراقبة لكل من جدول المحتوى وجدول البحث النصي الكامل (FTS) الخاص بالمحتوى الخارجي. b/128508917
  • تم تعديل Room قواعد SQLite لتتوافق مع الإصدار 3.24.0 من SQLite. b/110883668

الإصدار 2.1.0-alpha05

‫13 مارس 2019

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

  • تتيح لك دالة الإضافة RoomDatabase.withTransaction تنفيذ معاملات قاعدة البيانات بأمان ضمن روتين فرعي. تتوفّر وظائف إضافات الغرف مع إمكانية استخدام الروتينات الفرعية في العنصر room-ktx.
  • يمكن الآن أن تكون طرق DAO غير المجردة التي تمّت إضافة التعليق التوضيحي @Transaction إليها دوال تعليق. b/120241587

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

  • تمت إعادة تسمية العنصر room-coroutines إلى room-ktx باتّباع التسمية نفسها المستخدَمة مع عناصر androidx الأخرى.
  • تم إيقاف beginTransaction وsetTransactionSuccessful وendTransaction في RoomDatabase نهائيًا، وتم استبدالها بـ runInTransaction ووظيفة الإضافة room-ktx withTransaction.

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى حذف وسيطات أداة التقسيم إذا كانت أداة التقسيم المستخدَمة هي SIMPLE. b/125427014
  • تم إصلاح الخطأ الذي كان يتسبّب في عدم تمكُّن Room من تحديد الدوال المعلقة بشكل صحيح مع المَعلمات التي يكون نوعها فئة داخلية. b/123767877
  • تم إصلاح الخطأ الذي كانت فيه طريقة @Query DAO المؤجّلة التي تتضمّن عبارات INSERT أو UPDATE أو DELETE تُعدّ طلب البحث بشكل نشط في سلسلة التعليمات الرئيسية. b/123695593
  • تم إصلاح أخطاء متعدّدة كان فيها Room ينشئ رمزًا غير صحيح لبعض دوال التعليق. b/123466702 وb/123457323
  • تم إصلاح الخطأ الذي كان يتسبب في عدم إيقاف الاستخدام المتوقّف نهائيًا للطُرق بشكلٍ صحيح في الرمز البرمجي الذي تم إنشاؤه. b/117602586
  • تم تعديل إصدار Room الذي يعتمد على androidx.sqlite إلى 1.0.2، وهو يتضمّن إصلاحات للتعامل بشكل صحيح مع قواعد البيانات التالفة. b/124476912

المشاكل المعروفة

  • يعتمد الإصدار 2.1.0-alpha05 من Room على العنصر kotlinx-metadata-jvm الذي لا يتوفّر حاليًا في مستودع Maven المركزي (KT-27991). يمكن حلّ هذه التبعية من خلال إضافة maven { url "https://kotlin.bintray.com/kotlinx/" } إلى مستودعات مشروعك.

الإصدار 2.1.0-alpha04

‫25 يناير 2019

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

  • يمكن الآن أن تعرض طرق DAO التي تمّت إضافة التعليقات التوضيحية إليها باستخدام @Query والتي تحتوي على عبارات INSERT أو UPDATE أو DELETE أنواعًا غير متزامنة Single وMayble وCompletable وListenableFuture. بالإضافة إلى ذلك، يمكن أن تكون هذه الدوال دوال تعليق. b/120227284

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

  • سيُظهر Room الآن خطأً إذا كانت إحدى طرق DAO غير المجردة التي تمّت إضافة التعليق التوضيحي @Transaction إليها تعرض نوعًا غير متزامن، مثل Single أو Mayble أو Completable أو LiveData أو ListenableFuture. بما أنّ المعاملات محصورة في سلسلة محادثات، يتعذّر حاليًا على Room بدء معاملة وإنهائها حول دالة قد تنفّذ طلبات بحث في سلاسل محادثات مختلفة. b/120109336
  • تم إيقاف OnConflictStrategy.FAIL وOnConflictStrategy.ROLLBACK نهائيًا لأنّهما لا يعملان على النحو المطلوب مع روابط SQLite الحالية في Android. b/117266738@Deprecated

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

  • تم إصلاح خطأ كان يتسبّب في عدم استخدام Room بشكلٍ صحيح لـ TypeConverter الخاص بنوع الإرجاع إذا كانت طريقة DAO هي دالة تعليق. b/122988159
  • تم إصلاح الخطأ الذي كان يؤدي إلى أن يحدّد Room بشكل غير صحيح الدوال المعلقة الموروثة على أنّها غير معلقة. b/122902595
  • تم إصلاح الخطأ الذي كان يتسبب في إنشاء Room لرمز غير صحيح عندما يكون الحقل @Embedded في فئة رئيسية ويتم استخدامه في عدة فئات فرعية. b/121099048
  • تم إصلاح مشكلة كانت تؤدي إلى حدوث توقّف تام في قاعدة البيانات عند استدعاء دوال تعليق DAO بين beginTransaction() وendTransaction(). b/120854786

الإصدار 2.1.0-alpha03

‫4 كانون الأول (ديسمبر) 2018

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

  • تتلقّى خدمة البحث النصي الكامل (FTS) tokenizer في @Fts3/@Fts4 الآن سلسلة بدلاً من تعداد. يتيح ذلك استخدام أدوات تقسيم الرموز المميزة المخصّصة في Room. لا تزال أدوات تقسيم الكلمات المضمّنة معرَّفة في FtsOptions كثوابت سلسلة. b/119234881

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

  • الكوروتينات: يمكن أن تكون طرق DAO الآن دوال تعليق. لإتاحة استخدام الدوال المعلقة في Room، تم إصدار عنصر جديد، وهو room-coroutines. b/69474692
  • تتيح الآن طرق الوصول إلى البيانات (DAO) التي تمّت إضافة التعليقات التوضيحية @Insert أو @Delete أو @Update إليها استخدام ListenableFuture كنوع إرجاع. b/119418331

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

  • تم إصلاح الخطأ الذي كانت تحاول فيه Room بشكل غير صحيح العثور على دالة إنشاء تتضمّن أعمدة في السمة ignoredColumns من @Entity. b/119830714
  • تم إصلاح الخطأ الذي كان يتسبب في عدم وضع علامة "نهائي" على مَعلمات طريقة الوصول إلى البيانات (DAO) في التنفيذ الذي تم إنشاؤه. b/118015483
  • تم إصلاح الخطأ الذي كان يؤدي إلى تعطُّل معالج Room عند الإبلاغ عن خطأ في طلب بحث يتضمّن رموزًا خاصة. b/119520136
  • تم إصلاح الخطأ الذي كان يؤدي إلى رفض Room لتنفيذات Collection المختلفة الأخرى كوسيطات لتعبير IN. b/119884035
  • تم إصلاح خطأ كان يؤدي إلى جمع البيانات غير الضرورية من LiveData التي يتم عرضها من Room عند مراقبتها إلى الأبد، ما يؤدي إلى توقّفها عن إرسال بيانات جديدة. b/74477406
  • تم تعديل قفل الإغلاق في RoomDatabase لتقليل تزايد الطلب على دالة الاستبعاد المتبادل. b/117900450

الإصدار 2.1.0-alpha02

‫30 أكتوبر 2018

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

  • تمت إضافة إمكانية الإشارة إلى @DatabaseView في @Relation. b/117680932

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى تنفيذ Room لعمليات الإدخال والإخراج على القرص في سلسلة التعليمات الرئيسية عند الاشتراك والتخلص من نوع الإرجاع Rx. b/117201279
  • تم إصلاح الخطأ الذي كان يتسبّب في تعذُّر عثور Room على محوّل أنواع مناسب لحقل في فئة كيان Kotlin. b/111404868
  • تم إصلاح الخطأ الذي كان يتسبب في إنشاء Room لرمز غير صحيح لتنفيذ واجهة DAO تحتوي على طريقة تلقائية في Kotlin بدون وسيطات. b/117527454
  • تم تعديل Room محلّل قواعد SQLite، وتم إصلاح مشكلة في الأداء كانت تؤدي إلى زيادة مدة الإنشاء. b/117401230

الإصدار 2.1.0-alpha01

‫8 أكتوبر 2018

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

  • البحث النصي الكامل: تتيح مكتبة Room الآن استخدام عناصر ذات جدول FTS3 أو FTS4. يمكن الآن إضافة التعليق التوضيحي @Fts3 أو @Fts4 إلى الفئات التي تمّت إضافة التعليق التوضيحي @Entity إليها، وذلك للإشارة إلى فئة تتضمّن جدول بحث نصي كامل مع ربط. تتوفّر خيارات البحث النصي الكامل لمزيد من التخصيص من خلال طرق التعليق التوضيحي. b/62356416
  • طرق العرض: تتيح Room الآن تعريف فئة كطلب بحث مخزَّن، يُعرف أيضًا باسم طريقة العرض باستخدام التعليق التوضيحي ‎ @DatabaseView. b/67033276
  • Auto Value: يتيح Room الآن تعريف الفئات التي تمّت إضافة تعليقات توضيحية إليها باستخدام AutoValue ككيانات وكائنات Java عادية قديمة (POJO). يمكن الآن تعريف التعليقات التوضيحية الخاصة بمكتبة Room، وهي @PrimaryKey و@ColumnInfo و@Embedded و@Relation، في الطرق المجردة لفئة تمّت إضافة التعليق التوضيحي auto value إليها. يُرجى العِلم أنّه يجب أن تكون هذه التعليقات التوضيحية مصحوبة أيضًا بـ @CopyAnnotations لكي يفهمها Room بشكل صحيح. b/62408420
  • إتاحة أنواع إرجاع Rx الإضافية: تتيح الآن طرق DAO التي تمّت إضافة التعليقات التوضيحية @Insert أو @Delete أو @Update إليها أنواع إرجاع Rx Completable وSingle<T> وMaybe<T>. b/63317956
  • الأنواع غير القابلة للتغيير مع @Relation: كان Room يتطلّب سابقًا أن تكون الحقول التي تحمل التعليق التوضيحي @Relation قابلة للضبط، ولكن يمكن الآن أن تكون مَعلمات دالة إنشاء.
  • enableMultiInstanceInvalidation: هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder تتيح إبطال البيانات في عدة مثيلات من RoomDatabase باستخدام ملف قاعدة البيانات نفسه. تعمل آلية إبطال الصلاحية المتعددة المثيلات هذه أيضًا على مستوى عمليات متعددة. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder لإعادة إنشاء قاعدة البيانات تلقائيًا في حال حدوث إصدار أقدم. b/110416954
  • ignoredColumns: هي واجهة برمجة تطبيقات جديدة في التعليق التوضيحي @Entity يمكن استخدامها لإدراج الحقول التي تم تجاهلها حسب الاسم. مفيد لتجاهل الحقول الموروثة في أحد العناصر. b/63522075

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

  • تمت إعادة تسمية mCallback وmDatabase في RoomDatabase إلى @Deprecated، وستتم إزالتهما في الإصدار الرئيسي التالي من Room. b/76109329

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

  • تم إصلاح مشكلتَين كانتا تتسبّبان في عدم استعادة Room بشكلٍ صحيح من قاعدة بيانات تالفة أو عملية نقل بيانات غير صالحة أثناء عملية التهيئة. b/111504749 وb/111519144
  • سيستخدم Room الآن الدالة الإنشائية الأساسية في Kotlin بشكلٍ سليم في فئات البيانات، ما يغنيك عن تعريف الحقول على أنّها vars. b/105769985

الإصدار 2.0.0

الإصدار 2.0.0

‫1 أكتوبر 2018

تم إصدار androidx.room 2.0.0 بدون أي تغييرات منذ الإصدار 2.0.0-rc01.

الإصدار 2.0.0-rc01

‫20 سبتمبر 2018

تم إصدار androidx.room 2.0.0-rc01 بدون أي تغييرات منذ الإصدار 2.0.0-beta01.

الإصدار 2.0.0-beta01

‫2 يوليو 2018

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

  • تمت إضافة RoomDatabase.Builder.setQueryExecutor() للسماح بتخصيص مكان تنفيذ طلبات البحث
  • تمت إضافة دعم RxJava2 Observable
  • أصبحت عمليات تنفيذ DAO وقاعدة البيانات التي تم إنشاؤها نهائية

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

  • تحديد اسم الفئة/الحقل في الخطأ "تعذّر العثور على أداة الحصول على الحقل" b/73334503
  • تم إصلاح توافق RoomOpenHelper مع الإصدارات القديمة من Room b/110197391

التبعيات قبل AndroidX

بالنسبة إلى إصدارات Room السابقة لإصدار AndroidX، أدرِج التبعيات التالية:

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

الإصدار 1.1.1

الإصدار 1.1.1

‫19 حزيران (يونيو) 2018

الغرفة 1.1.1 مماثلة للغرفة 1.1.1-rc1.

الإصدار 1.1.1-rc1

‫16 أيار (مايو) 2018 ننصحك بشدة باستخدام Room 1.1.1-rc1 بدلاً من 1.1.0 إذا كنت تستخدم عمليات نقل البيانات.

تم إصلاح الخطأ الذي كان يؤدي إلى عدم تعامل Room مع عملية الإعداد بعد نقل البيانات بشكلٍ صحيح b/79362399

الإصدار 1.1.0

الإصدار 1.1.0-beta3

‫19 أبريل 2018

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

  • إصلاح خطأ في التجميع عندما يشير كائن POJO في Kotlin إلى كيان علاقة تم تعريفه في Java b/78199923

الإصدار 1.1.0-beta2

‫5 أبريل 2018

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

  • تم إصلاح خطأ مهم في عمليات تنفيذ Room Rx Single وMaybe، حيث كان يتم إعادة استخدام طلب البحث قبل الوقت المحدد، ما يؤدي إلى حدوث مشاكل عند إضافة أكثر من مراقب واحد إلى مثيلات Single أو Maybe التي تم عرضها. b/76031240

  • لن يؤدي استدعاء [RoomDatabase.clearAllTables][ref-clearAllTables] إلى VACUUM قاعدة البيانات إذا تم استدعاؤه داخل إحدى المعاملات. b/77235565

الإصدار 1.1.0-beta1

‫21 مارس 2018

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

  • استنادًا إلى الملاحظات الواردة من مراجعة واجهة برمجة التطبيقات، لم يعُد @RawQuery يقبل تمرير String كمعلَمة طلب البحث. عليك استخدام [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (راجِع [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] لإنشاء مثيل من [SupportSQLiteQuery][ref-SupportSQLiteQuery] بسهولة مع إمكانية استخدام الوسيطات).
  • تقبل الآن طريقة [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] في RoomDatabase.Builder القيمة vararg int بدلاً من vararg Integer.

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

  • تحاول الدالة [RoomDatabase.clearAllTables][ref-clearAllTables] الآن إعادة المساحة إلى نظام التشغيل من خلال ضبط نقطة التحقّق من الكتابة إلى السجلّ (WAL) وVACUUM قاعدة البيانات.
  • يقبل [@RawQuery][ref-RawQuery] الآن أي Pojo للسمة observedEntities طالما أنّ Pojo يشير إلى كيان واحد أو أكثر من خلال حقول Embedded أو Relation. b/74041772
  • تقسيم المحتوى إلى صفحات: تعالج الآن عملية تنفيذ DataSource في Room التبعيات المتعددة الجداول (مثل العلاقات وعمليات الربط) بشكل صحيح. في السابق، كان ذلك يؤدي إلى عدم ظهور نتائج جديدة أو تعذُّر تجميعها. b/74128314

الإصدار 1.1.0-alpha1

‫22 يناير 2018

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

  • RawQuery: تتيح واجهة برمجة التطبيقات الجديدة هذه طرق @Dao تلقّي SQL كمعلَمة طلب بحث b/62103290، b/71458963
  • fallBackToDestructiveMigrationsFrom: تتيح واجهة برمجة التطبيقات الجديدة هذه في RoomDatabase.Builder التحكّم بشكل أكثر دقة في إصدارات المخطط الأولي التي يُسمح بعمليات نقل البيانات المدمرة منها (مقارنةً بـ fallbackToDestructiveMigration) b/64989640
  • لا تتوافق مكتبة Room الآن إلا مع واجهات برمجة التطبيقات الأحدث الخاصة بالتقسيم إلى صفحات (الإصدار alpha-4 والإصدارات الأحدث)، وتم إيقاف التوافق مع LivePagedListProvider نهائيًا. لاستخدام الإصدار الأوّلي الجديد من Room، عليك استخدام الإصدار alpha-4 أو إصدار أحدث من مكتبة Paging، والتبديل من LivePagedListProvider إلى LivePagedListBuilder إذا لم يسبق لك ذلك.

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

  • تحسين مستوى التوافق مع أنواع Kapt في Kotlin: b/69164099
  • لم يعُد ترتيب الحقول يؤدي إلى إبطال المخطط. b/64290754