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

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

عرض ملف AndroidManifest.xml

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

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

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

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

عرض ملفات DEX

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

يوضح الشكل 3 تطبيقًا متوسط الحجم يقل عن الحد الأقصى المسموح به لـ 64 ألف DEX. تحتوي كل حزمة وفئة وطريقة داخل ملف 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 (رمز 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.