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

الإصدار 3.0 من Room: تحديث الغرفة

مدّة القراءة: 4 دقائق
عرض الملف الشخصي لـ "دانيال سانتياغو ريفيرا"
Daniel Santiago Rivera مهندس برمجيات

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

دعم Room وSQLite للويب

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

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

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

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

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

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

وضع الصيانة للإصدار 2.x من Room

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

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

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

من تأليف:
متابعة القراءة