تم إصدار الإصدار الأوّلي الأول من 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-first المتطوّر، كما أنّه يبسّط قاعدة الرموز البرمجية وعملية التطوير، ما يتيح إجراء تكرارات أسرع.
- التركيز على KSP: سنوقف أيضًا إتاحة استخدام Java Annotation Processing (AP) وKAPT. الإصدار 3.0 من Room هو معالج KSP (معالجة رموز Kotlin البرمجية) فقط، ما يتيح معالجة أفضل لقواعد رموز Kotlin البرمجية بدون أن تكون محدودة بلغة Java.
- الكوروتينات أولاً: يتبنّى الإصدار 3.0 من Room الكوروتينات في Kotlin، ما يجعل واجهات برمجة التطبيقات الخاصة به تعتمد على الكوروتينات أولاً. تُعدّ Coroutines إطار عمل غير متزامن متوافق مع 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 وCoroutines أولاً
وبما أنّ Room 3.0 لم يعُد يتيح إنشاء رموز Java البرمجية، فهو يتطلّب أيضًا استخدام 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. يمكنك البدء في نقل البيانات إلى واجهات برمجة التطبيقات الخاصة ببرامج التشغيل اليوم باستخدام الإصدار 2.7.0 من Room والإصدارات الأحدث، وننصحك بشدة بتجنُّب أي استخدام إضافي لـ SupportSQLite. إذا نقلت عمليات دمج Room إلى واجهات برمجة تطبيقات SQLiteDriver، سيكون الانتقال إلى Room 3.0 أسهل لأنّ تغيير الحزمة يتضمّن في الغالب تعديل مراجع الرموز (عمليات الاستيراد) وقد يتطلّب الحدّ الأدنى من التغييرات على مواقع الاستدعاء.
للحصول على نظرة عامة موجزة على واجهات برمجة التطبيقات SQLiteDriver، يُرجى الاطّلاع على مستندات واجهات برمجة التطبيقات SQLiteDriver.
لمزيد من التفاصيل حول كيفية نقل بيانات Room لاستخدام واجهات برمجة تطبيقات SQLiteDriver، يُرجى الاطّلاع على المستندات الرسمية لنقل البيانات من SupportSQLite.
برنامج تضمين SupportSQLite في Room
ندرك أنّ إزالة 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 لإتاحة نقل البيانات إلى الإصدار 3.0 من Room مع مواصلة إتاحة استخدام SupportSQLite المهم.
على سبيل المثال، يمكن استبدال عمليات استدعاء roomDatabase.openHelper.writableDatabase بـ roomDatabase.getSupportWrapper() وسيتم توفير برنامج تضمين حتى إذا تم استدعاء setDriver() في أداة إنشاء Room.
لمزيد من التفاصيل، يمكنك الاطّلاع على مستندات room-sqlite-wrapper.
دعم Room وSQLite على الويب
تتيح هذه الإصدارات استهداف 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.
على سبيل المثال، سيكون محوّل Paging في العنصر androidx.room3:room3-paging ويُطلق عليه اسم PagingSourceDaoReturnTypeConverter. في المقابل، بالنسبة إلى LiveData، يتوفّر المحوّل في androidx.room3:room3-livedata ويُعرف باسم LiveDataDaoReturnTypeConverter.
لمزيد من التفاصيل، يُرجى الاطّلاع على قسم "محوّلات نوع القيمة التي تم إرجاعها في DAO" في ملاحظات الإصدار 3.0 من Room.
وضع الصيانة في Room 2.x
بما أنّ تطوير Room سيركّز على Room 3، سيدخل الإصدار الحالي Room 2.x في وضع الصيانة. وهذا يعني أنّه لن يتم تطوير أي ميزات رئيسية، ولكن سيستمر إصدار حِزم التصحيح (2.8.1 و2.8.2 وما إلى ذلك) مع إصلاحات الأخطاء وتحديثات التبعيات. يواصل الفريق العمل على هذه الميزة إلى أن يصبح Room 3 مستقرًا.
أفكار أخيرة
نحن متحمّسون جدًا بشأن إمكانات Room 3.0 والفرص التي تتيحها لمنظومة Kotlin المتكاملة. يُرجى متابعتنا لمعرفة آخر الأخبار بينما نواصل هذه الرحلة.
-
أخبار المنتجاتشاركنا اليوم كيف ننتقل برؤيتنا "أكثر من مجرد متجر" إلى الفصل التالي. من علامة التبويب "أنت"، التي أصبحت الآن الصفحة الرئيسية الشخصية لأكثر من 250 مليون مستخدم نشط شهريًا، إلى منصة الألعاب الموحّدة التي تربط أكثر من 700 مليون ملف شخصي للّاعبين، يلبّي Google Play احتياجات المستخدمين أينما كانوا.
Paul Feng • مدّة القراءة: 3 دقائق -
أخبار المنتجاتبصفتك مطوّر تطبيقات Android، تتوفّر لك خيارات عديدة عندما يتعلّق الأمر بالوكلاء والنماذج اللغوية الكبيرة والأدوات وواجهات سطر الأوامر التي تستخدمها لتطوير التطبيقات. هدفنا هو مساعدتك في إنشاء تطبيقات Android رائعة وعالية الجودة، بغض النظر عن الطريقة التي تختارها لإنشائها.
Simona Milanovic • مدّة القراءة: 4 دقائق -
أخبار المنتجاتنعمل باستمرار على توسيع نطاق منصة الاشتراك في Google Play لمساعدتك في تعزيز النمو والتكيّف مع نماذج الأعمال الجديدة وتلبية احتياجات المستخدمين أينما كانوا.
Sheenam Mittal • مدّة القراءة: 4 دقائق
يمكنك تلقّي آخر الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.