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

‫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 أهداف JS و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 المتكاملة. ننصحك بمتابعتنا لمعرفة المزيد من الأخبار أثناء مواصلة هذه الرحلة.

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