موضوع الانتقال إلى 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 تجربة مثيرة ، وربما إذا لم تكن لديك حاجة ملحة ، فيجب عليك الانتظار قليلاً معها. بعد كل شيء ، عندما تتم إزالة معظم أشعل النار من مسارك ، سيكون من الأسهل والأسرع القيام بذلك. لكنني شخصياً ، أنا سعيد لأن هذا المسار قد مر ، وسوف تلتئم المطبات على الجبين ، وستبقى التجربة المفيدة معي.