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

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

قراءة لمدة 4 دقائق
Daniel Santiago Rivera
مهندس برمجيات

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

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

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

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

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

حزمة جديدة

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

التركيز على Kotlin والكوروتينات أولاً

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

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

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

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

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

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

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

ندرك أنّه قد لا يكون من الممكن إزالة SupportSQLite بالكامل على الفور لجميع المشاريع. لتسهيل هذا الانتقال، قدّم Room 2.8.0، وهو أحدث إصدار من سلسلة 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 للويب، يمكنك الاطّلاع على ملاحظات إصدار Room 3.0.

أنواع الإرجاع المخصّصة لـ DAO

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

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

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

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

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

الأفكار الختامية

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

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