تحليل إصدارك باستخدام أداة تحليل APK

يشتمل Android Studio على أداة تحليل APK توفِّر إحصاءات فورية حول تركيبة حزمة APK أو "مجموعة حزمات تطبيق Android" بعد اكتمال عملية التصميم. يمكن أن يؤدي استخدام أداة تحليل APK إلى تقليل الوقت الذي تقضيه في تصحيح مشكلات ملفات DEX ومواردها داخل تطبيقك، بالإضافة إلى المساعدة في تقليل حجم حزمة APK. تتوفر أداة تحليل APK أيضًا من سطر الأوامر مع apkanalyzer.


باستخدام أداة تحليل حِزم APK، يمكنك إجراء ما يلي:

  • اعرض الحجم المطلق والنسبي للملفات في التطبيق، مثل ملفات DEX وAndroid.
  • فهم تكوين ملفات DEX.
  • يمكنك الاطّلاع سريعًا على النُسخ النهائية من الملفات في التطبيق، مثل ملف AndroidManifest.xml.
  • إجراء مقارنة جنبًا إلى جنب بين حِزمتَي APK أو حِزم تطبيق

هناك ثلاث طرق للوصول إلى "أداة تحليل APK" عندما يكون المشروع مفتوحًا:

  • اسحب حِزمة APK أو حِزمة تطبيق إلى نافذة أداة التعديل في "استوديو Android".
  • بدِّل إلى عرض المشروع في نافذة المشروع، ثم انقر مرّتين على ملف APK في دليل build/output/apks/ التلقائي.
  • حدد إنشاء > تحليل APK في شريط القوائم، ثم حدد حزمة APK أو حزمة التطبيق.

عرض معلومات الملفات والحجم

ملفات APK هي ملفات تتبع تنسيق ملف ZIP. تعرض أداة تحليل APK كل ملف أو مجلد ككيان يمكنك توسيعه للانتقال إلى المجلدات. يُطابق التسلسل الهرمي للكيانات بنية الملفات والمجلدات في ملف APK.

تعرض أداة تحليل APK حجم الملف المضغوط (أو "حجم الملف غير الأوّلي") وقيم ملف التنزيل لكل كيان، كما هو موضّح في الشكل 1. حجم الملف غير المُعدَّل تمثّل مساهمة الكيان في إجمالي حجم حزمة APK. حجم التنزيل هو الحجم المقدّر للكيان المضغوط كما سيتم تسليمه من خلال Google Play. يشير النسبة المئوية لإجمالي حجم التنزيل إلى النسبة المئوية لإجمالي حجم تنزيل APK الذي يمثله الكيان.

الشكل 1. أحجام الملفات في أداة تحليل APK.

عرض ملف AndroidManifest.xml

إذا كان مشروعك يتضمن عدة ملفات AndroidManifest.xml، مثل ملفات flavors الخاصة بالمنتجات، أو يتضمن مكتبات توفر أيضًا ملف بيان، سيتم دمجها في ملف واحد في تطبيقك. يكون ملف البيان هذا عادةً ملفًا ثنائيًا داخل حزمة APK أو حزمة التطبيق، ولكن عند تحديده في أداة تحليل APK، تتم إعادة إنشاء نموذج XML لهذا الكيان وتقديمه.

يساعدك هذا العارض في فهم أي تغييرات قد تم إجراؤها على تطبيقك أثناء الإصدار. على سبيل المثال، يمكنك الاطّلاع على كيفية دمج ملف AndroidManifest.xml من المكتبة التي يعتمد عليها تطبيقك في ملف AndroidManifest.xml النهائي.

بالإضافة إلى ذلك، يوفر هذا العارض بعض إمكانات الوبر. تظهر التحذيرات أو الأخطاء في أعلى الجانب الأيسر. يوضح الشكل 2 الخطأ الذي يتم الإبلاغ عنه لملف البيان المحدد.

الشكل 2. سيظهر رمز خطأ في أعلى يسار الصفحة لملف البيان المحدد.

عرض ملفات DEX

يمنحك عارض ملفات DEX في أداة تحليل APK إمكانية الوصول الفوري إلى المعلومات الأساسية في ملفات DEX في تطبيقك. ويوفر لك العارض أعداد الفئات والحزمة وإجمالي عدد المراجع والبيانات التي يمكن أن تساعد في تحديد ما إذا كنت تريد استخدام الترميز المتعدد أو كيفية إزالة التبعيات لتصبح أقل من الحد المسموح به وهو 64 ألف DEX.

يوضّح الشكل 3 تطبيقًا متوسط الحجم يقل عن الحد الأقصى المسموح به لعدد التطبيقات، وهو 64 ألف. تحتوي كل حزمة وفئة وطريقة داخل ملف DEX على أعداد مدرجة في عمودَي الطرق المحدّدة والطرق المرجعية.

يحسب عمود الطرق المرجعية جميع الطرق التي يشير إليها ملف DEX. ويتضمن ذلك عادةً الطرق المحددة في التعليمات البرمجية الخاصة بك ومكتبات التبعية والطرق المحددة في حزم Java وAndroid القياسية التي تستخدمها التعليمات البرمجية. هذه هي الطرق التي يتم احتسابها ضمن حد طريقة 64K في كل ملف DEX.

لا يحسب عمود الطرق المحددة سوى الطرق المحددة في أحد ملفات DEX، لذا فإن هذا الرقم هو مجموعة فرعية من الطرق المرجعية.

الشكل 3. تطبيق متوسط الحجم

فلترة العرض التدرّجي لملفات DEX

أعلى قائمة الفئة مباشرةً، توفِّر أداة تحليل APK فلاتر لعرض محتوى ملف DEX المحدَّد، كما هو موضَّح في الشكل 4.

الشكل 4. تم ضبط فلاتر DEX لعرض الحقول والطرق لـ BuildConfig.

لاستخدام عوامل التصفية لعرض جميع الطرق والحقول داخل فئةٍ ما، اتّبِع الخطوات التالية:

  1. في قائمة ملف، اختَر الملف classes.dex.
  2. في قائمة الصف، انتقِل إلى صف دراسي واختَره.
  3. وسِّع الصف الذي اخترته.
  4. استخدِم مفتاح التبديل إظهار الحقول لإظهار حقول الصف أو إخفائها.
  5. بدِّل إظهار الطرق لإظهار طرق الفئة أو إخفائها.
  6. فعِّل الخيار عرض جميع الطرق أو الحقول المُشار إليها. لإظهار أو إخفاء الحِزم والفئات والطرق والحقول المُشار إليها.

    في العرض التدرّجي للحساب، العُقد المائلة هي مراجع ليس لها تعريف في ملف DEX المحدد. يمكن أن يشير ملف DEX إلى الطرق والحقول المحددة في ملف مختلف. على سبيل المثال، يُعدّ System.out.println() إشارة إلى طريقة println() في إطار عمل Android.

تحميل تعيينات ProGuard

بجوار أيقونات التصفية، توجد أيقونات تعيين ProGuard. تصبح رموز ProGuard باللون الرمادي حتى يتم تحميل مجموعة من ملفات ربط ProGuard التي تضيف وظائف إلى عارض DEX، مثل إزالة تشويش الأسماء (mapping.txt)، وعرض العُقد التي تمت إزالتها (usage.txt)، والإشارة إلى العُقد التي لا يمكن إزالتها (seeds.txt).

يجب أن ينتج ملف تعيين ProGuard الذي تستورده من نفس الإصدار الذي أنتج ملفات DEX مع تفعيل تقليص الرموز البرمجية.

الشكل 5. جارٍ تحميل تعيينات Proguard...

لتحميل ملفات ربط ProGuard، اتّبِع الخطوات التالية:

  1. انقر على تحميل تعيينات Proguard....
  2. انتقِل إلى مجلد المشروع الذي يحتوي على ملفات التعيين وحمِّل جميع الملفات أو أي مجموعة منها أو المجلد الذي يحتوي على تلك الملفات.

    وتكون ملفات التعيين عادةً في project/app/build/outputs/mappings/release/. يتم ضبط منتقي الملفات تلقائيًا على مجلد الإصدار في حال رصد بنية المشروع هذه.

    أولاً، يتحقّق أداة اختيار الملفات من أسماء الملفات التي تتطابق تمامًا مع mapping.txt وseeds.txt وusage.txt. بعد ذلك، يتحقّق منتقي الملفات من أسماء الملفات التي تحتوي على النص mapping أو usage أو seeds وتنتهي بـ .txt. على سبيل المثال، تُعدّ السمة release-seeds-1.10.15.txt مطابقة.

تصف القائمة التالية ملفات التعيين:

  • seeds.txt: تظهر العُقد التي تمنع إعدادات ProGuard إزالتها أثناء تقليصها بخط غامق.
  • mapping.txt: يؤدي هذا الإجراء إلى تفعيل إزالة تشويش الأسماء لتتمكّن من استعادة الأسماء الأصلية للعُقد التي تم إخفاء مفاتيح فك تشفيرها باستخدام R8. على سبيل المثال، يمكنك استعادة أسماء العُقد التي تم تشويشها، مثل a وb وc إلى MyClass وMainActivity وmyMethod().
  • usage.txt: لتفعيل إظهار العُقد التي تمت إزالتها حتى تتمكّن من عرض الفئات والطرق والحقول التي تمت إزالتها باستخدام R8 أثناء تقليص الوقت. يتم عرض العُقد التي تمت استعادتها بخط يتوسطه خط.

    لمزيد من المعلومات حول استخدام R8 لتشويش رمزك البرمجي وتصغيره، راجِع تقليص حجم تطبيقك وتشويشه وتحسينه.

عرض رمز البايت، والبحث عن الاستخدامات، وإنشاء قاعدة Keep

تحتوي العُقد في عرض القائمة Class على قائمة سياقات مع الخيارات التالية التي تتيح لك الاطّلاع على رمز البايت، والعثور على الاستخدامات، وعرض مربّع حوار يعرض قواعد ProGuard لنسخها ولصقها في العقدة المحدّدة. انقر بزر الماوس الأيمن على أي عقدة في عرض القائمة الفئة لعرض قائمة السياق الخاصة بها.

إظهار رمز بايت: فك ترميز الفئة أو الطريقة أو الحقل المحدّدَين وعرض تمثيل رمز بايت smali في مربّع حوار على النحو التالي:

الشكل 6. رمز بايت DEX لطريقة init

البحث عن الاستخدامات: تعرض الأجزاء الأخرى من رمز DEX التي تحتوي على إشارات إلى الفئة أو الطريقة المحدّدة، كما هو موضّح في الشكل 7. إذا كنت قد حمّلت seeds.txt، ستشير العُقد المعروضة بخط غامق إلى أنّ إعدادات ProGuard تمنع إزالتها أثناء تقليص الوقت:

الشكل 7. يشير إلى MyClass.

إنشاء قاعدة ProGuard Keep: تعرض قواعد ProGuard التي يمكنك نسخها ولصقها في ملف إعداد ProGuard لمشروعك، كما هو موضح في الشكل 8. يمنع ذلك إزالة حزمة أو فئة أو طريقة أو حقل معين أثناء مرحلة تقليص التعليمات البرمجية. لمزيد من المعلومات، يُرجى الاطّلاع على تخصيص الرمز المطلوب الاحتفاظ به.

الشكل 8. قواعد ProGuard التي يمكنك نسخها من مربع الحوار إلى ملف إعداد ProGuard.

عرض الرموز البرمجية وعناصر الموارد

تؤدي مهام التصميم المختلفة إلى تغيير العناصر النهائية للتطبيق. على سبيل المثال، يمكن أن تؤدي قواعد تقليص ProGuard إلى تغيير الرمز النهائي، ويمكن تجاهل موارد الصور من خلال الموارد التي تتميز بصيغة المنتج.

لعرض الإصدار النهائي من ملفاتك باستخدام أداة تحليل APK، انقر على الكيان لمعاينة عنصر النص أو الصورة، كما هو موضح في الشكل 9.

الشكل 9. تمثّل هذه السمة معاينة لمورد الصورة النهائي.

يمكن لأداة تحليل APK أيضًا عرض العديد من الملفات النصية والملفات الثنائية. على سبيل المثال، يتيح لك عارض كيانات resources.arsc الاطّلاع على القيم الخاصة بالإعدادات، مثل ترجمة اللغة لمورد سلسلة. في الشكل 10، يمكنك رؤية الترجمات لكل مورد سلسلة.

الشكل 10. معاينة موارد السلسلة المترجَمة

مقارنة الملفات

يمكن لأداة تحليل APK مقارنة حجم الكيانات في ملفين مختلفين لحِزم APK أو حزمة تطبيقات. يكون هذا مفيدًا عندما تحتاج إلى فهم سبب زيادة حجم تطبيقك مقارنةً بإصدار سابق.

قبل نشر تطبيق مُحدَّث، يُرجى اتّباع الخطوات التالية:

  1. حمِّل إصدار التطبيق الذي توشك على نشره في أداة تحليل APK.
  2. في أعلى يسار أداة تحليل APK، انقر على المقارنة مع حزمة APK السابقة....
  3. في مربع حوار التحديد، ابحث عن العنصر الذي تم نشره آخر مرة للمستخدمين وانقر على حسنًا.

    يبدو أن مربع حوار مشابه للشكل الموجود في الشكل 11 يساعدك في تقييم التأثير المحتمل للتحديث على المستخدمين.

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

الشكل 11. الفرق بين تصحيح الأخطاء وإصدار APK.