أخبار المنتجات

‫Room 3.0: تحديث مكتبة Room

قراءة لمدة 4 دقائق
Daniel Santiago Rivera
Software Engineer

تم إطلاق الإصدار الأوّلي الأول من Room 3.0. ‫Room 3.0 هو إصدار رئيسي يتضمّن تغييرات غير متوافقة في المكتبة، ويركّز على Kotlin Multiplatform (KMP) ويتيح استخدام JavaScript وWebAssembly (WASM) بالإضافة إلى إمكانية استخدامه على Android وiOS وJVM. 

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

التغييرات التي قد تؤدي إلى أعطال

يتضمّن الإصدار 3.0 من Room التغييرات التالية في واجهة برمجة التطبيقات التي قد تؤدي إلى أعطال: 

  • إيقاف واجهات برمجة تطبيقات SupportSQLite نهائيًا: يعتمد الإصدار 3.0 من Room بشكل كامل على واجهات برمجة تطبيقات برنامج التشغيل androidx.sqlite. تتوافق واجهات برمجة التطبيقات SQLiteDriver مع KMP، كما أنّ إزالة اعتماد Room على واجهة برمجة التطبيقات لنظام التشغيل Android يؤدي إلى تبسيط مساحة واجهة برمجة التطبيقات لنظام التشغيل Android لأنّه يتجنّب وجود نظامَين خلفيَين محتملَين.
  • إيقاف إنشاء رموز Java البرمجية: لا ينشئ Room 3.0 إلا رموز Kotlin البرمجية. يتوافق ذلك مع نموذج Kotlin-first المتطوّر، كما أنّه يبسّط قاعدة الرموز وعملية التطوير، ما يتيح إجراء تكرارات أسرع.
  • التركيز على KSP: سنوقف أيضًا إتاحة استخدام Java Annotation Processing (AP) وKAPT. الإصدار 3.0 من Room هو معالج KSP (معالجة رموز Kotlin البرمجية) فقط، ما يتيح معالجة أفضل لقواعد رموز Kotlin البرمجية بدون أن تكون محدودة بلغة Java.
  • الكوروتينات أولاً: يتوافق الإصدار 3.0 من Room مع كوروتينات Kotlin، ما يجعل واجهات برمجة التطبيقات فيه متوافقة مع الكوروتينات أولاً. إنّ Coroutines هو إطار عمل غير متزامن متوافق مع KMP، ويُعدّ جعل Room غير متزامن بطبيعته شرطًا أساسيًا لإتاحة إمكانية استخدامه على منصات الويب.

حزمة جديدة

لتجنُّب مشاكل التوافق مع عمليات التنفيذ الحالية للإصدار 2.x من Room ومع المكتبات التي تتضمّن تبعيات متعدّية إلى Room (مثل WorkManager)، يتوفّر الإصدار 3.0 من Room في حزمة جديدة، ما يعني أنّه يتضمّن أيضًا مجموعة Maven ومعرّفات عناصر جديدة. على سبيل المثال، أصبح androidx.room:room-runtime هو androidx.room3:room3-runtime، وسيتم الآن العثور على الصفوف مثل androidx.room.RoomDatabase في androidx.room3.RoomDatabase.

Kotlin وCoroutines أولاً

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

يتطلّب الإصدار 3.0 من Room أيضًا استخدام Coroutines، وبشكلٍ أكثر تحديدًا، يجب أن تكون دوال DAO قابلة للتعليق ما لم تعرض نوعًا تفاعليًا، مثل Flow. لا يسمح Room 3.0 بحظر دوال DAO. يمكنك الاطّلاع على مستندات "الروتينات الفرعية على Android" حول كيفية بدء دمج الروتينات الفرعية في تطبيقك.

نقل البيانات إلى واجهات برمجة تطبيقات SQLiteDriver

مع التوقّف عن استخدام SupportSQLite، ستحتاج التطبيقات إلى نقل البيانات إلى واجهات برمجة التطبيقات SQLiteDriver. يُعدّ نقل البيانات هذا ضروريًا للاستفادة من جميع مزايا Room 3.0، بما في ذلك السماح باستخدام مكتبة SQLite المجمّعة من خلال BundledSQLiteDriver. يمكنك البدء في نقل البيانات إلى واجهات برمجة التطبيقات الخاصة بمحرك قاعدة البيانات اليوم باستخدام Room 2.7.0 والإصدارات الأحدث. وننصحك بشدة بتجنُّب أي استخدام آخر لمكتبة SupportSQLite. في حال نقل عمليات دمج Room إلى واجهات برمجة تطبيقات SQLiteDriver، ستكون عملية الانتقال إلى الإصدار 3.0 من Room أسهل لأنّ تغيير الحزمة يتضمّن في الغالب تعديل مراجع الرموز (عمليات الاستيراد) وقد يتطلّب إجراء تغييرات بسيطة في مواقع الاستدعاء.

للحصول على نظرة عامة موجزة حول واجهات برمجة التطبيقات SQLiteDriver، يُرجى الاطّلاع على مستندات واجهات برمجة التطبيقات SQLiteDriver.

لمزيد من التفاصيل حول كيفية نقل بيانات Room لاستخدام واجهات برمجة تطبيقات SQLiteDriver، يمكنك الاطّلاع على المستندات الرسمية لنقل البيانات من SupportSQLite.

برنامج تضمين Room SupportSQLite

ندرك أنّ إزالة SupportSQLite بالكامل قد لا يكون ممكنًا على الفور لجميع المشاريع. لتسهيل عملية الانتقال هذه، قدّم الإصدار 2.8.0 من Room، وهو أحدث إصدار من سلسلة Room 2.0، عنصرًا جديدًا يُسمى androidx.room:room-sqlite-wrapper. يوفّر هذا العنصر واجهة برمجة تطبيقات متوافقة تتيح لك تحويل RoomDatabase إلى SupportSQLiteDatabase، حتى إذا تم إيقاف واجهات برمجة تطبيقات SupportSQLite في قاعدة البيانات بسبب تثبيت SQLiteDriver. يوفّر ذلك حلاً مؤقتًا للمطوّرين الذين يحتاجون إلى مزيد من الوقت لنقل قاعدة الرموز البرمجية بالكامل. يظل هذا العنصر موجودًا في Room 3.0 باسم androidx.room3:room3-sqlite-wrapper لتفعيل عملية نقل البيانات إلى Room 3.0 مع مواصلة إتاحة الاستخدام المهم لـ SupportSQLite.

على سبيل المثال، يمكن استبدال استدعاءات roomDatabase.openHelper.writableDatabase بـ roomDatabase.getSupportWrapper() وسيتم توفير برنامج تضمين حتى إذا تم استدعاء setDriver() في أداة إنشاء Room.

لمزيد من التفاصيل، يُرجى الاطّلاع على مستندات room-sqlite-wrapper.

توافق Room وSQLite مع الويب

تتيح هذه النسخة استخدام Kotlin Multiplatform مع JavaScript وWasmJS، كما تتضمّن بعضًا من أهم التغييرات في واجهة برمجة التطبيقات. على وجه التحديد، العديد من واجهات برمجة التطبيقات في Room 3.0 هي دوال تعليق لأنّ التوافق المناسب مع مساحة التخزين على الويب غير متزامن. تم أيضًا تعديل واجهات برمجة التطبيقات SQLiteDriver لتتوافق مع الويب، ويتوفّر برنامج تشغيل جديد غير متزامن للويب في androidx.sqlite:sqlite-web. وهو برنامج تشغيل مستند إلى Web Worker يتيح إمكانية الاحتفاظ بقاعدة البيانات في نظام الملفات الخاص بالمصدر (OPFS).

لمزيد من التفاصيل حول كيفية إعداد Room for the Web، يُرجى الاطّلاع على ملاحظات إصدار Room 3.0.

أنواع العائدات المخصّصة من DAO

تتيح الإصدار 3.0 من Room إمكانية إضافة عمليات دمج مخصّصة إلى Room، على غرار RxJava وPaging. من خلال واجهة برمجة تطبيقات جديدة خاصة بالتعليقات التوضيحية تُسمى @DaoReturnTypeConverter، يمكنك إنشاء عملية الدمج الخاصة بك بحيث يصبح الرمز الذي تم إنشاؤه في Room متاحًا في وقت التشغيل، ما يتيح لدوال @Dao الحصول على أنواع الإرجاع المخصّصة بدون الحاجة إلى انتظار فريق Room لإضافة الدعم. يتم نقل عمليات الدمج الحالية لاستخدام هذه الوظيفة، وبالتالي سيُطلب الآن من المستخدمين الذين يعتمدون عليها إضافة المحوّلات إلى تعريفات @Database أو @Dao.

على سبيل المثال، سيكون محوّل التصفّح على صفحات متعدّدة في العنصر androidx.room3:room3-paging وسيُطلق عليه اسم PagingSourceDaoReturnTypeConverter. في الوقت الحالي، يتوفّر المحوّل في LiveData ضمن androidx.room3:room3-livedata ويُطلق عليه اسم LiveDataDaoReturnTypeConverter.

لمزيد من التفاصيل، اطّلِع على قسم "محوّلات نوع الإرجاع في DAO" ضمن ملاحظات الإصدار 3.0 من Room.

وضع الصيانة في Room 2.x

بما أنّ عملية تطوير Room ستركز على الإصدار 3، سيدخل الإصدار الحالي 2.x من Room وضع الصيانة. وهذا يعني أنّه لن يتم تطوير أي ميزات رئيسية، ولكن سيظل يتم إصدار حِزم التصحيحات (2.8.1 و2.8.2 وما إلى ذلك) مع إصلاحات الأخطاء وتحديثات التبعيات. يواصل الفريق العمل على ذلك إلى أن يصبح الإصدار 3 من Room مستقرًا.

نصائح أخيرة

نحن متحمّسون جدًا بشأن إمكانات Room 3.0 والفرص التي يتيحها لنظام Kotlin المتكامل. يُرجى متابعتنا لمعرفة المزيد من الأخبار بينما نواصل هذه الرحلة.

متابعة القراءة