Room

توفر مكتبة Room للبيانات الثابتة طبقة تجريد فوق SQLite للسماح بالوصول إلى قاعدة البيانات بشكل أكثر فعالية مع الاستفادة من إمكانات SQLite الكاملة.
آخر الأخبار الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأوّلي
‫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، (I8fb29b/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(). في ما يلي الاستراتيجية الجديدة:

  1. تحديد عنصر expect ينفّذ RoomDatabaseConstructor

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

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

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

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

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

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

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

الإصدار 2.7.0-alpha05

‫10 يوليو 2024

تم طرح androidx.room:room-*:2.7.0-alpha05. يحتوي الإصدار 2.7.0-alpha05 على عمليات الدمج هذه.

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

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

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

  • تم إصلاح الخطأ الذي كان يؤدي إلى حدوث توقّف تام أو ظهور خطأ مع انتهاء مهلة الاتصال عند استخدام 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 على عمليات الإيداع هذه.

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

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

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

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

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

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

الإصدار 2.6.0-alpha02

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

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

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

يحتوي هذا الإصدار الجديد على عنصر جديد لبرنامج 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-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 على عمليات الدمج التالية.

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

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

  • تمت إضافة سمة جديدة إلى التعليق التوضيحي 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)

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

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

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

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

الإصدار 2.3.0-alpha02

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

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

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

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

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

  • أصبح من الممكن الآن تعريف @TypeConverter في فئة كائن Kotlin. (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، تتيح الآن أنواع الإرجاع Rx Completable وSingle وMaybe، ونوع الإرجاع ListenableFuture من Guava، ويمكن أن تكون أيضًا دوال تعليق.
  • enableMultiInstanceInvalidation هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder تتيح إبطال البيانات على مستوى مثيلات متعددة من RoomDatabase باستخدام ملف قاعدة البيانات نفسه.
  • fallbackToDestructiveMigrationOnDowngrade هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder لإعادة إنشاء قاعدة البيانات تلقائيًا في حال حدوث إصدار أقدم.
  • ignoredColumns هي واجهة برمجة تطبيقات جديدة في التعليق التوضيحي @Entity يمكن استخدامها لإدراج الحقول التي تم تجاهلها حسب الاسم.
  • سيستخدم Room الآن بشكلٍ صحيح الدالة الإنشائية الأساسية في Kotlin في فئات البيانات، ما يغني عن الحاجة إلى تعريف السمات على أنّها vars.

الإصدار 2.1.0-rc01

‫29 مايو 2019

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

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

الإصدار 2.1.0-beta01

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

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

الإصدار 2.1.0-alpha07

‫25 أبريل 2019

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

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

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

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

الإصدار 2.1.0-alpha06

‫22 مارس 2019

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

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

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

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

الإصدار 2.1.0-alpha05

‫13 مارس 2019

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

  • تتيح لك دالة الإضافة RoomDatabase.withTransaction تنفيذ معاملات قاعدة البيانات بأمان ضمن روتين فرعي. تتوفّر وظائف إضافات Room مع إمكانية استخدام الروتينات الفرعية في العنصر 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 إليها مع أنواع إرجاع Rx Completable وSingle<T> وMaybe<T>. b/63317956
  • الأنواع غير القابلة للتغيير مع @Relation: كان Room يتطلّب سابقًا أن تكون الحقول التي تحمل التعليق التوضيحي @Relation قابلة للضبط، ولكن يمكن الآن أن تكون مَعلمات دالة إنشاء.
  • enableMultiInstanceInvalidation: هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder تتيح إبطال البيانات على مستوى عدة مثيلات من RoomDatabase باستخدام ملف قاعدة البيانات نفسه. تعمل آلية الإبطال المتعددة المثيلات هذه أيضًا على مستوى عمليات متعددة. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder لإعادة إنشاء قاعدة البيانات تلقائيًا في حال حدوث إصدار أقدم. b/110416954
  • ignoredColumns: هي واجهة برمجة تطبيقات جديدة في التعليق التوضيحي @Entity يمكن استخدامها لإدراج الحقول التي تم تجاهلها حسب الاسم. مفيد لتجاهل الحقول الموروثة في أحد العناصر. b/63522075

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

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

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

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

الإصدار 2.0.0

الإصدار 2.0.0

‫1 أكتوبر 2018

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

الإصدار 2.0.0-rc01

‫20 سبتمبر 2018

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

الإصدار 2.0.0-beta01

‫2 يوليو 2018

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

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

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

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

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

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

dependencies {
    def room_version = "1.1.1"

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

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

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

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

الإصدار 1.1.1

الإصدار 1.1.1

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

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

الإصدار 1.1.1-rc1

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

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

الإصدار 1.1.0

الإصدار 1.1.0-beta3

‫19 أبريل 2018

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

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

الإصدار 1.1.0-beta2

‫5 أبريل 2018

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

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

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

الإصدار 1.1.0-beta1

‫21 مارس 2018

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

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

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

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

الإصدار 1.1.0-alpha1

‫22 يناير 2018

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

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

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

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