Room
| آخر الأخبار | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأوّلي |
|---|---|---|---|---|
| 22 أكتوبر 2025 | 2.8.3 | - | - | - |
تحديد الاعتماديات
لإضافة اعتمادية على Room، يجب تضمين مستودع Google Maven في مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
تشمل التبعيات الخاصة بمكتبة Room اختبار عمليات نقل البيانات في Room وRoom RxJava.
أضِف الاعتماديات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:
Kotlin
dependencies { val room_version = "2.8.3" 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.3" 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 Plugin
في الإصدار 2.6.0 والإصدارات الأحدث من Room، يمكنك استخدام Room Gradle Plugin لضبط خيارات برنامج الترجمة البرمجية في 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 Plugin الذي أتاح إمكانية ضبط هذا الخيار باستخدام الإضافة 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.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 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
إصلاح الأخطاء
- إصلاح مشكلة تداخل في التنفيذ حيث لا تعرض 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 هذه التعديلات.
إصلاح الأخطاء
- إصلاح مشكلة عدم تعامل "عمليات النقل التلقائي" بشكل صحيح مع عمود جديد في جدول FTS (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 الآن الإصدار 2.0 من لغة Kotlin، وسيتطلّب من المشاريع أيضًا أن يتم تجميعها باستخدام الإصدار 2.0 من Kotlin أو إصدار لغة مكافئ أو أحدث. (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لتقسيم الغرفة إلى صفحات. (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(). في ما يلي الاستراتيجية الجديدة:
تحديد عنصر expect ينفّذ
RoomDatabaseConstructorexpect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>اربط العنصر ببيان
@Databaseباستخدام@ConstructedBy@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabaseإنشاء مثيل قاعدة بيانات جديد بدون تمرير وسيطة المصنع
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) - تمّت إضافة دعم لأهداف
linuxArm64Kotlin 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)
- تم إصلاح المشكلة المتمثّلة في تعذُّر العثور على تنفيذ قاعدة البيانات الذي تم إنشاؤه إذا لم يكن للفئة التي تمّت إضافة التعليق التوضيحي
@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 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(). لمزيد من المعلومات حولSQLiteDriver 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 هذه التعديلات.
إصلاح الأخطاء
- تم حلّ مشكلة في الرمز البرمجي الذي تم إنشاؤه، حيث تم ضبط القيمة التلقائية لأعمدة Double في
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\>
- تمت إضافة العنصر الجديد الخاص بمكوّن Room الإضافي في Gradle إلى Room باستخدام المعرّف
androidx.room، ما يحلّ العديد من المشاكل الحالية في Room بشأن توفير مدخلات ومخرجات المخططات عبر خيارات معالج التعليقات التوضيحية في Gradle. لمزيد من التفاصيل، يُرجى الرجوع إلى ملاحظات إصدار Room 2.6.0-alpha02. - تتوفّر الآن فئات القيم في عناصر Room لبرنامج KSP. (4194095)
- أصبحت أنواع الإرجاع "خريطة متداخلة" في دوال 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 هذه التعديلات.
الميزات الجديدة
تغييرات واجهة برمجة التطبيقات
- تم إنشاء تعليق توضيحي جديد للنوع يُسمى
@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
يحتوي هذا الإصدار الجديد على عنصر جديد لبرنامج Room Gradle الإضافي يحمل المعرّف 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 Paging.(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 الآن حلّ الأعمدة الغامضة في طلب بحث multimap. يتيح ذلك ربط عبارات 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. - إتاحة استخدام أداة "تقسيم النتائج إلى صفحات" في Room: تم إصدار
androidx.room:room-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 مع طلبات بحث 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 مع مكتبة Paging 3.0. للموافقة على استخدام هذه الميزة، أضِف العنصر الجديد الخاص بتقسيم الذاكرة إلى صفحات في 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 الأولوية لاستخدامه بدلاً من المحوّل التلقائي.
- Query Callback: يوفّر 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إليها. نشكر "ماركوس ريغل | 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) - سيتم الآن استخدام محوّل النوع Enum إلى String والعكس تلقائيًا في Room في حال عدم توفير أي محوّل. إذا كان هناك محوّل أنواع لقيمة تعدادية، ستعطي Room الأولوية لاستخدامه بدلاً من المحوّل التلقائي. (b/73132006)
مشكلة معروفة
- إذا كان هناك محوّل أحادي الاتجاه للقراءة متاحًا بالفعل لفئة Enum، قد تستخدم Room عن طريق الخطأ المحوّل المضمّن من String إلى 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)
المساهمات الخارجية
حلّ مشاكل اللغة المتعلقة بالأحرف الكبيرة والصغيرة في اللغة التركية (5746e3)، b/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)
- تم إصلاح مشكلة كانت تحدث عند تحميل المكتبات المجمّعة من رموز برمجية أصلية في SQLite في معالج التعليقات التوضيحية في 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: يمكن أن تكون طرق
@QueryDAO الآن من نوع الإرجاعFlow<T>. ستعيد Flow المعروضة إصدار مجموعة جديدة من القيم إذا تم إبطال الجداول التي يتم رصدها في طلب البحث. يُعدّ تحديد نوع إرجاعChannel<T>لدالة DAO خطأً، بل ينصحك Room باستخدامFlowثم استخدام الدوال المجاورة لتحويلFlowإلىChannel. b/130428884 - معالج التعليقات التوضيحية التزايدي في Gradle: أصبحت Room الآن معالج تعليقات توضيحية في Gradle، ويمكن تفعيل إمكانية الزيادة من خلال خيار المعالج
room.incremental. لمزيد من المعلومات، يُرجى الاطّلاع على خيارات Room Compiler. في حال مواجهة أي مشاكل، يُرجى الإبلاغ عن خطأ هنا. نخطّط لتفعيل ميزة "الزيادة" تلقائيًا في إصدار ثابت مستقبلي. b/112110217 - توسيع عمليات العرض: تمت إضافة خيار جديد تجريبي للمترجم
room.expandProjectionيؤدي إلى إعادة كتابة طلب بحث باستخدام عملية عرض بنجمة لتضمين الأعمدة في نوع الإرجاع 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يؤدي إلى إعادة كتابة طلب بحث باستخدام عملية عرض بنجمة لتضمين الأعمدة في نوع الإرجاع 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 - لن تنشئ الغرفة بعد الآن برامج وسيطة للوصول إلى البيانات (DAO) تتضمّن أنواعًا أولية. b/135747255
الإصدار 2.1.0
الإصدار 2.1.0
13 حزيران (يونيو) 2019
تم إصدار Room 2.1.0 بدون أي تغييرات منذ 2.1.0-rc01. يمكنك الاطّلاع على التعديلات في هذا الإصدار هنا.
التغييرات المهمة منذ الإصدار 2.0.0
- البحث النصي الكامل: تتيح مكتبة Room الآن استخدام عناصر ذات جدول بحث نصي كامل 3 أو 4. يمكن الآن إضافة التعليق التوضيحي
@Fts3أو@Fts4إلى الصفوف التي تمّت إضافة التعليق التوضيحي@Entityإليها، وذلك للإشارة إلى صف يتضمّن جدول بحث نصي كامل مع ربط البيانات. تتوفّر خيارات البحث النصي الكامل لمزيد من التخصيص من خلال طرق التعليق التوضيحي. - طرق العرض: تتيح 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، تتيح الآن أنواع الإرجاع RxCompletableو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 مع إمكانية استخدام الروتينات الفرعية في العنصرroom-ktx. - يمكن الآن أن تكون طرق DAO غير المجردة التي تمّت إضافة التعليق التوضيحي
@Transactionإليها دوال تعليق. b/120241587
التغييرات في واجهة برمجة التطبيقات / السلوك
- تمت إعادة تسمية العنصر
room-coroutinesإلىroom-ktxباتّباع التسمية نفسها المستخدَمة مع عناصر androidx الأخرى. - تم إيقاف
beginTransactionوsetTransactionSuccessfulوendTransactionفيRoomDatabaseنهائيًا لصالحrunInTransactionووظيفة الإضافةroom-ktxwithTransaction.
إصلاح الأخطاء
- تم إصلاح الخطأ الذي كان يؤدي إلى حذف وسيطات أداة تقسيم الكلمات إذا كانت أداة تقسيم الكلمات المستخدَمة هي SIMPLE. b/125427014
- تم إصلاح الخطأ الذي كان يتسبّب في عدم تمكُّن Room من تحديد الدوال المعلقة التي تتضمّن مَعلمات من النوع فئة داخلية بشكل صحيح. b/123767877
- تم إصلاح الخطأ الذي كانت فيه طريقة
@QueryDAO المؤجّلة التي تتضمّن عبارات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مع أنواع إرجاع RxCompletableو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
إصلاح الأخطاء
تم إصلاح خطأ حرج في عمليات تنفيذ
RoomRxSingleو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