
قدم Google I / O 2018 بديلاً لمكتبات الدعم الحالية - AndroidX
في البداية ، تم تصميم مكتبات الدعم للتوافق مع الإصدارات السابقة لواجهات برمجة التطبيقات الجديدة وكانت مرتبطة ارتباطًا وثيقًا بنظام التشغيل. تم تطوير مكتبات الدعم في الفروع الداخلية ، والتي تم دمجها بشكل دوري في مشروع Android Open Source Project (AOSP). حد هذا النهج من طلب سحب الدمج من المجتمع إلى فترات زمنية صغيرة عندما تمت مزامنة رمز AOSP ورمز Google الداخلي. بالإضافة إلى ذلك ، للعمل مع مكتبات الدعم ، كان من الضروري ضخ كل كود النظام الأساسي ، وهذا أكثر من 40 جيجابايت من التعليمات البرمجية المصدر. بالنسبة لمحرك الأقراص الذي تبلغ سعته 250 غيغابايت ، يعد هذا كثيرًا.
الوظيفة الحالية لمكتبات الدعم أوسع بكثير من الفكرة الأصلية. على سبيل المثال ، تم تنفيذ مكون لتبسيط تطوير واجهة مستخدم AppCompat ، مكون للعمل مع قواعد بيانات الغرفة ، مكون لمهام WorkManager الخلفية. تتوافق العديد من هذه المكتبات في البداية مع الإصدارات السابقة وترتبط بشكل فضفاض بواجهة برمجة تطبيقات Android. يشير الرقم الموجود في رقم مكتبة الدعم إلى الحد الأدنى من مستوى API الذي يدعمه. على سبيل المثال ، يدعم support-v7 الإصدار 7 من واجهة برمجة تطبيقات Android والإصدارات الأحدث. ومع ذلك ، بدءًا من الإصدار 26.0.0 ، تدعم مكتبات الدعم Android API 14 والإصدارات الأحدث. ألم منفصل هو الحاجة إلى تحديث جميع مكتبات الدعم في وقت واحد. كل هذا يشير إلى أن مكتبات الدعم أصبحت متقادمة وتحتاج إلى إعادة التفكير.
أمضى فريق التطوير عدة سنوات في عزل مكتبات الدعم في مشروع صغير منفصل يمكنك العمل عليه باستخدام Android Studio و Gradle. تم نقل التطوير إلى فرع منفصل ، والذي أصبح حديثًا عامًا. تسمى المكتبات المحدثة AndroidX. فرق آخر مهم بين المكتبات الجديدة هو إمكانية التحديثات المستقلة. تعد Google بالتوافق الثنائي في إطار إصدار رئيسي واحد ، مما سيسمح باستخدام الإصدار الجديد من recyclerview الإصدار 1.0 والإصدار 1.9 من AppCompat في نفس المشروع.
في رأيي ، هذه هي الخطوة الصحيحة والمنطقية في تطوير مكتبات الدعم. اضطررت إلى تخصيص المكونات بشدة من مكتبات الدعم عدة مرات ، مما أدى إلى الحاجة إلى إنشاء حزمة com.android.support في مشروعي ... للوصول إلى فئات / طرق / حقول الحزمة الخاصة.
الآن أقترح "اختراق" بعض المكتبة من عائلة AndroidX معي. كبرنامج تعليمي ، اخترت CardView. سوف أقوم بالتأثير على سلوك CardView دون إجراء أي تغييرات على الكود باستخدامه.
نحتاج إلى: كمبيوتر يعمل بنظام Linux أو MacOS (Windows غير مدعوم) ، Android SDK ، اختياريًا Android Studio (استخدمت الإصدار 3.1.3)
ماذا عن النوافذ؟لتنزيل المصادر ، يوصى باستخدام أداة الريبو ، التي لا تتوفر لنظام Windows. يمكن أيضًا تنزيل المصادر باستخدام git ، على سبيل المثال ، مثل هذا: git clone --single-branch -b androidx-master-dev https://android.googlesource.com/platform/frameworks/support
ومع ذلك ، في هذه الحالة لن تنزيل الأدوات المساعدة والاعتمادات المترجمة. لم أتحقق من مدى أهمية البناء
للبدء ، قمت بإعداد مثال صغير باستخدام AndroidX.
يسلط الضوء على:
باستخدام AndroidX
def cardViewVer = '1.0.0-beta01' dependencies { implementation "androidx.cardview:cardview:$cardViewVer" }
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="32dp" android:layout_marginEnd="32dp" android:layout_marginLeft="32dp" android:layout_marginRight="32dp" android:layout_marginStart="32dp" android:layout_marginTop="32dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </androidx.cardview.widget.CardView> </FrameLayout>
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
ونتيجة لذلك ، نحصل على التطبيق التالي:

دعونا ننتقل إلى AndroidX
أولاً ، تحتاج إلى تثبيت أداة الريبو ، التي تم إنشاؤها لتبسيط العمل باستخدام git في سياق android.
نحن ننشئ مجلد عمل لعمليات التلاعب الخاصة بنا ، على الرغم من أنه يمكنك استخدام الدليل الرئيسي أيضًا.
mkdir androidX
قم بتثبيت الأداة
d androidX mkdir bin curl https://storage.googleapis.com/git-repo-downloads/repo > ./bin/repo chmod a+x ./bin/repo PATH={some_path}/androidX/bin/:$PATH
دعني أوضح ما فعلناه للتو:
في مجلد androidX ، أنشأنا مجلد الريبو ، حيث قمنا بتنزيل الملف على https://storage.googleapis.com/git-repo-downloads/repo ، وجعلنا الملف قابلاً للتنفيذ وقمنا بإضافة مجلد المحذوفات إلى PATH كجزء من جلسة عمل المحطة الطرفية الحالية.
في حالتي ، بدا الأمر الأخير على النحو التالي: PATH = ~ / Work / projects / androidX / bin /: $ PATH
تنزيل المصدر AndroidX:
قم بإنشاء مجلد مصدر androidX / androidX وجعله محدثًا
mkdir androidX-source cd androidX-source
نقوم بتهيئة المستودع المحلي. يقوم بتنزيل حوالي 16 ميغابايت من البيانات حول الفروع الموجودة في المستودع.
repo init -u https://android.googlesource.com/platform/manifest -b androidx-master-dev
في هذه العملية ، سيتم سحب اسم المستخدم والبريد من التكوين العام لـ gig ، وفي حالتي ، بدا الأمر كما يلي:
Your identity is: Andrew <me@example.com> If you want to change this, please re-run 'repo init' with --config-name , . . Testing colorized output (for 'repo diff', 'repo status'): black red green yellow blue magenta cyan white bold dim ul reverse Enable color display in this user account (y/N)?
أجبت بالإيجاب على السؤال الأخير.
في النهاية نحصل على رسالة
repo has been initialized in /Users/{user}/Work/projects/androidX/androidX-source
بعد ذلك ، قم بتنزيل المصدر مباشرة (حوالي 3 غيغابايت)
repo sync -j8 -c
يمكننا فتح المصادر التي تم تنزيلها في Android Studio أو أي محرر آخر. يقع المجلد الجذر لمشروع gradle في: androidX/androidX-source/frameworks/support/
هناك العديد من الوحدات مع ميزات مختلفة والعديد من تطبيقات الاختبار. يمكننا تجميعها وتثبيتها للتحقق من الأداء.
افتح فئة androidx.cardview.widget.RoundRectRrawDrawable في وحدة عرض البطاقات
أضف نكتة غير ضارة إلى طريقة onDraw
canvas.drawText(“Hacked!”, 100, 100, paint);
التصحيح الكامل
بالنسبة للمشروع ، تم وصف مهمة createArchive gradle ، والتي ستجمع مكتبات androidX وتضعها في المستودع المحلي. عنوان المستودع: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo
لاستخدامه ، يجب تحديد المسار في ملف بناء الجذر.
maven { url 'androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo' }
يرجى ملاحظة أن النسخة المجمعة قد تكون أحدث من مستودع Google. في وقت كتابة هذه السطور ، قمت بتجميع إصدار مكتبة androidX 1.0.0-rc01. يمكنك عرض إصدار المكتبة المترجمة في مستودع androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo/androidx/cardview/cardview/maven-metadata.xml
المحلي: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo/androidx/cardview/cardview/maven-metadata.xml
مثال محدث
سنعيد بناء تطبيقنا ونرى الصورة التالية:

تم تصحيح AndroidX بنجاح!
ماذا يعطينا هذا:
- يمكننا إصلاح المشكلات الحرجة دون انتظار التحديث من Google. بالمناسبة ، يقبل فريق AndroidX طلبات السحب.
- قم بتخصيص مكتبة androidX بقوة.
روابط ذات صلة:
توثيق مكتبة الدعم
مشاركة مدونة المطور
دليل مساهمة AndroidX
تعقب المهام AndroidX
مصادر AndroidX