Room

توفّر مكتبة Room للحفاظ على البيانات طبقة تجريدية فوق SQLite للسماح بالوصول إلى قاعدة البيانات بشكل أكثر فعالية مع الاستفادة من الإمكانات الكاملة لـ SQLite.
آخر تعديل الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار التجريبي الأول
30 تشرين الأول (أكتوبر) 2024 2.6.1 - - 2.7.0-alpha11

الإعلان عن التبعيات

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

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

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

Kotlin

dependencies {
    val room_version = "2.6.1"

    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")
}

رائع

dependencies {
    def room_version = "2.6.1"

    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.

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

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

تكوين خيارات برنامج التحويل البرمجي

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

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

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

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

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

رائع

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

Kotlin

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

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

رائع

plugins {
    id 'androidx.room'
}

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

Kotlin

plugins {
    id("androidx.room")
}

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

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

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

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

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

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

رائع

// 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 من معرفة هذا الدليل عند إجراء عمليات التحقّق من التحديثات. يعرض الخيار نقل بيانات الغرف تنفيذًا كاملاً لـ CommandLineArgumentsProvider يوفّر موقع المخطط.

ملاحظات

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

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

اطّلِع على مستندات أداة تتبُّع المشاكل لمزيد من المعلومات.

الإصدار 2.7

الإصدار 2.7.0-alpha11

30 تشرين الأول (أكتوبر) 2024

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

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

  • راجِع توقيع طريقة convertRows() المُضافة حديثًا ليكون وظيفة تعليق تتلقّى RawRoomQuery لفهرسة الغرف. (Ie57b5، b/369136627)

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

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

الإصدار 2.7.0-alpha10

16 أكتوبر 2024

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

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

  • إنشاء فئة ByteArrayWrapper داخلية لدعم العلاقات مع "ByteBuffer" على الأنظمة الأساسية التي لا تعمل على Android وخارجها (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 على عمليات التنفيذ هذه.

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

  • تم إصلاح مشكلة في تنفيذ KMP لـ room-paging التي قد تؤدي إلى 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)

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

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

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

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

الإصدار 2.7.0-alpha07

21 آب (أغسطس) 2024

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

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

  • سيضيف "المكوّن الإضافي لنظام 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. تحديد كائن متوقع ينفّذ 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)
  • حلّ مشكلة طرحت فيها الغرفة أحيانًا استثناءً بشأن "انتهاء المهلة أثناء محاولة الاتصال" في مشروع KMP. (fa72d0، b/347737870)
  • حل مشكلة في عمليات نقل البيانات التلقائية التي تبحث عن المفاتيح الخارجية في وقت مبكر جدًا قبل أن تغير الجداول الأخرى مخططاتها لتتوافق مع المفاتيح الخارجية الجديدة. (7672c0، b/352085724)

الإصدار 2.7.0-alpha05

10 تموز (يوليو) 2024

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

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

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

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

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

الإصدار 2.7.0-alpha04

12 يونيو 2024

تم إصدار androidx.room:room-*:2.7.0-alpha04. يحتوي الإصدار 2.7.0-alpha04 على عمليات التنفيذ هذه.

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

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

الإصدار 2.7.0-alpha03

29 مايو 2024

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

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

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

الإصدار 2.7.0-alpha02

14 مايو 2024

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

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

  • تم إصلاح مشاكل مختلفة في KSP.

الإصدار 2.7.0-alpha01

1 مايو 2024

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

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

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

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

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

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

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

الإصدار 2.6

الإصدار 2.6.1

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

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

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

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

الإصدار 2.6.0

18 تشرين الأول (أكتوبر) 2023

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

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

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

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

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

  • تمت إضافة العنصر الجديد لواجهة Room Gradle Plugin إلى Room باستخدام المعرّف androidx.room، ما يحلّ العديد من المشاكل الحالية في Room المتعلّقة بتوفير مدخلات ومخرجات للمخططات من خلال خيارات معالج التعليقات التوضيحية في Gradle. لمزيد من التفاصيل، يُرجى الاطّلاع على ملاحظات إصدار Room 2.6.0-alpha02.
  • تتوفّر الآن فئات القيم في كيانات الغرف في برنامج KSP. (4194095)
  • تتوفّر الآن أنواع إرجاع "الخرائط المتداخلة" في دوال DAO في الغرفة. (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 فقط واستخدام التعليق التوضيحي على مَعلمة النوع المحدّدة التي تتم الإشارة إليها (المفتاح أو قيمة Map) في نوع الإرجاع لدالة DAO. ويرجع ذلك إلى أنّ التعليق التوضيحي @MapColumn يتم استخدامه مباشرةً على وسيطة type ضمن نوع الإرجاع لدالة 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 على هذه المراجعات.

المكوّن الإضافي لنظام Gradle الخاص بالغرفة

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

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

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

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

  • تم تعريف "RoomDatabase.QueryCallback" على أنّه واجهة وظيفية تتيح استخدام الإحالات الناجحة من خلال ميزة "إدارة العلامات من Google". (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 على هذه المراجعات.

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

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

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

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

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

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

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

  • عدم السماح بالخصائص المجرّدة كدوال DAO أو استعلامات 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() في الغرفة. (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 على هذه المراجعات.

الإصدار

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. بالإضافة إلى ذلك، تم تحويل طرق جلب معيّنة إلى خصائص تتطلّب بنية الوصول إلى الخصائص في ملفات 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)

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

  • سيُظهر الجدول الآن 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 الآن حلّ الأعمدة الغامضة في استعلام الخريطة المتعددة. يتيح ذلك ربط عبارات JOIN مع الجداول التي تحتوي على جداول تحمل الاسم نفسه بشكل صحيح بعنصر بيانات النتيجة. (I4b444، b/201306012، b/212279118)

الإصدار 2.5.0-alpha01

23 شباط (فبراير) 2022

تم إصدار androidx.room:room-*:2.5.0-alpha01. يحتوي الإصدار 2.5.0-alpha01 على هذه عمليات التنفيذ.

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

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

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

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

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

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

الإصدار 2.4.3

الإصدار 2.4.3

27 تموز (يوليو) 2022

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

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

  • تم إصلاح المشكلة التي كانت تتسبب في عدم تعرُّف الغرفة على دوال التعليق في الإصدار 1.7 من لغة Kotlin (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 التوضيحية المخصّصة لمطابقة getters/setters مع الخصائص الخاصة، يُرجى التحقّق جيّدًا من الرمز الذي تمّ إنشاؤه بعد التحديث (If6531، b/205289020).

الإصدار 2.4.0

الإصدار

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

تم إصدار androidx.room:room-*:2.4.0. يحتوي الإصدار 2.4.0 على عمليات الإلغاء هذه.

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

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

الإصدار 2.4.0-rc01

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

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

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

  • تعديل الاعتمادية على KSP في Room إلى 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 جديدة تأخذ في الاعتبار معلومات القيم الفارغة وبما أنّ هذه المعلومات متاحة فقط في "شركاء المحتوى في خرائط Google"، يتم تفعيلها تلقائيًا في هذا البرنامج فقط. إذا تسبّبت هذه الميزة في أي مشاكل، يمكنك إيقافها عن طريق ضبط قيمة room.useNullAwareTypeAnalysis=false في معالج التعليقات التوضيحية. إذا حدث ذلك، يُرجى الإبلاغ عن الخطأ الذي حدث، لأنّه ستتم إزالة هذه العلامة في المستقبل. باستخدام هذا المحلّل الجديد لـ TypeConverter، يُنصح بتوفير TypeConverters لتلقّي القيم غير الصفرية فقط لأنّ المحلّل الجديد لديه القدرة على ملفّفتها باستخدام عملية التحقّق من القيمة الخالية. يُرجى العِلم أنّ هذا التغيير لن يؤثر في المستخدمين الذين يستخدمون 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 الذي تم إنشاؤه من خلال تقسيم الغرف في الصفحة 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 لأنواع الإرجاع التي تتضمن خرائط متعددة في 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 عنصرًا مطلوبًا عند استخدام Paging 3 مع الغرفة (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.

الإشارة إلى الغرف

  • تم إصدار androidx.room:room-paging، ما يتيح استخدام Paging 3.0 الأصلي لطلبات البحث عن الغرف التي تعرض 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 في الغرفة يجب أن يأخذ في الاعتبار هذا التغيير في السلوك، بما في ذلك المفتاح الأولي الذي تم تمريره عبر أداة إنشاء جهاز النداء. سيبدأ تحميل الصفحات من Key، وسيكون Key هو أول عنصر يتم تحميله. وينحرف ذلك عن السلوك الحالي الذي يتم فيه التعامل مع LoadParams.Refresh.Key كموضع تمرير للمستخدم ويتم تحميل العناصر قبل المفتاح وبعده.

  • العنصر اختياري، وسيؤدي إيقافه إلى الرجوع إلى الإصدار الحالي من Paging 3.0 الذي تم تقديمه في Room 2.3. ومع ذلك، سيصبح هذا العنصر غير اختياري في الإصدارات المستقبلية لأولئك الذين يستخدمون ميزة "الغرفة مع التنقّل في الصفحة" 3.0. للموافقة، أضِف العنصر الجديد ترقيم الصفحات في الغرفة إلى مسار صفك. إذا كنت تستخدم 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)

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

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

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

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

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

الإصدار 2.3.0-beta02

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

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

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

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

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

    لاستخدام الغرفة مع 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 الآن بشكل تلقائي محوِّلًا من النوع "قائمة بقيم محدّدة" إلى النوع "سلسلة" والعكس إذا لم يتم توفير أيّ محوِّل. إذا كان هناك محوِّل أنواع لقائمة أرقام مميزة، ستعطي Room الأولوية لاستخدامه بدلاً من المحوِّل التلقائي. (b/73132006)

مشكلة معروفة

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

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

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

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

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

الإصدار 2.3.0-alpha03

14 تشرين الأول (أكتوبر) 2020

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

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

  • تتضمّن 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)

  • حلّ مشكلة في الغرفة تتحقّق بشكل غير صحيح من جداول FTS التي أعلنت عن عمود معرّف الصف الخاص بها (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 التي يكون نوع إرجاعها قابلاً للتدفق أو فرديًا أو ربما وقابلاً للإكمال. بالإضافة إلى ذلك، يتوفّر عنصر جديد androidx.room:room-rxjava3 لدعم RxJava3. (b/152427884)

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

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

الإصدار 2.3.0-alpha01

10 حزيران (يونيو) 2020

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

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

  • إتاحة التنقّل في الصفحة 3.0: ستتيح أداة 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 المستخدَم لتفعيل معالج التعليقات التوضيحية المتزايدة بشكل صحيح. مع أطيب التحيّات، "بلاز سولار" (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 directBootAware. مع أطيب التحيّات، "مايجود" contact-git@mygod.be (b/148240967)
  • تم إصلاح خطأ كان يؤدي إلى حدوث عطل عند تفعيل إيقاف العناصر غير الصالحة في النُسخ المتعددة واحتواء قاعدة البيانات على عنصر FTS. (b/148969394)
  • تم إصلاح مشكلة عند تحميل المكتبات المجمّعة من رموز برمجية أصلية لـ SQLite في معالج التعليقات التوضيحية في Room، والتي كانت تؤدي إلى تعطُّل المُجمِّع بسبب عمليات الترجمة المجمّعة المتوازيّة. (b/146217083)

الإصدار 2.2.4

الإصدار 2.2.4

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

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

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

  • تم إصلاح مشكلة في تعليق المعاملات التي كانت ستؤدي إلى حدوث مشكلة في الأداء إذا تم إلغاء دالة coroutine بسرعة قبل بدء المعاملة فعليًا. (b/148181325)
  • تم إصلاح مشكلة استخدام العلامة @Generated بشكل خاطئ عند الإنشاء باستخدام JDK 9. (b/146538330)
  • تم إصلاح المشكلة التي كانت تتسبب في إنشاء رمز غير صحيح لغرفة 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
  • مسار الكوروتينات: يمكن الآن أن تكون طرق @Query DAO من نوع الإرجاع Flow<T>. ستعيد عملية بث البيانات التي تم عرضها مجموعة جديدة من القيم في حال إلغاء صلاحية الجداول المراقبة في طلب البحث. يُعدّ تعريف دالة DAO باستخدام نوع Channel<T> للعائد خطأً، ويشجّعك Room بدلاً من ذلك على استخدام Flow ثم استخدام الدوال المجاورة لتحويل Flow إلى Channel. b/130428884
  • معالج التعليقات التوضيحية المتزايدة في Gradle: أصبح Room الآن معالجًا لتعليقات Gradle التوضيحية، ويمكن تفعيل إمكانية الزيادة من خلال خيار room.incremental في المعالج. يمكنك الاطّلاع على خيارات "مجمع الغرف" للحصول على مزيد من المعلومات. إذا واجهت أي مشاكل، يُرجى الإبلاغ عن الخطأ هنا. ونخطّط لإتاحة إمكانية الزيادة تلقائيًا في إصدار مستقبلي مستقر. b/112110217
  • توسيع الإسقاطات: تمت إضافة خيار تجميع تجريبي جديد room.expandProjection يتسبب في إعادة كتابة طلب بحث باستخدام إسقاط نجمة ليحتوي فقط على الأعمدة في النوع المكرّر من النوع POJO. على سبيل المثال، بالنسبة إلى طريقة DAO التي تحتوي على @Query("SELECT * FROM Song") والتي تعرض ملف SongIdAndTitle POJO الذي يحتوي على حقلَين فقط. بعد ذلك، ستعيد Room كتابة query ليكون 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. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.

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

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

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

  • تم إصلاح الخطأ الذي كان يؤدي فيه الغرفة إلى إنشاء رمز غير صحيح باستخدام طريقة كإعداد الحقل عند حماية الحقل. b/136194628
  • تم إصلاح الخطأ الذي تسبَّب في وضع أداة ValueTrack (NPE) في عملية ثانية عند تفعيل خيار إلغاء المثيلات المتعددة وإيقاف الخدمة. b/137454915
  • تم إصلاح الخطأ الذي كان يؤدي إلى عدم التعرّف بشكل صحيح على نوع العرض لدالة تعليق مكتسبة تم التعليق عليها باستخدام @RawQuery. b/137878827
  • تم تعديل الرمز الذي تم إنشاؤه لـ @Relation عندما يكون المفتاح ذا الصلة من النوع BLOB لاستخدام ByteBuffer مشابه. b/137881998
  • تم إصلاح خطأ كان يؤدي إلى تحذير Room بشأن عدم توفّر وظائف الإعداد في الكيانات البسيطة التي يتم استخدامها كمَعلمات لكيانات جزئية من @Insert و@Update و@Delete. b/138664463
  • تم إصلاح خطأ كان يؤدي إلى تحذير Room بشأن عدم توفّر وظيفتَي التقديم والحصول لأحد الأعمدة التي تم تجاهلها من خلال @Entity عند استخدام فئة العنصر في طُرق DAO معيّنة. b/138238182
  • تم إصلاح الخطأ الذي كان يؤدي إلى عدم تحويل الغرفة بشكل صحيح وسيطات الربط المُسمّاة إلى وسيطات موضعية تؤدي إلى استثناء وقت التشغيل عند تنفيذ طلب بحث باستخدام معلَمات مُعاد استخدامها. 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 للأعمدة نفسها، قد تحتاج إلى توفير عملية نقل بيانات للتحقّق من صحة القيم التلقائية غير المحسوبة. اطّلِع على عمليات نقل الغرف للحصول على مزيد من المعلومات.

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

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

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

الإصدار 2.1.0

الإصدار 2.1.0

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

تم إلغاء حجز الغرفة 2.1.0 بدون أي تغييرات من "2.1.0-rc01". يمكن العثور على عمليات الربط المضمّنة في الإصدار هنا.

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

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

الإصدار 2.1.0-rc01

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

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

  • تم إصلاح خطأ في إعداد Room قد يحدث بسبب إعداد temp_store الذي سبق ضبطه. b/132602198
  • تم إصلاح تحذير بشأن استخدام علامات الاقتباس المزدوجة للمستخدمين الذين يستخدمون SQLite 3.27.0 والإصدارات الأحدث. b/131712640
  • تم إصلاح الخطأ الذي يمكن أن يتسبب فيه SmallationTracker في التسبب في تعطُّل عندما تحدث عمليات تحقق متعددة للإبطال بالتوازي. 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 { } الإضافي الذي يُستخدَم لتشغيل الإجراءات في مجموعة المعاملات بشكل متزامن.

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

  • تم إصلاح الخطأ الذي يفشل في الغرفة في مطابقة TypeConverter لدالة Kotlin DAO التي تحتوي على معلمة من نوع المجموعة. b/122066791

الإصدار 2.1.0-alpha06

22 آذار (مارس) 2019

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

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

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

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

الإصدار 2.1.0-alpha05

13 آذار (مارس) 2019

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

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

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

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

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

  • تم إصلاح خطأ كان يؤدي إلى إسقاط مَعلمات أداة تقسيم النصوص إذا كانت أداة التقسيم المستخدَمة هي SIMPLE. b/125427014
  • تم إصلاح الخطأ الذي كان يفشل في الغرفة في التعرّف بشكل صحيح على دوال التعليق التي تتضمن معلمات من نوعها فئة داخلية. 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 على عنصر kotlinx-metadata-jvm غير المتوفّر حاليًا في Maven Central (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

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

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

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

  • تم إصلاح الخطأ المتمثل في عدم استخدام 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

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

  • Couroutines: يمكن الآن أن تكون طرق DAO دوال تعليق. لإتاحة وظائف التعليق في الغرفة، تم إصدار عنصر جديد، وهو 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

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

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

الإصدار 2.1.0-alpha01

8 تشرين الأول (أكتوبر) 2018

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

  • البحث التام في النصوص: يتيح Room الآن استخدام الكيانات التي تحتوي على جدول ربط FTS3 أو FTS4. يمكن الآن إضافة تعليقات توضيحية أيضًا باستخدام @Fts3 أو @Fts4 للفئات التي تحتوي على تعليقات توضيحية باستخدام @Entity، وذلك للإعلان عن فئة باستخدام جدول بحث في النص الكامل للتعيين. تتوفّر خيارات البحث التام في النصوص لإجراء المزيد من التخصيص من خلال طرق التعليق التوضيحي. b/62356416
  • المشاهدات: تتيح Room الآن تحديد فئة كطلب بحث محفوظ، ويُعرف ذلك أيضًا باسم عرض باستخدام التعليق التوضيحي @DatabaseView. b/67033276
  • القيمة التلقائية: يتيح Room الآن الإعلان عن الفصول المُشارَك فيها AutoValue ككيانات وعناصر POJO. يمكن الآن تحديد التعليقات التوضيحية لغرفة الفندق @PrimaryKey و@ColumnInfo و@Embedded و@Relation في الطرق المجردة لفئة تمّت عليها تعليقات توضيحية لقيمة تلقائية. يُرجى العِلم أنّه يجب أيضًا أن يكون هذا التعليق التوضيحي مصحوبًا بـ "@CopyAnnotations" لكي تفهمه الغرفة بشكل صحيح. b/62408420
  • دعم إضافي لأنواع الإرجاع في Rx: إنّ طُرق DAO التي تحتوي على تعليقات توضيحية باستخدام @Insert أو @Delete أو @Update تتوافق الآن مع أنواع إرجاع Rx: Completable وSingle<T> وMaybe<T>. b/63317956
  • الأنواع غير القابلة للتغيير مع @Relation: كانت الغرفة تتطلّب في السابق أن تكون الحقول التي تحتوي على تعليقات توضيحية @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 وقاعدة البيانات التي تم إنشاؤها نهائية الآن

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

  • تحديد اسم الفئة/الحقل في خطأ "لا يمكن العثور على getter للحقل" b/73334503
  • تم إصلاح التوافق مع الإصدارات القديمة من RoomOpenHelper في الإصدار 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 ننصح بشدة باستخدام المساحة 1.1.1-rc1 بدلاً من 1.1.0 إذا كنت تستخدم عمليات نقل البيانات.

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

الإصدار 1.1.0

الإصدار 1.1.0-beta3

19 نيسان (أبريل) 2018

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

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

الإصدار 1.1.0-beta2

5 نيسان (أبريل) 2018

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

  • تم إصلاح خطأ فادح في عمليات تنفيذ 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 الآن سوى واجهات برمجة تطبيقات Paging API الأحدث (الإصدار التجريبي 4 والإصدارات الأحدث)، ما يعني إيقاف استخدام واجهة برمجة التطبيقات LivePagedListProvider التي سيتم إيقافها نهائيًا. لاستخدام الإصدار التجريبي من Room الجديد، عليك استخدام الإصدار alpha-4 أو إصدار أحدث، والتبديل من الإصدار LivePagedListProvider إلى الإصدار LivePagedListBuilder إذا لم يسبق لك ذلك.

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

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