تتيح لك ترقية التبعيات الاستفادة من أحدث الميزات وإصلاحات الأخطاء والتحسينات. لترقية التبعيات، عليك معرفة كيفية حلّ Gradle للإصدارات التي تطلبها والمخاطر المعنيّة والخطوات التي يمكنك اتّخاذها للحدّ من هذه المخاطر.
راجِع استراتيجية الترقية
إنّ أهم خطوة في أي عملية ترقية هي تحليل المخاطر. حدِّد مدى شعورك بالارتياح تجاه كل تبعية ترقيتها. هناك العديد من الاعتبارات عند تحديد استراتيجية الترقية، بما في ذلك:
إنشاء مكتبة |
هل تنشئ تطبيقًا يتم تنزيله وتشغيله على جهاز؟ أم هل تنشئ مكتبة لمساعدة المطوّرين الآخرين في إنشاء تطبيقاتهم؟ إذا كنت بصدد إنشاء تطبيق، يجب أن تركّز على إبقاء تطبيقك محدّثًا ومستقرًا. إذا كنت بصدد إنشاء مكتبة، يجب التركيز على تطبيقات المطوّرين الآخرين. تؤثّر الترقيات في المستهلكين. في حال ترقية أحد التبعيات، يصبح هذا الإصدار مرشحًا لحلّ التبعيات في Gradle، ما قد يؤدي إلى إيقاف استخدام التطبيق لهذا التبعية. أولاً، عليك تقليل التبعيات في مكتبتك قدر الإمكان. وكلما قلّ عدد التبعيات، قلّ التأثير في حلّ التبعيات لدى المستخدِم. احرص على اتّباع التسمية الدلالية للمساعدة في الإشارة إلى أنواع التغييرات التي تجريها. على سبيل المثال، يتّبع AndroidX نظام الإصدارات الدلالية ويضيف مخطّط إصدار للإصدارات التجريبية. تجنَّب ترقية الإصدارات إلى ننصحك بإنشاء إصدار تجريبي من مكتبتك ليختبره المستخدمون في مرحلة مبكرة. اطّلِع على إرشادات التوافق مع الإصدارات القديمة لمؤلفي المكتبات للحصول على تفاصيل عن الحفاظ على توافق واجهة التطبيق الثنائية (ABI) في مكتبتك. استخدِم اختبارات الدمج والأدوات، مثل أداة التحقّق من التوافق الثنائي، للتأكّد من أنّ تغييرات ABI تتطابق مع التغيير المقصود في الإصدار. إذا طرحت إصلاحات في إصدار إذا كانت ترقية مكتبتك تتطلّب إجراء تغييرات جذرية قد تكون صعبة بشكل خاص على المستخدمين، ننصحك بإصدارها كعنصر جديد حتى يمكن للإصدارَين القديم والجديد التعايش معًا والسماح بطرح تدريجي أكثر. ملاحظة: إذا كانت عملية الترقية لواحدة من التبعيات تتضمّن تغييرًا كبيرًا في واجهة برمجة التطبيقات، من المحتمل أن تحتاج إلى ترقيتها في إصدار |
دورة الإصدار |
كم مرة تُصدر تطبيقك أو مكتبتك؟ دورات تطوير وإصدار أقصر
دورات تطوير وإصدار أطول
|
الاطّلاع على أحدث الميزات |
هل تفضّل استخدام أحدث الميزات وواجهات برمجة التطبيقات المتاحة، أم أنّك تُجري الترقية فقط عندما تحتاج إلى ميزة أو إصلاح خطأ؟ ننصحك بالتفكير في المفاضلات بين الترقيات المتكرّرة. تكون الترقيات المستقبلية أسهل (عدد التغييرات المطلوب دمجها أقل)، ولكنك تواجه مخاطر الترقية بشكلٍ متكرّر. يمكن أن يساعد اختبار الترقيات إلى الإصدارات التجريبية من المكتبات (الإصدارات ألفا والإصدارات التجريبية والإصدارات المرشحة للإصدار) في الاستعداد عند توفّر الإصدارات الثابتة. |
تبعية جديدة |
في حال إضافة تبعية جديدة، ننصحك بإجراء عملية مراجعة قوية تفحص هذه المكتبة بحثًا عن جميع معايير المخاطر لضمان تقييمها بشكل صحيح. لا تسمح بإضافة تبعيات جديدة بدون مراجعة. |
فريق مخصّص |
هل لديك فريق مخصّص لعملية الإنشاء؟ هل يحافظ مهندسو البرامج على الإصدار؟ يمكن لفريق مخصّص غالبًا قضاء وقت أطول في تحليل مخاطر الترقية واختبار الإصدارات الجديدة لضمان عمل الإصدار بشكل صحيح قبل أن يستخدم المهندسون الإصدارات الجديدة. |
نوع الترقية |
تكون بعض الترقيات أكثر أهمية من غيرها. فكِّر في العناصر الأكثر أهمية بالنسبة إليك. عادةً ما يكون لترقيات أدوات الإنشاء، مثل Gradle ومكونات Gradle الإضافية، تأثير أقل على المستخدمين، وتكون معظم المخاطر داخلية في عملية الإنشاء. ويساعد الإصدار نفسه في التحقّق من هذه التغييرات. من الصعب التحقّق من ترقيات المكتبات وحِزم SDK، كما أنّها تعرّض المستخدمين لخطر أكبر. المكوّن الإضافي لنظام Gradle المتوافق مع Android (AGP): هي الأدوات المستخدَمة لإنشاء تطبيق Android أو مكتبته. هذه هي الترقية الأكثر أهمية التي يمكنك إجراؤها، لأنّها غالبًا ما تتضمّن أو تفعّل تحسينات الأداء وإصلاح الأخطاء وقواعد lint جديدة وتوافقًا مع إصدارات نظام Android الأساسية الجديدة. Gradle: عليك غالبًا ترقية Gradle عند ترقية AGP أو مكوّن إضافي آخر من Gradle. مكوّنات Gradle الإضافية الأخرى: تتغيّر أحيانًا واجهة برمجة التطبيقات الخاصة بالمكوّن الإضافي لنظام Gradle. عند ترقية Gradle، تحقّق من توفّر ترقيات للمكوّنات الإضافية التي تستخدمها. Kotlin وJava: تتطلّب بعض المكتبات والمكوّنات الإضافية الحد الأدنى من إصدارات Kotlin أو Java، أو تريد الاستفادة من ميزات اللغة الجديدة أو واجهات برمجة التطبيقات أو تحسينات الأداء. نظام التشغيل Android: يتطلّب "متجر Play" ترقيات منتظمة لحزمة تطوير البرامج (SDK) لنظام التشغيل Android. يجب اختبار الإصدارات الجديدة من حزمة تطوير البرامج (SDK) لنظام التشغيل Android في أقرب وقت ممكن. تتطلّب بعض عمليات ترقية حِزم SDK إجراء تغييرات على تطبيقك، مثل الحصول على أذونات جديدة أو استخدام واجهات برمجة تطبيقات جديدة. المكتبات: هل تريد منح الأولوية للمكتبات استنادًا إلى مدى قربها من البنية العامة؟
استوديو Android: يتيح لك استخدام أحدث إصدار من "استوديو Android" الاستفادة من أحدث الميزات وإصلاحات الأخطاء في نظام IntelliJ IDEA الأساسي وأدواته للعمل مع أحدث حِزم تطوير برامج (SDK) لنظام التشغيل Android. |
الأدوات المتاحة |
تتوفّر العديد من الأدوات والمكوّنات الإضافية للمساعدة في عمليات الترقية. تعمل أدوات مثل Dependabot وRenovate على ترقية إصدارات المكتبة في الإصدار تلقائيًا، ولكن احرص على تحليل النتائج للتحقّق من المخاطر. |
استراتيجيات لأنواع محدّدة من الترقيات
قد تؤدي ترقية بعض أنواع التبعيات إلى تأثير متسلسل، ما يتطلّب ترقية أنواع أخرى من التبعيات. نناقش العلاقات بين عناصر التصميم في التبعيات المتبادلة بين الأدوات والمكتبات.
عند ترقية كل نوع من أنواع المكوّنات، ضع في اعتبارك كيفية تأثير الترقية في المكوّنات الأخرى في الإصدار.
مكوّن إضافي لنظام Gradle المتوافق مع Android (AGP) |
يتضمّن Android Studio مساعِد ترقية AGP الذي يمكنه مساعدتك في تنفيذ هذه المهام. في حال استخدام المساعد أو إجراء الترقية يدويًا، يُرجى مراعاة ما يلي: اطّلِع على ملاحظات إصدار "مجموعة تطوير البرامج (AGP)". ترقية Gradle إلى الإصدار المُدرَج على الأقل ترقية Android Studio إلى إصدار متوافق مع إصدار AGP الذي تم اختياره استخدِم إصدارات "استوديو Android" وAGP التي تتوافق مع حزمة تطوير البرامج (SDK) لنظام التشغيل Android التي تريد استخدامها. تحقَّق من التوافق مع أدوات إنشاء حِزم SDK ومجموعة تطوير البرامج (NDK) وJDK. إذا كنت تُطوّر مكوّنًا إضافيًا في Gradle (للاستخدام الداخلي أو العام) يمدّد بيانات AGP أو يستخدمها، تحقّق ممّا إذا كنت بحاجة إلى ترقية المكوّن الإضافي. في بعض الأحيان، يوقف AGP واجهات برمجة التطبيقات نهائيًا ويزيلها لاحقًا، ما يؤدي إلى حدوث مشاكل في التوافق مع المكوّنات الإضافية السابقة. |
مُجمِّع لغة Kotlin ولغة Kotlin ووقت التشغيل |
اطّلِع على ملاحظات إصدار Kotlin لمعرفة المشاكل المعروفة وحالات عدم التوافق. إذا كنت تستخدم Jetpack Compose:
إذا كنت تستخدِم معالجة الرموز في Kotlin (KSP)، يمكنك الاطّلاع على البدء السريع لاستخدام KSP للتعرّف على كيفية الإعداد وإصدارات KSP للاطّلاع على الإصدارات المتاحة. يُرجى العلم أنّه يجب استخدام إصدار من KSP يتطابق مع إصدار Kotlin. على سبيل المثال، إذا كنت تستخدم Kotlin 2.0.21، يمكنك استخدام أي إصدار من المكوّن الإضافي KSP يبدأ بالرقم 2.0.21، مثل 2.0.21-1.0.25. لن تحتاج عادةً إلى ترقية معالجات KSP (مثل مُجمِّع Room الذي يظهر كتبعية ترقية جميع المكونات الإضافية الأخرى لمحرِّر Kotlin Compiler التي تستخدمها غالبًا ما تتغيّر واجهة برمجة التطبيقات الخاصة بـ Kotlin Compiler Plugin بين الإصدارات، ويجب أن تستخدم المكوّنات الإضافية واجهة برمجة تطبيقات متوافقة. إذا كان المكوّن الإضافي مُدرَجًا في مكوّنات المكوّن المُجمِّع الإضافية، يجب استخدام الإصدار نفسه المستخدَم في مكوّن Kotlin المُجمِّع. بالنسبة إلى أيّ مكونات إضافية أخرى لإنشاء الترجمة، راجِع مستنداتها للتعرّف على عملية الربط المناسبة. يُرجى العِلم أنّ المكوّنات الإضافية للمحرِّر التي لا يتم الاحتفاظ بها إلى جانب محرِّر Kotlin نفسه غالبًا ما تواجه تأخيرات في الإصدار أثناء انتظار استقرار واجهة برمجة التطبيقات للمكوّن الإضافي للمحرِّر. قبل ترقية Kotlin، تأكَّد من توفُّر ترقيات مطابقة لجميع مكوّنات الترميز الإضافية التي تستخدمها. أخيرًا، في بعض الحالات، تتغيّر لغة Kotlin، ما يتطلّب منك تعديل الرمز. ويحدث ذلك غالبًا إذا كنت تختبر ميزات تجريبية. إذا لم يتم إنشاء الرمز البرمجي بشكل صحيح بعد ترقية مترجم Kotlin، تحقّق من التغييرات في اللغة أو حدوث خلل في مكتبة وقت التشغيل في ملاحظات إصدار Kotlin. |
مكوّنات إضافية لمحرِّر لغة Kotlin |
إذا كنت بحاجة إلى ترقية مكوّن إضافي لمجمّع Kotlin، عليك الترقية إلى الإصدار المطابق من Kotlin المستخدَم. تستخدم معظم المكوّنات الإضافية لمحرّك تجميع Kotlin الإصدار نفسه المستخدَم في محرّك تجميع Kotlin، أو تبدأ بالإصدار المطلوب من محرّك تجميع Kotlin. على سبيل المثال، إذا كان إصدار المكوّن الإضافي هو 2.0.21-1.0.25، عليك استخدام الإصدار 2.0.21 من مُجمِّع Kotlin. يتطلّب تغيير إصدار مترجم Kotlin أحيانًا إجراء تغييرات أخرى. |
المكتبات |
المكتبات هي العناصر الأكثر ترقيةً في عملية الإنشاء. ستظهر لك الترقيات المتاحة في محرِّر "استوديو Android"، أو إذا كنت تستخدم بعض أدوات التبعيات والمكونات الإضافية. تحدِّد بعض المكتبات الحدّ الأدنى من تحدِّد بعض المكتبات أيضًا الحد الأدنى لإصدار Kotlin المطلوب استخدامه. عدِّل إصدار Kotlin في ملفات الإنشاء ليكون على الأقل الإصدار المحدّد. |
Gradle |
في بعض الأحيان، توقِف الإصدارات الجديدة من Gradle استخدام واجهات برمجة التطبيقات الحالية، وتزيل هذه الواجهات في إصدار مستقبلي. إذا كنت تُطوّر مكوّنًا إضافيًا لـ Gradle، عليك ترقيته في أقرب وقت ممكن، خاصةً إذا كان هذا المكوّن الإضافي متاحًا للجميع. تتطلّب بعض ترقيات Gradle تحديد موقع إصدارات جديدة من المكوّنات الإضافية التي تستخدمها. يُرجى العِلم أنّ تطوير هذه المكوّنات الإضافية قد يتأخّر أثناء ترقيتها لتتوافق مع أحدث واجهات برمجة تطبيقات المكوّنات الإضافية في Gradle. لترقية Gradle:
|
مكوّنات Gradle الإضافية |
تستخدم المكوّنات الإضافية التي تمت ترقيتها من Gradle أحيانًا واجهات برمجة تطبيقات Gradle جديدة أو معدَّلة، ما يتطلّب بدوره ترقية Gradle أو إجراء تغييرات على إعداداتها في ملفات الإنشاء. وفي كلتا الحالتَين، ستظهر لك تحذيرات أو أخطاء بشأن عملية الإنشاء للإشارة إلى عدم التوافق. عند ترقية المكوّنات الإضافية، عليك ترقية Gradle. |
حزمة تطوير البرامج (SDK) لنظام التشغيل Android |
يتضمّن "استوديو Android" أداة ترقية حزمة تطوير البرامج (SDK) لنظام التشغيل Android التي يمكنها المساعدة في تنفيذ هذه المهام. في حال استخدام المساعد أو إجراء الترقية يدويًا، يُرجى مراعاة ما يلي: يحتوي كل إصدار من حزمة تطوير البرامج (SDK) لنظام التشغيل Android على ميزات وواجهات برمجة تطبيقات جديدة وإصلاحات للأخطاء وتغييرات في السلوك. يتطلّب "متجر Play" تحديث قبل ترقية حزمة تطوير البرامج (SDK) لنظام التشغيل Android، يُرجى قراءة ملاحظات الإصدار بعناية. انتبِه جيدًا إلى قسم "تغييرات السلوك" الذي يتضمّن ما يلي:
يمكن أن يكون قسم "تغييرات السلوك" طويلاً جدًا، ولكن عليك الانتباه إليه جيدًا لأنّه غالبًا ما يحتوي على تغييرات مهمة عليك إجراؤها على تطبيقك. يجب ترقية للاستفادة من ميزات حزمة SDK الجديدة أثناء التطوير وضمان التوافق أثناء عملية الإنشاء، عليك ترقية المكوّن الإضافي Android Gradle (AGP) و"استوديو Android". وتشمل هذه الأدوات أدوات جديدة ومحسّنة لحِزم SDK الجديدة. اطّلِع على الحد الأدنى لإصدارات الأدوات لمستوى واجهة برمجة تطبيقات Android. عند ترقية حزمة تطوير البرامج (SDK) لنظام التشغيل Android، عليك ترقية أي مكتبات AndroidX تستخدمها. غالبًا ما تستخدم حزمة AndroidX واجهات برمجة تطبيقات جديدة ومحدّثة لتحسين التوافق والأداء على جميع إصدارات حزمة تطوير البرامج (SDK) لنظام التشغيل Android. |
Android Studio |
يمكنك ترقية Android Studio بشكل عام في أي وقت. قد تظهر لك رسائل تطلب منك ترقية AGP أو ترقية حزمة تطوير البرامج (SDK) لنظام التشغيل Android. يُنصَح بشدة بإجراء هذه الترقيات، ولكنّها ليست مطلوبة. إذا أردت لاحقًا استخدام "استوديو Android" لترقية AGP أو حزمة تطوير البرامج (SDK) لنظام التشغيل Android، يمكنك العثور على هذين الخيارَين في قائمة الأدوات: |
Java |
إذا كان لديك رمز مصدر Java في تطبيق Android، ننصحك بالاستفادة من واجهات برمجة تطبيقات Java الأحدث. يتوافق كل إصدار من حزمة تطوير البرامج (SDK) لنظام التشغيل Android مع مجموعة فرعية من واجهات برمجة تطبيقات Java وميزات اللغة. توفّر أداة AGP التوافق مع إصدارات حزمة تطوير البرامج (SDK) لنظام التشغيل Android الأقدم باستخدام عملية تُعرف باسم إزالة السكر. تحدِّد ملاحظات الإصدار لحزمة تطوير البرامج (SDK) لنظام التشغيل Android مستوى Java المتوافق والمشاكل المحتمَلة. قد تؤثر بعض هذه المشاكل في رمز Kotlin المصدر أيضًا، لأنّ لغة Kotlin يمكنها الوصول إلى واجهات برمجة تطبيقات Java نفسها. احرص على الانتباه جيدًا إلى أقسام JDK API التي تظهر في قسم "التغييرات السلوكية" ضمن ملاحظات الإصدار، حتى إذا لم يكن لديك رمز مصدر Java. يتم تحديد استخدام حزمة JDK في عدة مواضع في نصوص إنشاء البرامج. اطّلِع على إصدارات Java في إصدار Android للحصول على مزيد من المعلومات. |
تحليل الترقية
يمكن أن يؤدي ترقية أحد العناصر المُستخدَمة إلى ظهور مخاطر في شكل تغييرات في واجهة برمجة التطبيقات والسلوك، أو متطلبات جديدة للاستخدام، أو مشاكل أمان جديدة، أو حتى تغييرات في الترخيص. على سبيل المثال، هل تحتاج إلى:
- هل تريد تغيير الرمز البرمجي بسبب تغييرات واجهة برمجة التطبيقات؟
- هل تريد إضافة عمليات تحقّق جديدة من الأذونات؟
- هل تريد إنشاء اختبارات إضافية أو تعديل الاختبارات الحالية لرصد التغييرات في السلوك؟
يُرجى العِلم أنّ التبعيات التي تمت ترقيتها قد تؤدي إلى ترقية إصدارات التبعيات التي تعتمد عليها. ويمكن أن يؤدي ذلك بسرعة إلى مجموعة هائلة من التغييرات.
إذا كنت تستخدم أداة مثل Renovate أو Dependabot لتشغيل عمليات الترقية تلقائيًا، يُرجى العِلم أنّ هذه الأدوات لا تُجري أي تحليل نيابةً عنك، بل تُجري الترقية إلى أحدث إصدارات المكتبة. لاتفترض أنّ كل شيء سيعمل بشكل صحيح بعد هذه الأنواع من الترقيات التلقائية.
إنّ مفتاح عمليات الترقية الناجحة هو تحليل الترقية:
- تحديد الاختلافات في التبعيات قبل الترقيات وبعدها
- راجِع كل تغيير وحدِّد المخاطر المعنيّة.
- الحدّ من المخاطر أو قبول التغييرات أو رفضها
تحديد الاختلافات في التبعيات
الخطوة الأولى في تحليل الترقية هي تحديد كيفية تغيُّر التبعيات. يمكنك الاستفادة من نظام التحكّم في الإصدارات (VCS، مثل Git) والمكوّن الإضافي Dependency Guard للاطّلاع على التغييرات بسرعة. هدفك هو إنشاء لقطة قبل وبعد الإجراء ومقارنة كلتا اللقطتَين.
إعداد وإنشاء أول مرجع لك
قبل بدء عملية الترقية، تأكّد من أنّه تم إنشاء مشروعك بنجاح.
من الأفضل حلّ أكبر عدد ممكن من التحذيرات، أو إنشاء خطوط أساسية لتتبُّع التحذيرات التي سبق لك الاطّلاع عليها.
- Lint: راجِع تحذيرات Lint الحالية وأنشئ خط أساس Android lint.
- مُجمِّع Kotlin:
- فعِّل
-Werror
لمعالجة جميع التحذيرات على أنّها أخطاء. اطّلِع على كيفية تحديد الخيارات. - ننصحك باستخدام مكونات إضافية، مثل Kotlin Warning Baseline أو Kotlin Warnings Baseline Generator.
- فعِّل
- الأدوات الأخرى: إذا كنت تستخدم أدوات تحليل ثابتة أخرى (مثل Detekt) تتيح تتبُّع قاعدة بيانات مرجعية، عليك إعداد قاعدتها المرجعية.
تسهِّل قواعد التحذيرات الأساسية هذه الاطّلاع على التحذيرات الجديدة التي يتم تقديمها أثناء ترقية التبعيات.
أنشئ مرجعًا أساسيًا للتبعيات من خلال إعداد أداة Dependency Guard وتشغيلها. في قائمة الإصدارات gradle/libs.versions.toml، أضِف ما يلي:
[versions]
dependencyGuard = "0.5.0"
[plugins]
dependency-guard = { id = "com.dropbox.dependency-guard", version.ref = "dependencyGuard" }
وأضِف ما يلي إلى ملف إنشاء تطبيقك:
Kotlin
plugins { alias(libs.plugins.dependency.guard) } dependencyGuard { configuration("releaseRuntimeClasspath") }
رائع
plugins { alias(libs.plugins.dependency.guard) } dependencyGuard { configuration('releaseRuntimeClasspath') }
إنّ إعدادات releaseRuntimeClasspath
هي هدف محتمل، ولكن إذا أردت
استخدام إعدادات مختلفة، يمكنك تشغيل ./gradlew dependencyGuard
بدون
إعدادات مُدرَجة في ملف الإنشاء للاطّلاع على جميع الإعدادات المتاحة.
بعد الإعداد، يمكنك تشغيل ./gradlew dependencyGuard
لإنشاء تقرير في
app/dependencies/releaseRuntimeClasspath.txt
. هذا هو تقريرك الأساسي.
احفظ هذا التغيير في نظام التحكّم بالإصدارات (VCS).
يُرجى العِلم أنّ أداة Dependency Guard لا تسجِّل سوى قائمة تبعيات مكتبة. هناك ملحقَان آخران في ملفات الإنشاء، مثل إصدارَي Android SDK وJDK. يؤدي الالتزام بنظام إدارة الإصدارات قبل تغيير التبعية إلى السماح لنظام إدارة الإصدارات بإبراز هذه التغييرات أيضًا.
الترقية والمقارنة بالبيانات الأساسية
بعد الحصول على مرجع، عليك ترقية التبعيات وتغييرات التصميم الأخرى التي تريد اختبارها. لا تُعدِّل رمز المصدر أو الموارد في هذه المرحلة.
يمكنك تشغيل ./gradlew lint
للاطّلاع على تحذيرات أو أخطاء جديدة في أداة فحص الأخطاء. عليك معالجة أيّ
مشاكل مهمّة ثم تعديل مستوى التحذير الأساسي من خلال تشغيل ./gradlew lint
-Dlint.baselines.continue=true
. إذا كنت قد استخدمت أدوات أخرى لتسجيل خطوط الأساس
للتحذيرات، مثل خط الأساس لتحذيرات Kotlin أو أداة إنشاء خطوط الأساس
لتحذيرات Kotlin، عليك معالجة التحذيرات الجديدة وتعديل
خطوط الأساس الخاصة بها أيضًا.
شغِّل ./gradlew dependencyGuard
لتعديل تقرير "الأداء الأساسي". بعد ذلك، يمكنك تشغيل مقارنة CVS للاطّلاع على التغييرات التي لا تخصّ المكتبة. من المحتمل أن تتضمّن عملية الترقية العديد من عمليات الترقية التي تخصّ مكتبتك والتي لم تكن تتوقّعها.
تحليل المخاطر
بعد معرفة التغييرات، ننصحك بالتفكير في المخاطر المحتملة لكل مكتبة تمت ترقيتها. يساعد ذلك في تركيز اختبارك أو إجراء تحقيق أعمق في التغييرات. حدِّد مجموعة من المخاطر لتحليلها في مشروعك لضمان إجراء تحليل متسق.
في ما يلي بعض النقاط التي يجب مراعاتها:
تحديثات الإصدارات الرئيسية |
هل تغيّر رقم الإصدار الرئيسي؟ عند ظهور هذا الرمز، يجب الانتباه بشكل خاص إلى المكتبات المتأثرة عند النظر في أيّ من الاعتبارات التالية. إذا كان الرمز البرمجي يستخدم أي واجهات برمجة تطبيقات تجريبية (التي تتطلّب منك غالبًا تفعيلها باستخدام التعليقات التوضيحية أو مواصفات ملفات الإنشاء)، قد تؤدي حتى التغييرات البسيطة أو التغييرات في الإصدارات الإضافية، مثل الترقية من الإصدار 1.2.3 إلى الإصدار 1.3.1 أو من الإصدار 1.2.3 إلى الإصدار 1.2.5، إلى مخاطر إضافية. |
واجهة برمجة تطبيقات غير مستقرة |
قد تتضمّن بعض إصدارات المكتبة واجهات برمجة تطبيقات غير مستقرة. وعادةً ما تكون هذه واجهات برمجة تطبيقات قيد التطوير أو تعتمد على واجهة برمجة تطبيقات أخرى غير مستقرة. على الرغم من أنّه يتم عادةً تضمين واجهات برمجة التطبيقات التي تم وضع علامة "تجريبية" أو "غير مستقرة" عليها في المعاينات، إلا أنّ بعض المكتبات تتضمّن واجهات برمجة تطبيقات تم وضع علامة "تجريبية" أو "غير مستقرة" عليها. تجنَّب استخدام واجهات برمجة التطبيقات هذه إن أمكن. إذا كنت بحاجة إلى استخدامها، احرص على تسجيل معدّل استخدامك لها وترقّب أي تغييرات أو عمليات إزالة في الإصدارات اللاحقة. |
السلوك الديناميكي |
تتصرف بعض المكتبات بشكل مختلف استنادًا إلى عوامل خارجية. على سبيل المثال، تعتمد المكتبة التي تتواصل مع خادم على التغييرات في ذلك الخادم.
|
دمج ملفات البيان |
يمكن أن تحتوي المكتبات المنشورة كأرشيفات Android (AAR) على موارد وملفات بيان تم دمجها في تطبيقك. ويمكن أن تضيف هذه المكونات أذونات جديدة ومكونات Android، مثل الأنشطة أو تطبيقات البث التي تعمل بشكل غير مباشر. |
التحديثات أثناء التشغيل |
تستخدِم بعض المكتبات ميزات يمكن تحديثها خارج نطاق التحكّم في تطبيقك. قد تستخدم المكتبة "خدمات Play" التي يتم ترقيتها بشكل مستقل عن حزمة تطوير البرامج (SDK) لنظام التشغيل Android. يمكن أن ترتبط المكتبات الأخرى بالخدمات في التطبيقات الخارجية التي يتم تحديثها بشكل مستقل (غالبًا باستخدام لغة تعريف واجهة نظام Android (AIDL)). |
كم عدد الإصدارات التي تتخطّاها؟ |
وكلما طال انتظارك لترقية مكتبة، زادت المخاطر المحتملة. إذا لاحظت تغييرًا كبيرًا في إصدار، مثل 1.2.3 إلى 1.34.5، انتبه إلى هذه المكتبة بشكلٍ خاص. |
أدلة نقل البيانات |
تحقَّق مما إذا كانت المكتبة تتضمّن دليل نقل البيانات. ويمكن أن يؤدي ذلك إلى تقليل تحليل المخاطر والتخطيط للتخفيف من حدتها بشكل كبير. يُرجى العِلم أنّ توفُّر دليل مماثل هو مؤشر جيد على أنّ المطوِّر قد ركّز على التوافق وأخذ في الاعتبار تخفيف عملية الترقية. |
ملاحظات الإصدار |
اطّلِع على ملاحظات الإصدار (إذا كانت متوفّرة) لكل مكتبة تم تغييرها. ابحث عن مؤشرات على التغييرات المفاجئة أو المتطلبات الجديدة، مثل الأذونات المُضافة. |
ملفات README |
تشير بعض ملفات README الخاصة بالمكتبة إلى المخاطر المحتملة، خاصةً إذا لم توفّر المكتبة ملاحظات حول الإصدار. ابحث عن _المشاكل المعروفة_، خاصةً المشاكل المعروفة المتعلّقة بالأمان. |
التحقّق من الثغرات الأمنية المعروفة |
تتتبّع أداة Play SDK Index الثغرات الأمنية في العديد من حِزم SDK الشائعة. تُبلغك أداة Play Console عمّا إذا كنت تستخدِم إحدى حِزم SDK المُدرَجة التي تتضمّن ثغرات أمنية معروفة. عند تعديل ملفات الإنشاء في "استوديو Android"، يتحقّق محرّر بيئة التطوير من فهرس حزمة SDK ويُبلغ عن استخدام إصدارات المكتبة المعرضة للاختراق. يدير المعهد الوطني للمعايير والتكنولوجيا (NIST) قاعدة بيانات وطنية كبيرة حول الثغرات الأمنية (NVD). يتحقّق المكوّن الإضافي Dependency Check في Gradle من تبعياتك المستخدَمة مقارنةً بقاعدة بيانات NVD. لاستخدام أداة Dependency Check، عليك طلب مفتاح واجهة برمجة التطبيقات NVD API وإعداد المكوّن الإضافي Gradle وتشغيل |
تعارضات الإصدارات |
هل يتم حلّ الإصدارات على النحو المتوقّع؟ ابحث عن التعارضات، خاصةً الاختلافات الرئيسية في الإصدارات. اطّلِع على حلّ التبعيات في Gradle لمعرفة كيفية البحث عن التعارضات. على وجه الخصوص، ابحث عن عندما يكون ذلك ممكنًا، يمكنك العمل مع مؤلفي إحدى التبعيات لإزالة التعارض في تبعياتها. يمكنك المساهمة في إجراء تغييرات على المكتبة (التحميل إلى الإصدار العلني) للمساعدة في تحسين توافقها، إذا كانت شركتك تسمح بذلك. |
التحقّق من التراخيص |
ابحث عن التغييرات في التراخيص عند ترقية مكتبة. يمكن أن تتغيّر المكتبة نفسها إلى ترخيص لم يعُد متوافقًا مع تطبيقك أو مكتبتك. يمكن أن تؤدي أيضًا التبعية الجديدة غير المباشرة إلى ظهور تراخيص غير متوافقة. اطّلِع على التحقّق من صحة التراخيص لمعرفة تفاصيل عن التحقّق من المجموعة الحالية من التراخيص في جميع التبعيات. |
مخاطر الصيانة و |
بالنسبة إلى المكتبات التي تتضمّن مستودعات عامة:
|
البرامج المفتوحة المصدر في مقابل البرامج المغلقة المصدر |
إذا كانت المكتبة مفتوحة المصدر، سيكون من الأسهل تصحيح الأخطاء فيها مقارنةً بالمكتبات المغلقة المصدر، سواء كانت المشاكل في الرمز البرمجي الخاص بك أو في رمز المكتبة. الحدّ من الاعتماد على المصادر المغلقة وإجراء فحص إضافي أثناء تقييمها هل هناك بدائل جيدة تناسب حالة الاستخدام؟ ما هي اتفاقيات مستوى الخدمة المتاحة للمكتبات ذات المصدر المغلق؟ إذا اخترت استخدام تبعية مصدر مغلق، عليك الاستعداد لكتابة حالات اختبار إضافية للمساعدة في الحد من المخاطر. |
تشغيل إصدار
أنشئ مشروعك. ابحث عن أخطاء أو تحذيرات جديدة. إذا كان بإمكانك تحديد المكتبة التي تتسبّب في حدوثها، يُرجى العلم أنّ ذلك يشكّل خطرًا على ترقية تلك المكتبة.
إذا ظهرت لك أي تحذيرات جديدة بشأن الاستهلاك، أضِفها كمخاطر محدّدة لملف الترجمة الذي ينتج هذه التحذيرات. ويمكن إزالة هذه العناصر في الإصدارات اللاحقة. إذا كنت تريد مواصلة استخدام هذه المكتبة، خصِّص بعض الوقت للتحويل من استخدام واجهات برمجة التطبيقات المتوقّفة إلى بدائلها، أو دوِّن واجهات برمجة التطبيقات المتوقّفة لتتبُّع تلك الوظائف ومعرفة ما إذا كانت ستتم إزالتها لاحقًا.
استخدام أداة lint لرصد مشاكل واجهة برمجة التطبيقات
يمكن أن يرصد أداة lint لنظام التشغيل Android العديد من المشاكل في تطبيقك، بما في ذلك بعض
المشاكل الناتجة عن تغيير إصدارات التبعيات أو حزمة تطوير البرامج (SDK) لنظام التشغيل Android. على سبيل المثال، إذا كنت تستخدم إصدارًا قديمًا من compileSdk
وترقية إلى إصدار جديد منه واستخدام واجهات برمجة التطبيقات الجديدة، سيُبلغك lint
بتلك الواجهات غير المتوفّرة في الإصدارات السابقة من حزمة SDK.
يتم تشغيل Lint في محرِّر Android Studio، ويُبلغ عن المشاكل أثناء إجراء التغييرات.
ولكن لا يتم تشغيله عادةً كجزء من عملية الإنشاء في Studio أو عند تشغيل عملية ملف برمجي في سطر الأوامر ما لم يتم استخدام استهدافَي build
أو lint
.
إذا كنت تستخدم ميزة الدمج المستمر (CI)، يمكنك تشغيل gradlew
build
أو gradlew lint
أثناء عمليات إنشاء CI (أو على الأقل أثناء عمليات الإنشاء النهارية
) لرصد هذه الأنواع من الأخطاء.
إذا كنت لا تستخدم عملية دمج الإصدارات، احرص على تنفيذ gradlew lint
من حين لآخر على الأقل.
انتبه بشكل خاص إلى أخطاء ورسائل التحذير الناتجة عن فحص الأخطاء. يتم شحن بعض المكتبات مع عمليات التحقّق من الأخطاء النحوية الخاصة بها، ما يساعد في ضمان الاستخدام الصحيح لواجهة برمجة التطبيقات. تتضمّن بعض الإصدارات الجديدة من المكتبة تحذيرات أخطاء جديدة، ما يؤدي إلى ظهور تقارير جديدة عند إنشاء التطبيق.
الحدّ من المخاطر
بعد تحديد مخاطر الترقية، عليك تحديد كيفية تجنّبها:
- قبول بعض المخاطر على حالها: تكون بعض المخاطر منخفضة بما يكفي لتكون مقبولة، خاصةً عندما يكون وقت الترقية والموارد محدودة.
- رفض بعض المخاطر بشكل قاطع قد تبدو بعض الترقيات محفوفة بالمخاطر، خاصةً إذا كان لديك وقت أو موارد محدودة للحدّ من هذه المخاطر في الوقت الحالي. إذا كنت بحاجة إلى تحديد الأولويات، ركِّز على الترقيات اللازمة للمشاكل التي واجهتها أو الميزات الجديدة التي تحتاج إليها.
- الحدّ من المخاطر المتبقية
- ننصحك بتجميع الترقيات في مجموعات أصغر حجمًا ومستقلّة من التغييرات. ويؤدي ذلك إلى الحد من المخاطر العامة والسماح بإلغاء التغييرات جزئيًا.
- التحقيق في التغييرات بالتفصيل
- اختبِر تطبيقك للتحقق من حدوث تغييرات غير متوقّعة. أضِف اختبارات جديدة عند الحاجة لتعزيز الثقة في عملية الترقية.
- راجِع المصدر (إن توفّر) عند العثور على شيء مريب.
- أدخِل التغييرات المطلوبة في المصدر أو الإصدار.
توثيق قراراتك إذا أصبحت مخاطر الترقية مشاكل عند تشغيل تطبيقك، يمكن أن تقلل مستندات تحليل المخاطر من الحاجة إلى تحليل الأخطاء.
التحقّق من التراخيص
يمنح مطوّرو المكتبات تراخيص لاستخدامها. عليك الالتزام بأحكام الترخيص، وإلا لن تتمكّن من استخدام المكتبة. تكون بعض التراخيص متساهلة جدًا، ولا تتطلّب في أغلب الأحيان سوى نسب المكتبة وعرض نص ترخيصها للمستخدمين النهائيين. وبعض هذه المكتبات شائعة، وإذا كنت تستخدم هذه المكتبات، يجب تطبيق الترخيص نفسه على تطبيقك أو مكتبتك.
يمكن أن تتغيّر التراخيص مع أي إصدار. عند الترقية، يجب التأكّد من أنّ التبعيات التي تستخدمها مرخّصة بطريقة متوافقة مع تطبيقك أو مكتبتك.
إذا كان الترخيص غير متوافق (أو تغيّر ليصبح غير متوافق)، لا يمكنك استخدام هذا الإصدار من المكتبة. يمكنك:
- تواصَل مع مالك المكتبة واطلب مواصلة استخدام الترخيص الحالي أو الترخيص المزدوج لمواصلة السماح بالترخيص القديم.
- يمكنك العمل مع فريقك القانوني لتحديد ما إذا كان بإمكانك تغيير ترخيصك ليصبح متوافقًا.
- ابحث عن مكتبة أخرى تتضمّن ترخيصًا متوافقًا وعدِّل تطبيقك كما هو مطلوب.
- يمكنك إنشاء نسخة من آخر إصدار متوافق من المكتبة (إذا كان هذا الترخيص يسمح بإنشاء مشتقات والتغييرات ليست بأثر رجعي) وإجراء التغييرات التي تريدها.