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

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

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

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

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

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

يتضمّن الإصدار 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 غير متزامن بطبيعته هو شرط أساسي لدعم منصات الويب.

حزمة جديدة

لمنع حدوث مشاكل في التوافق مع عمليات تنفيذ Room 2.x الحالية والمكتبات التي تتضمّن تبعيات متعدية لـ 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. يمكنك البدء في نقل البيانات إلى واجهات برمجة التطبيقات لبرنامج التشغيل اليوم باستخدام Room 2.7.0 والإصدارات الأحدث. ننصحك بشدة بتجنُّب أي استخدام إضافي لـ SupportSQLite. إذا نقلت عمليات دمج Room إلى واجهات برمجة التطبيقات SQLiteDriver، يصبح الانتقال إلى Room 3.0 أسهل لأنّ تغيير الحزمة يتضمّن في الغالب تعديل مراجع الرموز (عمليات الاستيراد)، وقد يتطلّب إجراء تغييرات بسيطة على مواقع الاستدعاء.

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

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

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

ندرك أنّه قد لا يكون من الممكن إزالة SupportSQLite بالكامل على الفور لجميع المشاريع. لتسهيل هذا الانتقال، قدّم الإصدار 2.8.0 من Room، وهو أحدث إصدار من سلسلة Room 2.0، مادة عرض جديدة باسم androidx.room:room-sqlite-wrapper. توفّر مادة العرض هذه واجهة برمجة تطبيقات متوافقة تتيح لك تحويل RoomDatabase إلى SupportSQLiteDatabase، حتى إذا تم إيقاف واجهات برمجة التطبيقات SupportSQLite في قاعدة البيانات بسبب تثبيت SQLiteDriver. يوفّر ذلك جسرًا مؤقتًا للمطوّرين الذين يحتاجون إلى مزيد من الوقت لنقل قاعدة الرموز البرمجية بالكامل. تستمر مادة العرض هذه في الإصدار 3.0 من Room باسم 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 للويب، يمكنك الاطّلاع على ملاحظات الإصدار 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 سيركّز على Room 3، يدخل الإصدار الحالي 2.x من Room وضع الصيانة. يعني ذلك أنّه لن يتم تطوير أي ميزات رئيسية، ولكن سيستمر إصدار تصحيحات (2.8.1 و2.8.2 وما إلى ذلك) تتضمّن إصلاحات الأخطاء وتحديثات التبعيات. يلتزم الفريق بهذا العمل إلى أن يصبح الإصدار 3 من Room مستقرًا.

نصائح أخيرة

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

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