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

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

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

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

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

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

فوق قائمة Class مباشرة، توفر أداة تحليل 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

تحتوي العُقد في عرض قائمة الفئة على قائمة سياقات تحتوي على الخيارات التالية التي تتيح لك الاطّلاع على رمز البايت والبحث عن الاستخدامات وعرض مربّع حوار يعرض قواعد 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.