تم إطلاق الإصدار الأوّلي الأول من Room 3.0. الإصدار 3.0 من Room هو إصدار رئيسي يتضمّن تغييرات غير متوافقة مع الإصدارات السابقة من المكتبة، ويركّز على 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
وبما أنّ الإصدار 3.0 من Room لم يعُد يتيح إنشاء رموز Java، فهو يتطلّب أيضًا استخدام KSP ومترجم Kotlin حتى إذا كانت قاعدة الرموز البرمجية التي تتفاعل مع Room مكتوبة بلغة Java. يُنصح بإنشاء مشروع متعدد الوحدات يتم فيه تركيز استخدام Room، ويمكن تطبيق إضافة Kotlin Gradle وKSP بدون التأثير في بقية قاعدة الرموز البرمجية.
يتطلّب Room 3.0 أيضًا استخدام Coroutines، وبشكلٍ أكثر تحديدًا، يجب أن تكون دوال DAO قابلة للتعليق ما لم تعرض نوعًا تفاعليًا، مثل Flow. لا يسمح Room 3.0 بحظر دوال DAO. يمكنك الاطّلاع على مستندات "كوروتين" على Android حول كيفية بدء دمج "كوروتين" في تطبيقك.
نقل البيانات إلى واجهات برمجة تطبيقات SQLiteDriver
مع التوقّف عن استخدام SupportSQLite، ستحتاج التطبيقات إلى نقل البيانات إلى واجهات برمجة التطبيقات SQLiteDriver. يُعدّ نقل البيانات هذا ضروريًا للاستفادة من جميع مزايا Room 3.0، بما في ذلك السماح باستخدام مكتبة SQLite المجمَّعة من خلال BundledSQLiteDriver. يمكنك البدء في نقل البيانات إلى واجهات برمجة التطبيقات الخاصة بمحرك قاعدة البيانات اليوم باستخدام الإصدار 2.7.0 من Room أو الإصدارات الأحدث. وننصحك بشدة بتجنُّب أي استخدام آخر لمكتبة 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 مع الويب
تتيح هذه النسخة استخدام Kotlin Multiplatform مع 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.
على سبيل المثال، سيكون محوّل التصفّح على صفحات متعدّدة في العنصر 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 وما إلى ذلك) مع إصلاحات الأخطاء وتحديثات التبعيات. يواصل الفريق العمل على ذلك إلى أن يصبح الإصدار 3 من Room مستقرًا.
نصائح أخيرة
نحن متحمّسون جدًا بشأن إمكانات Room 3.0 والفرص التي يتيحها لنظام Kotlin المتكامل. يُرجى متابعتنا لمعرفة المزيد من الأخبار بينما نواصل هذه الرحلة.
متابعة القراءة
-
أخبار المنتجات
يسرّنا الإعلان عن أنّنا أتحنا رسميًا استخدام Unreal Engine و Godot على Android XR. نحن بصدد إطلاق أداتَين جديدتَين مصمّمتَين لتعزيز إنتاجيتك وإتاحة إمكانات جديدة للواقع الممتد، وهما Android XR Engine Hub وAndroid XR Interaction Framework.
Luke Hopkins • مدة القراءة: 4 دقائق
-
أخبار المنتجات
مع إصدار Android 17، سننتقل إلى معيار تطوير تكيفي أول. لم يعُد المستخدمون يعتمدون على شكل جهاز واحد، بل ينتقلون بين الهواتف والهواتف القابلة للطي والأجهزة اللوحية وأجهزة الكمبيوتر المحمولة وشاشات السيارات وبيئات الواقع الممتد الغامرة على مدار اليوم.
Fahd Imtiaz • مدة القراءة: 4 دقائق
-
أخبار المنتجات
يسرّنا مشاركة ميزات Google TV وأدوات المطوّرين المصمَّمة لزيادة إمكانية العثور على المحتوى الخاص بك وإعداد تطبيقك لتجارب التلفزيون المستقبلية.
Paul Lammertsma • مدة القراءة: 4 دقائق
البقاء على اطّلاع على آخر التحديثات
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.