يشتمل 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 الذي يمثله الكيان.
عرض ملف AndroidManifest.xml
إذا كان مشروعك يتضمن عدة ملفات AndroidManifest.xml
، مثل ملفات flavors الخاصة بالمنتجات، أو يتضمن مكتبات توفر أيضًا ملف بيان، سيتم دمجها في ملف واحد في تطبيقك. يكون ملف البيان هذا عادةً ملفًا ثنائيًا داخل حزمة APK أو حزمة التطبيق، ولكن عند تحديده في أداة تحليل APK، تتم إعادة إنشاء نموذج XML لهذا الكيان وتقديمه.
يساعدك هذا العارض في فهم أي تغييرات قد
تم إجراؤها على تطبيقك أثناء الإصدار. على سبيل المثال، يمكنك الاطّلاع على كيفية دمج ملف AndroidManifest.xml
من المكتبة التي يعتمد عليها تطبيقك في ملف AndroidManifest.xml
النهائي.
بالإضافة إلى ذلك، يوفر هذا العارض بعض إمكانات الوبر. تظهر التحذيرات أو الأخطاء في أعلى الجانب الأيسر. يوضح الشكل 2 الخطأ الذي يتم الإبلاغ عنه لملف البيان المحدد.
عرض ملفات DEX
يمنحك عارض ملفات DEX في أداة تحليل APK إمكانية الوصول الفوري إلى المعلومات الأساسية في ملفات DEX في تطبيقك. ويوفر لك العارض أعداد الفئات والحزمة وإجمالي عدد المراجع والبيانات التي يمكن أن تساعد في تحديد ما إذا كنت تريد استخدام الترميز المتعدد أو كيفية إزالة التبعيات لتصبح أقل من الحد المسموح به وهو 64 ألف DEX.
يوضّح الشكل 3 تطبيقًا متوسط الحجم يقل عن الحد الأقصى المسموح به لعدد التطبيقات، وهو 64 ألف. تحتوي كل حزمة وفئة وطريقة داخل ملف DEX على أعداد مدرجة في عمودَي الطرق المحدّدة والطرق المرجعية.
يحسب عمود الطرق المرجعية جميع الطرق التي يشير إليها ملف DEX. ويتضمن ذلك عادةً الطرق المحددة في التعليمات البرمجية الخاصة بك ومكتبات التبعية والطرق المحددة في حزم Java وAndroid القياسية التي تستخدمها التعليمات البرمجية. هذه هي الطرق التي يتم احتسابها ضمن حد طريقة 64K في كل ملف DEX.
لا يحسب عمود الطرق المحددة سوى الطرق المحددة في أحد ملفات DEX، لذا فإن هذا الرقم هو مجموعة فرعية من الطرق المرجعية.
فلترة العرض التدرّجي لملفات DEX
أعلى قائمة الفئة مباشرةً، توفِّر أداة تحليل APK فلاتر لعرض محتوى ملف DEX المحدَّد، كما هو موضَّح في الشكل 4.
لاستخدام عوامل التصفية لعرض جميع الطرق والحقول داخل فئةٍ ما، اتّبِع الخطوات التالية:
- في قائمة ملف، اختَر الملف
classes.dex
. - في قائمة الصف، انتقِل إلى صف دراسي واختَره.
- وسِّع الصف الذي اخترته.
- استخدِم مفتاح التبديل إظهار الحقول لإظهار حقول الصف أو إخفائها.
- بدِّل إظهار الطرق لإظهار طرق الفئة أو إخفائها.
فعِّل الخيار عرض جميع الطرق أو الحقول المُشار إليها. لإظهار أو إخفاء الحِزم والفئات والطرق والحقول المُشار إليها.
في العرض التدرّجي للحساب، العُقد المائلة هي مراجع ليس لها تعريف في ملف DEX المحدد. يمكن أن يشير ملف DEX إلى الطرق والحقول المحددة في ملف مختلف. على سبيل المثال، يُعدّ
System.out.println()
إشارة إلى طريقةprintln()
في إطار عمل Android.
تحميل تعيينات ProGuard
بجوار أيقونات التصفية، توجد أيقونات تعيين ProGuard. تصبح رموز ProGuard
باللون الرمادي حتى يتم تحميل مجموعة من ملفات ربط ProGuard التي تضيف وظائف إلى عارض DEX، مثل إزالة تشويش الأسماء (mapping.txt
)،
وعرض العُقد التي تمت إزالتها (usage.txt
)، والإشارة إلى العُقد
التي لا يمكن إزالتها (seeds.txt
).
يجب أن ينتج ملف تعيين ProGuard الذي تستورده من نفس الإصدار الذي أنتج ملفات DEX مع تفعيل تقليص الرموز البرمجية.
لتحميل ملفات ربط ProGuard، اتّبِع الخطوات التالية:
- انقر على تحميل تعيينات Proguard....
انتقِل إلى مجلد المشروع الذي يحتوي على ملفات التعيين وحمِّل جميع الملفات أو أي مجموعة منها أو المجلد الذي يحتوي على تلك الملفات.
وتكون ملفات التعيين عادةً في
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 في مربّع حوار على النحو التالي:
البحث عن الاستخدامات: تعرض الأجزاء الأخرى من رمز DEX التي تحتوي على إشارات إلى الفئة أو الطريقة المحدّدة، كما هو موضّح في الشكل 7.
إذا كنت قد حمّلت seeds.txt
، ستشير العُقد المعروضة بخط غامق إلى أنّ إعدادات ProGuard
تمنع إزالتها أثناء تقليص الوقت:
إنشاء قاعدة ProGuard Keep: تعرض قواعد ProGuard التي يمكنك نسخها ولصقها في ملف إعداد ProGuard لمشروعك، كما هو موضح في الشكل 8. يمنع ذلك إزالة حزمة أو فئة أو طريقة أو حقل معين أثناء مرحلة تقليص التعليمات البرمجية. لمزيد من المعلومات، يُرجى الاطّلاع على تخصيص الرمز المطلوب الاحتفاظ به.
عرض الرموز البرمجية وعناصر الموارد
تؤدي مهام التصميم المختلفة إلى تغيير العناصر النهائية للتطبيق. على سبيل المثال، يمكن أن تؤدي قواعد تقليص ProGuard إلى تغيير الرمز النهائي، ويمكن تجاهل موارد الصور من خلال الموارد التي تتميز بصيغة المنتج.
لعرض الإصدار النهائي من ملفاتك باستخدام أداة تحليل APK، انقر على الكيان لمعاينة عنصر النص أو الصورة، كما هو موضح في الشكل 9.
يمكن لأداة تحليل APK أيضًا عرض العديد من الملفات النصية والملفات الثنائية.
على سبيل المثال، يتيح لك عارض كيانات resources.arsc
الاطّلاع على القيم الخاصة بالإعدادات، مثل ترجمة اللغة لمورد سلسلة. في الشكل 10، يمكنك رؤية الترجمات لكل مورد سلسلة.
مقارنة الملفات
يمكن لأداة تحليل APK مقارنة حجم الكيانات في ملفين مختلفين لحِزم APK أو حزمة تطبيقات. يكون هذا مفيدًا عندما تحتاج إلى فهم سبب زيادة حجم تطبيقك مقارنةً بإصدار سابق.
قبل نشر تطبيق مُحدَّث، يُرجى اتّباع الخطوات التالية:
- حمِّل إصدار التطبيق الذي توشك على نشره في أداة تحليل APK.
- في أعلى يسار أداة تحليل APK، انقر على المقارنة مع حزمة APK السابقة....
في مربع حوار التحديد، ابحث عن العنصر الذي تم نشره آخر مرة للمستخدمين وانقر على حسنًا.
يبدو أن مربع حوار مشابه للشكل الموجود في الشكل 11 يساعدك في تقييم التأثير المحتمل للتحديث على المستخدمين.
يوضح الشكل 11 الفرق بين إصدارات تصحيح الأخطاء وإصدار تطبيق معين. يتم استخدام خيارات التصميم المختلفة بين أنواع الإصدار هذه، مما يغير الكيانات الأساسية بشكل مختلف.