تم طرح الإصدار الأوّلي الأول من 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 بعد الآن: ينشئ Room 3.0 رموز Kotlin حصريًا. يتوافق هذا مع نموذج Kotlin-first المتطوّر، كما أنّه يبسّط قاعدة الرموز البرمجية وعملية التطوير، ما يتيح إجراء تكرارات أسرع.
- التركيز على KSP: سنوقف أيضًا دعم معالجة التعليقات التوضيحية في Java (AP) وKAPT. يُعدّ الإصدار 3.0 من Room معالجًا لـ KSP (معالجة رموز Kotlin) فقط، ما يتيح معالجة أفضل لقواعد رموز Kotlin البرمجية بدون التقيد بلغة Java.
- الكوروتينات أولاً: يتبنّى الإصدار Room 3.0 الكوروتينات في Kotlin، ما يجعل واجهات برمجة التطبيقات الخاصة به تعتمد على الكوروتينات أولاً. تُعدّ الكوروتين إطار عمل غير متزامن متوافق مع 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 بدون التأثير في بقية قاعدة الرموز البرمجية.
يتطلّب الإصدار Room 3.0 أيضًا استخدام Coroutines، وبشكل أكثر تحديدًا، يجب أن تكون دوال DAO معلّقة ما لم تكن تعرض نوعًا تفاعليًا، مثل Flow. لا يسمح الإصدار 3.0 من Room بحظر دوال 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 على الويب
يتيح Kotlin Multiplatform استخدام JS وWasmJS، ويقدّم بعضًا من أهم التغييرات في واجهة برمجة التطبيقات. على وجه التحديد، العديد من واجهات برمجة التطبيقات في Room 3.0 هي دوال تعليق لأنّ الدعم المناسب لوحدة التخزين على الويب غير متزامن. تم أيضًا تعديل واجهات برمجة تطبيقات SQLiteDriver لتتوافق مع الويب، ويتوفّر برنامج تشغيل ويب جديد غير متزامن في androidx.sqlite:sqlite-web. وهو برنامج تشغيل مستند إلى Web Worker يتيح الاحتفاظ بقاعدة البيانات في نظام الملفات الخاص بالمصدر (OPFS).
لمزيد من التفاصيل حول كيفية إعداد Room for the Web، يُرجى الاطّلاع على ملاحظات الإصدار 3.0 من Room.
أنواع القيم المخصّصة التي تم إرجاعها من 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 المتكاملة. تابِعنا لمعرفة آخر الأخبار بينما نواصل هذه الرحلة.
-
أخبار المنتجاتفي عصر الذكاء الاصطناعي، لم يعُد المستخدمون يكتفون بالنقر على التطبيقات، بل يعبّرون عن أهداف عالية المستوى ويتوقّعون من وكلاء الذكاء الاصطناعي، مثل Gemini، إكمال مهام متعددة الخطوات، أحيانًا على تطبيقات متعددة على أجهزتهم.
Jingyu Shi • مدّة القراءة: 4 دقائق -
أخبار المنتجاتواليوم، في مؤتمر Android Dev Summit، نعلن عن توفير العديد من الأدوات وواجهات برمجة التطبيقات المصمَّمة لإزالة العقبات اليومية ومنحك المزيد من المرونة لإنشاء تطبيقات Android رائعة.
Matthew McCullough • مدّة القراءة: 4 دقائق -
أخبار المنتجاتأصبح الإصدار استوديو Android Rabbit 2 ثابتًا الآن وجاهزًا للاستخدام في مرحلة الإنتاج. يتضمّن هذا الإصدار ميزات رئيسية لتحسين عملية التطوير، مثل ميزة "استخدام وكيلك الخاص" وميزات جديدة في "محاكي الواقع الممتد" وتحديث LeakCanary وأداة جديدة لإدارة مهارات الوكيل ومراجعة الرموز البرمجية المستندة إلى الذكاء الاصطناعي والمزيد.
Matthew Warner • مدّة القراءة: 3 دقائق
يمكنك الحصول على آخر الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.