Room
آخر الأخبار | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأوّلي |
---|---|---|---|---|
16 يوليو 2025 | 2.7.2 | - | - | 2.8.0-alpha01 |
تعريف التبعيات
لإضافة تبعية على Room، يجب إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
تشمل التبعيات الخاصة بمكتبة Room اختبار عمليات نقل البيانات في Room وRoom RxJava.
أضِف التبعيات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle
لتطبيقك أو وحدتك:
Kotlin
dependencies { val room_version = "2.7.2" 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.7.2" 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، عند طرحه، لمزيد من التفاصيل.
|
استخدام المكوّن الإضافي لنظام Gradle المتوافق مع Room
في الإصدار 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.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 الآن الإصدار 2.0 من لغة Kotlin، وسيتطلّب من المشاريع أيضًا التجميع باستخدام الإصدار 2.0 من Kotlin أو إصدار لغة مكافئ أو أحدث. (I8efb0، b/315461431، b/384600605)
إصلاح الأخطاء
- تم إصلاح مشكلة في أداة إنشاء قاعدة بيانات Room KMP عند استخدام اسم بسيط بدلاً من مسار في Android، ولم يكن من الممكن العثور على المسار الذي تم تحديد موقعه لملف قاعدة البيانات في دليل بيانات التطبيق. (I83315، b/377830104)
- تم إصلاح مشكلة في المكوّن الإضافي Room Gradle حيث كان ضبط إعدادات مدخلات المخطط ومخرجاته يتسبّب في حدوث مشكلة في مشاريع 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 على عمليات الدمج هذه.
الميزات الجديدة
- ستضيف إضافة Room Gradle تلقائيًا المخططات التي تم تصديرها إلى مصادر موارد "اختبار الأجهزة" في 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 ينفّذ
RoomDatabaseConstructor
expect 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) - تمت إضافة إمكانية استخدام
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)
إصلاح الأخطاء
- تم إصلاح الخطأ الذي كان يؤدي إلى حدوث توقّف تام أو ظهور خطأ مع انتهاء مهلة الاتصال عند استخدام
AndroidSQLiteDriver
فيRoomDatabase
.
الإصدار 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 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 عمليات الدمج هذه.
إصلاح الأخطاء
- تم حلّ مشكلة في الرمز البرمجي الذي تم إنشاؤه، حيث تم ضبط القيمة التلقائية لأعمدة 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 عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة في إنشاء رمز لدالة تعليق Dao
@Transaction
تتضمّن نصًا برمجيًا ينشئ طريقة واجهة تلقائية بسبب التجميع باستخدام-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-Paging: تم إصدار
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 مع طلبات بحث 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
إليها. نشكر "ماركوس ريغل | hey@marcorei.com". (I45acb)
الإصدار 2.3.0-beta02
18 شباط (فبراير) 2021
تم طرح androidx.room:room-*:2.3.0-beta02
. يحتوي الإصدار 2.3.0-beta02 على عمليات الإيداع هذه.
الميزات الجديدة
تتيح مكتبة Room الآن استخدام أداة Kotlin Symbol Processing KSP بشكل تجريبي.
يحلّ 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 على عمليات الإيداع هذه.
الميزات الجديدة
- قواعد البيانات القابلة للإغلاق التلقائي: يمكن الآن إغلاق قواعد البيانات التي لم يتم الوصول إليها بعد فترة زمنية معيّنة. هذه ميزة تجريبية ويمكن تفعيلها من خلال الاتصال بالرقم
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 عن طريق الخطأ المحوّل المضمّن من 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. (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: يمكن أن تكون طرق
@Query
DAO الآن من نوع الإرجاعFlow<T>
. ستعيد Flow المعروضة إصدار مجموعة جديدة من القيم إذا تم إبطال الجداول التي يتم رصدها في طلب البحث. يُعدّ تعريف دالة DAO بنوع إرجاعChannel<T>
خطأً، بل ينصحك 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
. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.
لم يتم إجراء أي تغييرات علنية منذ الغرفة 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: يمكن أن تكون طرق
@Query
DAO الآن من نوع الإرجاعFlow<T>
. ستعيد Flow المعروضة إصدار مجموعة جديدة من القيم إذا تم إبطال الجداول التي يتم رصدها في طلب البحث. يُعدّ تعريف دالة DAO بنوع إرجاعChannel<T>
خطأً، بل ينصحك 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 بشأن عدم توفّر دوال setter في عناصر 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
في الطرق المجردة لفئة تتضمّن تعليقًا توضيحيًا بقيمة تلقائية. يُرجى العِلم أنّه يجب أن تكون هذه التعليقات التوضيحية مصحوبة أيضًا بـ@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-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). يمكن الآن تعريف التعليقات التوضيحية الخاصة بالغرف
@PrimaryKey
و@ColumnInfo
و@Embedded
و@Relation
في الطرق المجردة لفئة تتضمّن تعليقات توضيحية لقيمة تلقائية. يُرجى العِلم أنّه يجب أن تكون هذه التعليقات التوضيحية مصحوبة أيضًا بـ@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
إصلاح الأخطاء
تم إصلاح خطأ فادح في عمليات تنفيذ
Room
RxSingle
و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
أو إصدار أحدث من نظام التشغيل، والتبديل منLivePagedListProvider
إلىLivePagedListBuilder
إذا لم يسبق لك إجراء ذلك.
إصلاح الأخطاء
- تحسين مستوى الدعم لأنواع Kapt في Kotlin: b/69164099
- لم يعُد ترتيب الحقول يؤدي إلى إبطال المخطط. b/64290754