بقلم دانييل سانتياغو ريفيرا، مهندس برمجيات
تم إصدار ألفا الأول من Room 3.0! يعد Room 3.0 إصدارًا رئيسيًا من المكتبة التي تركز على Kotlin Multiplatform (KMP) وتضيف دعمًا لـ JavaScript وWebAssembly (WASM) بالإضافة إلى دعم سطح المكتب Android وiOS وJVM الحالي.
في هذه المدونة، نعرض الخطوط العريضة للتغييرات العاجلة، والأسباب الكامنة وراء الغرفة 3.0، والأشياء المختلفة التي يمكنك القيام بها للانتقال من الغرفة 2.0.
تتضمن الغرفة 3.0 التغييرات التالية في واجهة برمجة التطبيقات:
- إسقاط واجهات برمجة التطبيقات الخاصة بدعم SQLite: يتم دعم Room 3.0 بالكامل بواسطة واجهات برمجة تطبيقات برنامج التشغيل androidx.sqlite. تتوافق واجهات برمجة تطبيقات SQLiteDriver مع KMP، كما تعمل إزالة اعتماد Room على واجهة برمجة تطبيقات Android على تبسيط سطح واجهة برمجة التطبيقات لنظام Android لأنه يتجنب وجود واجهتين خلفيتين محتملتين.
- لا مزيد من إنشاء كود جافا: تقوم الغرفة 3.0 بإنشاء كود Kotlin حصريًا. يتماشى هذا مع نموذج Kotlin-first المتطور ولكنه أيضًا يبسط قاعدة التعليمات البرمجية وعملية التطوير، مما يتيح تكرارات أسرع.
- التركيز على KSP: نقوم أيضًا بإسقاط الدعم لـ Java Annotation Processing (AP) وKAPT. Room 3.0 هو فقط معالج KSP (معالجة رموز Kotlin)، مما يسمح بمعالجة أفضل لقواعد كود Kotlin دون التقيد بلغة Java.
- الكورتينز أولاً: تحتضن Room 3.0 كوروتينات Kotlin، مما يجعل واجهات برمجة التطبيقات الخاصة بها أولًا. Coroutines هو إطار عمل غير متزامن متوافق مع KMP، ويعد جعل Room غير متزامن بطبيعته مطلبًا بالغ الأهمية لدعم منصات الويب.
لمنع مشكلات التوافق مع تطبيقات Room 2.x الحالية وللمكتبات ذات التبعيات المتعدية للغرفة (على سبيل المثال، WorkManager)، توجد الغرفة 3.0 في حزمة جديدة مما يعني أنها تحتوي أيضًا على مجموعة جديدة ومعرفات أثرية. على سبيل المثال، androidx.room: وقت تشغيل الغرفة أصبح androidx.room3:room3-وقت التشغيل وفئات مثل androidx.room.RoomDatabase سوف يكون موجودا الآن في android.room3.RoomDatabase.
مع عدم وجود المزيد من إنشاء أكواد Java، يتطلب Room 3.0 أيضًا KSP ومترجم Kotlin حتى لو كانت قاعدة التعليمات البرمجية التي تتفاعل مع Room موجودة في Java. من المستحسن أن يكون لديك مشروع متعدد الوحدات حيث يتركز استخدام الغرفة ويمكن تطبيق Kotlin Gradle Plugin وKSP دون التأثير على بقية قاعدة التعليمات البرمجية.
تتطلب الغرفة 3.0 أيضًا أن يتم تعليق Coroutines وبشكل أكثر تحديدًا وظائف DAO ما لم تُرجع نوعًا تفاعليًا، مثل التدفق. لا تسمح الغرفة 3.0 بحظر وظائف DAO. راجع وثائق Coroutines على Android حول البدء في دمج Coroutines في تطبيقك.
مع التحول بعيدًا عن SupportSQLite، ستحتاج التطبيقات إلى الانتقال إلى SQLiteDriver APIs. يعد هذا الترحيل ضروريًا للاستفادة من المزايا الكاملة لـ Room 3.0، بما في ذلك السماح باستخدام مكتبة SQLite المجمعة عبر BundleSQLiteDriver. يمكنك البدء في الترحيل إلى واجهات برمجة تطبيقات برنامج التشغيل اليوم باستخدام Room 2.7.0+. نحن نشجعك بشدة على تجنب أي استخدام إضافي لـ SupportSQLite. إذا قمت بترحيل عمليات تكامل الغرفة الخاصة بك إلى واجهات برمجة تطبيقات SQLiteDriver، فسيكون الانتقال إلى Room 3.0 أسهل نظرًا لأن تغيير الحزمة يتضمن في الغالب تحديث مراجع الرموز (الواردات) وقد يتطلب الحد الأدنى من التغييرات في مواقع الاتصال.
نحن ندرك أن إزالة SupportSQLite بالكامل قد لا تكون ممكنة على الفور لجميع المشاريع. لتسهيل هذا الانتقال، قدمت Room 2.8.0، أحدث إصدار من سلسلة Room 2.0، قطعة أثرية جديدة تسمى androidx.room:room-sqlite-wrapper. توفر هذه الأداة واجهة برمجة التطبيقات المتوافقة التي تسمح لك بتحويل ملف RoomDatabase في دعمSQLiteDatabase، حتى إذا تم تعطيل واجهات برمجة تطبيقات SupportSQLite في قاعدة البيانات بسبب خطأ SQLiteDriver يجري تركيبها. يوفر هذا جسرًا مؤقتًا للمطورين الذين يحتاجون إلى مزيد من الوقت لترحيل قاعدة التعليمات البرمجية الخاصة بهم بشكل كامل. تستمر هذه القطعة الأثرية في الوجود في الغرفة 3.0 androidx.room3:room3-sqlite-wrapper لتمكين الترحيل إلى Room 3.0 مع الاستمرار في دعم استخدام SupportSQLite المهم.
على سبيل المثال، دعوات Database.openHelper.writableDatabase يمكن استبداله ب RoomDatabase.getSupportWrapper() وسيتم توفير المجمع حتى لو مجموعة السائق () يتم استدعاؤه على منشئ الغرفة.
يستهدف دعم Kotlin Multiplatform JS وWasmJS ويجلب بعضًا من أهم تغييرات واجهة برمجة التطبيقات. على وجه التحديد، العديد من واجهات برمجة التطبيقات في Room 3.0 هي وظائف تعليق نظرًا لأن الدعم المناسب لتخزين الويب يكون غير متزامن. تم أيضًا تحديث واجهات برمجة تطبيقات SQLiteDriver لدعم الويب ويتوفر برنامج تشغيل جديد غير متزامن للويب androidx.sqlite:sqlite-web. إنه برنامج تشغيل قائم على Web Worker يتيح استمرار قاعدة البيانات في نظام الملفات الخاص Origin (OPFS).
يقدم Room 3.0 القدرة على إضافة عمليات تكامل مخصصة إلى Room مشابهة لـ RxJava وPaging. من خلال واجهة برمجة تطبيقات التعليقات التوضيحية الجديدة التي تسمى @DaoReturnTypeConverter يمكنك إنشاء التكامل الخاص بك بحيث يمكن الوصول إلى التعليمات البرمجية التي تم إنشاؤها للغرفة في وقت التشغيل، مما يتيح ذلك @داو الوظائف التي لها أنواع الإرجاع المخصصة الخاصة بها دون الحاجة إلى انتظار فريق الغرفة لإضافة الدعم. يتم ترحيل عمليات التكامل الحالية لاستخدام هذه الوظيفة وبالتالي ستتطلب الآن من أولئك الذين يعتمدون عليها إضافة المحولات إلى @قاعدة البيانات أو @داو التعاريف.
على سبيل المثال، سيتم وضع محول الترحيل في المجلد android.room3:room3-ترحيل الصفحات قطعة أثرية ويسمى PagingSourceDaoReturnTypeConverter. وفي الوقت نفسه ل بيانات حية المحول موجود android.room3:room3-livedata ويسمى LiveDataReturnTypeConverter.
نظرًا لأن تطوير الغرفة سيركز على الغرفة 3، فإن إصدار الغرفة 2.x الحالي يدخل في وضع الصيانة. وهذا يعني أنه لن يتم تطوير أي ميزات رئيسية ولكن إصدارات التصحيح (2.8.1، 2.8.2، وما إلى ذلك) ستستمر مع إصلاحات الأخطاء وتحديثات التبعية. يلتزم الفريق بهذا العمل حتى تصبح الغرفة 3 مستقرة.
نحن متحمسون بشكل لا يصدق بشأن إمكانات Room 3.0 والفرص التي تفتحها لنظام Kotlin البيئي. ترقبوا المزيد من التحديثات ونحن نواصل هذه الرحلة!

