تم إطلاق الإصدار الأوّلي الأول من Room 3.0. Room 3.0 هو إصدار رئيسي من المكتبة يتضمّن تغييرات غير متوافقة ويركّز على Kotlin Multiplatform (KMP)، كما يتيح استخدام JavaScript وWebAssembly (WASM) بالإضافة إلى إمكانية استخدامه على Android وiOS وJVM.
في هذه المدوّنة، نوضّح التغييرات غير المتوافقة، والأسباب التي أدّت إلى إطلاق الإصدار 3.0 من Room، والإجراءات المختلفة التي يمكنك اتّخاذها للانتقال من الإصدار 2.0.
تغييرات قد تؤدي إلى أعطال
يتضمّن الإصدار 3.0 من Room التغييرات التالية في واجهة برمجة التطبيقات التي قد تؤدي إلى أعطال:
- إيقاف واجهات برمجة تطبيقات SupportSQLite نهائيًا: يعتمد الإصدار 3.0 من Room بشكل كامل على واجهات برمجة تطبيقات برنامج التشغيل androidx.sqlite. تتوافق واجهات برمجة التطبيقات SQLiteDriver مع KMP، كما أنّ إزالة اعتماد Room على واجهة برمجة التطبيقات لنظام التشغيل Android يؤدي إلى تبسيط مساحة واجهة برمجة التطبيقات لنظام التشغيل Android لأنّه يتجنّب وجود نظامَين خلفيَين محتملَين.
- التوقّف عن إنشاء رموز Java البرمجية: لا ينشئ Room 3.0 سوى رموز Kotlin البرمجية. يتوافق ذلك مع نموذج Kotlin-first المتطوّر، كما أنّه يبسّط قاعدة الرموز البرمجية وعملية التطوير، ما يتيح إجراء تكرارات أسرع.
- التركيز على KSP: سنوقف أيضًا إتاحة استخدام Java Annotation Processing (AP) وKAPT. الإصدار 3.0 من Room هو معالج KSP (معالجة رموز Kotlin البرمجية) فقط، ما يتيح معالجة أفضل لقواعد رموز Kotlin البرمجية بدون أن تكون محدودة بلغة Java.
- الكوروتينات أولاً: يتوافق الإصدار 3.0 من Room مع كوروتينات Kotlin، ما يجعل واجهات برمجة التطبيقات فيه متوافقة مع الكوروتينات أولاً. إنّ Coroutines هو إطار عمل غير متزامن متوافق مع 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 و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. يمكنك البدء في نقل البيانات إلى واجهات برمجة التطبيقات الخاصة بمحرك قاعدة البيانات اليوم باستخدام Room 2.7.0 والإصدارات الأحدث. وننصحك بشدة بتجنُّب أي استخدام آخر لـ SupportSQLite. في حال نقل عمليات دمج Room إلى واجهات برمجة تطبيقات SQLiteDriver، ستكون عملية الانتقال إلى الإصدار 3.0 من Room أسهل لأنّ تغيير الحزمة يتضمّن في الغالب تعديل مراجع الرموز (عمليات الاستيراد) وقد يتطلّب إجراء تغييرات بسيطة في مواقع الاستدعاء.
للحصول على نظرة عامة موجزة حول واجهات برمجة التطبيقات SQLiteDriver، يُرجى الاطّلاع على مستندات واجهات برمجة التطبيقات SQLiteDriver.
لمزيد من التفاصيل حول كيفية نقل Room لاستخدام واجهات برمجة التطبيقات SQLiteDriver، اطّلِع على المستندات الرسمية لنقل البيانات من SupportSQLite.
برنامج تضمين Room SupportSQLite
ندرك أنّ إزالة SupportSQLite بالكامل قد لا يكون ممكنًا على الفور لجميع المشاريع. لتسهيل عملية الانتقال هذه، قدّم الإصدار 2.8.0 من Room، وهو أحدث إصدار من سلسلة 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 مع الويب
تتيح هذه النسخة استهداف JS وWasmJS في Kotlin Multiplatform، وتتضمّن بعضًا من أهم التغييرات في واجهة برمجة التطبيقات. على وجه التحديد، العديد من واجهات برمجة التطبيقات في 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.
على سبيل المثال، سيكون محوّل التصفّح على صفحات متعدّدة في العنصر androidx.room3:room3-paging ويُطلق عليه اسم PagingSourceDaoReturnTypeConverter. في الوقت الحالي، يتوفّر المحوّل في LiveData ضمن androidx.room3:room3-livedata ويُطلق عليه اسم LiveDataDaoReturnTypeConverter.
لمزيد من التفاصيل، اطّلِع على قسم "محوّلات نوع الإرجاع في DAO" ضمن ملاحظات إصدار Room 3.0.
وضع الصيانة في Room 2.x
بما أنّ تطوير Room سيركّز على الإصدار 3، سيدخل الإصدار الحالي 2.x من Room وضع الصيانة. وهذا يعني أنّه لن يتم تطوير أي ميزات رئيسية، ولكن سيظل يتم إصدار حِزم تصحيح (2.8.1 و2.8.2 وما إلى ذلك) تتضمّن إصلاحات للأخطاء وتحديثات للتبعيات. يواصل الفريق العمل على ذلك إلى أن يصبح الإصدار 3 من Room مستقرًا.
أفكار أخيرة
نحن متحمّسون جدًا بشأن إمكانات Room 3.0 والفرص التي يتيحها لمنظومة Kotlin المتكاملة. يُرجى متابعتنا لمعرفة المزيد من الأخبار بينما نواصل هذه الرحلة.
-
أخبار المنتجاتيسرّنا اليوم الإعلان عن الإصدار الثابت من مكتبتَي AndroidX Security State 1.1.0 وSecurity State Provider 1.0.0.
Maunik Shah, Alec Garcia, Joseph Yong • مدة القراءة: 4 دقائق -
أخبار المنتجاتنطرح اليوم المجموعة الأولى من المهام الطويلة الأمد (LHT)، وهي مهام معقّدة جدًا يستغرق إكمالها عدة أيام أو حتى أسبوع من المهندس. نقدّم أيضًا ميزة التقييم المستند إلى الوكيل، بدءًا من الوكلاء من مقدّمي النماذج المعنيين.
Matthew McCullough • يستغرق الاطِّلاع على المقال 3 دقائق -
أخبار المنتجاتأصبحت ميزة تصحيح الأخطاء لاسلكيًا على Android أسرع وأكثر موثوقية وأسهل في الإعداد من أي وقت مضى. في الإصدار 2.0 من ميزة "تصحيح الأخطاء عبر Wi-Fi" في "جسر تصحيح الأخطاء لنظام Android"، قدّمنا حزمة خادم جديدة وطريقة أكثر ذكاءً للتعامل مع الشبكة بهدف معالجة ملاحظات المطوّرين بشأن الثغرات في سهولة الاستخدام.
Steven Jenkins, Sherif Eid, Fabien Sanglard • يستغرق الاطّلاع على المقال دقيقة واحدة
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.