التحول إلى Androidx أو مغامرة مثيرة

موضوع الانتقال إلى Androidx الآن في الهواء. هناك بالفعل مقالة قصيرة باللغة الإنجليزية كتبها دانيال ليو ، هناك تقرير . لكن جميعهم ينظرون بشكل سطحي إلى حد ما في سيناريو الانتقال الموضح في وثائق Google .

أريد أن أشارك تجربتي. يستخدم مشروعي Moxy و Cicerone ، أجد تجربتي مثيرة للاهتمام ، لأنه في قنوات البرقية الرسمية لهذه المكتبات ، يظهر السؤال بشكل دوري متى سيتم نقلهم إلى Androidx.

ما عليك سوى الترحيل إلى AndroidX ...


من أجل نقل المشروع إلى Androidx ، تحتاج إلى اتباع بعض الخطوات البسيطة:

1. قم بتثبيت compileSdkVersion 28 و targetSdkVersion 28 ، وقم بتحديث جميع مكتبات الدعم إلى أحدث الإصدارات.

2. في ملف gradle.properties ، أضف السطور:

android.useAndroidX=true android.enableJetifier=true 

3. إذا كنت تستخدم Android Studio 3.2 بالفعل ، فاستخدم إعادة البيع:


سيقوم بمعظم العمل (أو أقل) من أجلك.

إذا كنت لا تستخدم Git أو نظام تحكم إصدار آخر لسبب ما ، فستكون لديك في هذه المرحلة فرصة لإنشاء أرشيف مشروع:


انقر فوق الزر Migrate ، وحدد مكان حفظ الأرشيف ، وبعد فترة ، نحصل على نتيجة فحص المشروع قبل إعادة الهيكلة:


هنا نرى ما هي التبعيات في build.gradle وفي توجيهات الاستيراد التي سيتم استبدالها. في مثال فئة MainActivity ، كما يمكن رؤيته في لقطة الشاشة أعلاه ، سيتم استبدال تبعية واحدة: android.support.v4.view.GravityCompat ، ولكن إذا فتحنا هذا الفصل ، فسوف نرى أن هناك بالفعل ثلاث تبعيات أخرى تحتاج إلى استبدالها:


لم أفهم سبب هذا السلوك الانتقائي ، ولكن يجب إصلاح هذه التبعيات يدويًا. انقر فوق "Do Refactor".

إذا كنت لا تستخدم Android Studio 3.2 ، فسيتم تصحيح جميع التبعيات يدويًا
سيكون من الضروري تغيير التبعيات في build.gradle (للتوضيح ، علّقت على التبعيات القديمة):



يمكن العثور على قائمة كاملة بالبدائل هنا .

ثم قم بمزامنة المشروع مع Gradle واحصل على مجموعة من الأخطاء. هذه توجيهات الاستيراد في فصولك ، تشير إلى الحزم القديمة ، تحتاج إلى تغييرها وفقًا لهذا الجدول .

لذا ، نظرًا لأن الاستوديو لا يمكن أن يحل محل جميع التبعيات (ربما يمكنك ذلك ، فيمكن أن يتم تهنئتك) ، عندما تحاول بناء مشروع ، سترى قائمة مماثلة من الأخطاء:


عند فتح الفصل بأخطاء ، سنرى شيئًا مثل هذا:


نقوم بإزالة التبعيات القديمة ، وباستخدام مفتاح التشغيل السريع Alt + Enter ، نقوم باستيراد الفئات من حزمة androidx


وهكذا نصلح جميع الفئات. إذا كان الخطأ لا يتعلق بـ "الاستيراد" ، فلا تنتبه إليه ، على الأرجح أنه يرجع إلى نفس المشاكل في فئة أخرى.

على سبيل المثال:


ترتبط الأخطاء هنا بحقيقة أنه في فئة TimelineView تحتاج أيضًا إلى التخلص من مشاكل الاستيراد. عندما يتم إصلاح جميع الأخطاء ، نقوم بتنفيذ بنية المشروع مرة أخرى ، وربما نحصل على قائمة الأخطاء مرة أخرى ، فقط في الفصول الأخرى ، نواصل العملية التكرارية.

بالنسبة للأخطاء في الفئات التي تم إنشاؤها (Dagger أو DataBinding) ، لا تنتبه في هذه المرحلة. إذا لم تكن هناك أخطاء في فصولك ، وأقسم الاستوديو فقط على الكود الذي تم إنشاؤه ، فأنت بحاجة إلى تشغيل المشروع النظيف وإعادة بناء المشروع.


إذا لم يساعد ذلك ، يمكنك محاولة مسح ذاكرة التخزين المؤقت الاستوديو:


سيكون عليك مسح ذاكرة التخزين المؤقت مرة واحدة على الأقل ، بحيث يتم إنشاء الفئات التي تنشئ DataBinding أو الغرفة بشكل صحيح.

مكتبات خارجية


بشكل عام ، قمنا بتعيين إشارة android.enableJetifier = true فقط في مرحلة إنشاء المشروع ، يتم استبدال تبعيات المكتبات الخارجية بتبعيات AndroidX المقابلة تلقائيًا ، ولكن لسبب ما لا يحدث ذلك.

على أي حال ، قبل أن تفعل ما هو موضح أدناه ، تأكد من أن لديك هذه المشكلة وأن أحدث إصدارات المكتبات التي تستخدمها لم يتم ترجمتها بعد إلى AndroidX.

موكسي


يرث MainActivity في مشروعي من MvpAppCompatActivity هو فئة Moxy ، التي لم تتم ترجمتها حتى الآن إلى AndroidX حتى وقت كتابة هذا التقرير. لحل هذه المشكلة ، قمت بنسخ الصف إلى مشروعي ، في حزمة androidx منفصلة ، وقمت بإصلاح التبعيات الموجودة فيه. من الأفضل ترك اسم الفئة دون تغيير ، لذلك سيكون من الأسهل تحديث التبعيات.

يلزم إجراء نفس الإجراء للأجزاء ، لفئة MvpAppCompatFragment .

يرجى ملاحظة أن هناك نوعًا عامًا في هذه الفئات ، في حقل mMvpDelegate ، لا تنس إصلاح التبعية فيه ، فمن السهل عدم ملاحظته ، لأنه يعتمد على فئة Moxy ، وليس على فئة مكتبة الدعم.

Cicerone


لحل مشاكل Cicerone ، كان علي إنشاء نسخة من فئات SupportAppScreen و SupportAppNavigator في مشروعي. لاحظ أن فئة SupportAppNavigator تعتمد على SupportAppScreen. تذكر إصلاح هذا الاعتماد على نسختك.

الاستنتاجات


يعد التبديل إلى AndroidX تجربة مثيرة ، وربما إذا لم تكن لديك حاجة ملحة ، فيجب عليك الانتظار قليلاً معها. بعد كل شيء ، عندما تتم إزالة معظم أشعل النار من مسارك ، سيكون من الأسهل والأسرع القيام بذلك. لكنني شخصياً ، أنا سعيد لأن هذا المسار قد مر ، وسوف تلتئم المطبات على الجبين ، وستبقى التجربة المفيدة معي.

Source: https://habr.com/ru/post/ar430660/


All Articles