تم طرح الإصدار الأوّلي الأول من Room 3.0. Room 3.0 هو إصدار رئيسي من المكتبة يركّز على 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 (AP) وKAPT. Room 3.0 هو معالج 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 APIs، يُرجى الاطّلاع على مستندات SQLiteDriver APIs.
لمزيد من التفاصيل حول كيفية نقل بيانات 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 على الويب
يتوافق Kotlin Multiplatform مع JS وWasmJS، ويقدّم بعضًا من أهم التغييرات في واجهة برمجة التطبيقات. على وجه التحديد، العديد من واجهات برمجة التطبيقات في Room 3.0 هي دوال تعليق لأنّ الدعم المناسب لوحدة التخزين على الويب غير متزامن. تم أيضًا تعديل واجهات برمجة تطبيقات SQLiteDriver لتتوافق مع الويب، ويتوفّر برنامج تشغيل ويب جديد غير متزامن في androidx.sqlite:sqlite-web. وهو برنامج تشغيل يستند إلى Web Worker يتيح الاحتفاظ بقاعدة البيانات في نظام الملفات الخاص بالمصدر (OPFS).
لمزيد من التفاصيل حول كيفية إعداد Room for the Web، يُرجى الاطّلاع على ملاحظات إصدار 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" في ملاحظات الإصدار 3.0 من Room.
وضع الصيانة في Room 2.x
بما أنّ تطوير Room سيركّز على Room 3، سيدخل الإصدار الحالي Room 2.x في وضع الصيانة. وهذا يعني أنّه لن يتم تطوير أي ميزات رئيسية، ولكن سيستمر طرح إصدارات التصحيح (2.8.1 و2.8.2 وما إلى ذلك) مع إصلاحات الأخطاء وتحديثات التبعيات. يلتزم الفريق بهذا العمل حتى تصبح Room 3 مستقرة.
الأفكار الختامية
نحن متحمّسون جدًا بشأن إمكانات Room 3.0 والفرص التي تتيحها لمنظومة Kotlin المتكاملة. تابِعنا لمعرفة آخر الأخبار بينما نواصل هذه الرحلة.
-
أخبار المنتجاتلن تتمكّن التطبيقات التي تستهدف إصدار Android القادم من تعديل جهات الاتصال مباشرةً باستخدام إذن WRITE_CONTACTS.
Roxanna Aliabadi Walker • مدّة القراءة: 6 دقائق -
أخبار المنتجاتمع تسارع وتيرة تطوير الذكاء الاصطناعي الوكيل، تصل هندسة Android إلى آفاق جديدة ومثيرة: الانتقال من الإكمال التلقائي للرموز البرمجية إلى الوكلاء الذين ينفّذون المهام من البداية إلى النهاية تحت توجيهك. لديك حرية الاختيار والمرونة الكاملة في النماذج والوكلاء الذين تستخدمهم.
Jason Buchel • مدّة القراءة: 3 دقائق -
أخبار المنتجاتواليوم، شاركنا كيف ننتقل برؤيتنا "أكثر من مجرد متجر" إلى الفصل التالي. من علامة التبويب "أنت"، التي أصبحت الآن الصفحة الرئيسية الشخصية لأكثر من 250 مليون مستخدم نشط شهريًا، إلى منصة الألعاب الموحّدة التي تربط أكثر من 700 مليون ملف شخصي للّاعبين، يلبّي Google Play احتياجات المستخدمين أينما كانوا.
Paul Feng • مدّة القراءة: 3 دقائق
يمكنك تلقّي آخر الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.