محلِّل ملفات APK

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

تم تضمين apkanalyzer في حزمة أدوات سطر الأوامر لحزمة تطوير البرامج (SDK) لنظام التشغيل Android على android_sdk/cmdline-tools/version/bin/apkanalyzer. بدلاً من ذلك، يمكنك الوصول إلى أداة تحليل APK ضمن Android Studio كما هو موضّح في تحليل إصدارك باستخدام أداة تحليل APK.

بناء الجملة

بنية apkanalyzer هي:

apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]

تشير السمة subject إلى ما تريد طلب البحث عنه، ويمكن أن تكون حزمة APK كاملة أو جزءًا من حزمة APK. يمكن أن يكون الموضوع واحدًا مما يلي:

  • apk: تحليل سمات ملف APK، مثل معرّف التطبيق ورمز الإصدار واسم الإصدار.
  • files: تحليل الملفات داخل ملف APK
  • manifest: تحليل محتوى البيان داخل ملف APK.
  • dex: تحليل ملفات DEX داخل ملف APK
  • resources: عرض موارد النصوص والصور والسلاسل

وتشير verb إلى ما تريد معرفته عن هذا الموضوع. يتم وصف المواضيع والأفعال وخياراتها في القسم التالي حول الأوامر.

يتطلب كل أمر تحديد ملف APK. يتطلب الأمر apk compare فقط تحديد حزمة APK ثانية.

ويمكنك اختصار كل خيار طالما أن الخيار لا لبس فيه. على سبيل المثال، يمكن اختصار الخيار العام --human-readable ليصبح -h.

يحلل المثال التالي apk (الموضوع) للحصول على file-size (فعل)، ثم يطبع حجم الملف بتنسيق يمكن لشخص عادي قراءته (خيار -h):

apkanalyzer -h apk file-size myapk.apk

الأوامر

يتم تنظيم أوصاف الأوامر التالية حسب الموضوع وتسرد مجموعات الأفعال والخيارات المتاحة لكل موضوع:

عرض سمات ملف APK الوصف
apk summary apk-file تتم طباعة رقم تعريف التطبيق ورمز الإصدار واسم الإصدار.

مثال على الإخراج:

com.myapp 5 1.1-beta

apk file-size apk-file يطبع الحجم الإجمالي لملف APK.
apk download-size apk-file يطبع تقديرًا لحجم تنزيل حزمة APK.
apk features [--not-required] apk-file ميزات الطباعة التي تستخدمها حزمة APK التي تؤدي إلى تشغيل فلترة "متجر Play" . أضِف الخيار --not-required لتضمين الميزات التي تم وضع علامة عليها على أنّها غير مطلوبة في الإخراج.

مثال على الإخراج:

android.hardware.type.watch
android.hardware.microphone implied:
    requested android.permission.RECORD_AUDIO permission

apk compare [options] apk-file apk-file2 للمقارنة بين حجمَي apk-file وapk-file2. يمكنك تضمين الخيارات التالية:
  • --different-only: يطبع هذا الحقل الأدلة والملفات بالاختلافات.
  • --files-only: لا يطبع إدخالات الدليل.
  • --patch-size: تعرض هذه القيمة قيمة تقديرية لكل حزمة على حدة بدلاً من عرض فرق أولي.

مثال على الناتج (الحجم القديم / الحجم الجديد / الفرق في الحجم / المسار):

39086736 48855615 9768879 /
10678448 11039232 360784 /classes.dex
18968956 18968956 0 /lib/
110576 110100 -476 /AndroidManifest.xml
...

عرض نظام ملفات APK الوصف
files list apk-file يسرد جميع الملفات في حزمة APK.

مثال على الإخراج:

/
/classes2.dex
/classes.dex
/assets/
/assets/asset.data
/AndroidManifest.xml
/resources.arsc
/res/
...

files cat --file path apk-file يطبع محتوى الملف. يجب تحديد مسار داخل حزمة APK باستخدام الخيار --file path، مثل --file /AndroidManifest.xml.
عرض المعلومات في البيان الوصف
manifest print apk-file طباعة بيان APK بتنسيق XML.
manifest application-id apk-file يطبع قيمة رقم تعريف التطبيق.
manifest version-name apk-file يطبع قيمة اسم الإصدار.
manifest version-code apk-file تطبع قيمة رمز الإصدار.
manifest min-sdk apk-file يطبع الحد الأدنى من إصدار حزمة تطوير البرامج (SDK).
manifest target-sdk apk-file يطبع إصدار حزمة تطوير البرامج (SDK) المستهدف.
manifest permissions apk-file طباعة قائمة الأذونات.
manifest debuggable apk-file لعرض ما إذا كان التطبيق قابلاً للتصحيح أم لا.
الوصول إلى معلومات ملف DEX الوصف
dex list apk-file تطبع قائمة بملفات DEX في حزمة APK.
dex references [--files path] [--files path2] apk-file طباعة عدد مراجع الطرق في ملفات DEX المحددة. ويكون الإعداد التلقائي هو جميع ملفات DEX. أضِف الخيار --files للإشارة إلى ملفات محدّدة تريد تضمينها.

مثال على الإخراج:

classes.dex 59598
classes2.dex 8042

dex packages [option1 option2 ...] apk-file طباعة شجرة الصف من DEX. في الإخراج، تشير P وC وM وF إلى الحزم والفئات والطرق والحقول على التوالي. أمّا x وk وr وd، فتشير إلى العُقد التي تمت إزالتها والاحتفاظ بها والرجوع إليها وتحديدها، على التوالي.

أضِف الخيارات التالية لتحسين الناتج:

  • --defined-only: لا يتضمن سوى الفئات المحددة في حزمة APK في الإخراج.
  • --files: تحدّد أسماء ملفات DEX المطلوب تضمينها. الإعداد التلقائي: جميع ملفات DEX.
  • --proguard-folder file: يحدد مجلد إخراج Proguard للبحث عن التعيينات.
  • --proguard-mappings file: يحدد ملف تعيينات Proguard.
  • --proguard-seeds file: لتحديد ملف بذور Proguard.
  • --proguard-usages file: لتحديد ملف استخدام Proguard.
  • --show-removed: يعرض الصفوف والأعضاء الذين تمت إزالتهم من قِبل Proguard.

مثال على الناتج (type/state/identifier الطرق/الطرق المرجعية/حجم البايت/الاسم):

P d 1 1 85 g
P d 1 1 85 g.a
C d 1 1 85 g.a.a
M d 1 1 45 g.a.a java.lang.Object get()
C r 0 1 40 byte[]
M r 0 1 40 byte[] java.lang.Object clone()

dex code --class class [--method method] تطبع رمز البايت لفئة أو طريقة بتنسيق smali. يجب إدخال اسم الفئة، وتتم طباعة اسم الفئة المؤهل بالكامل ليتم فك التشفير. أضِف الخيار --method لتحديد طريقة فك التشفير.

صيغة طريقة فك التشفير هي name(params)returnType، على سبيل المثال، someMethod(Ljava/lang/String;I)V.

عرض الموارد المخزَّنة في res/ وresources.arsc الوصف
resources packages طباعة قائمة بالحزم المحددة في جدول الموارد.
resources configs --type type [--package package] apk-file طباعة قائمة بالإعدادات الخاصة بعملية type المحدّدة. تمثّل السمة type نوع مورد، مثل string. ضمِّن الخيار --package إذا كنت تريد تحديد اسم حزمة جدول الموارد، وإلا سيتم استخدام أول حزمة محدّدة.
resources value --config config --name name --type type [--package package] apk-file تطبع قيمة المورد المحدّد من خلال config وname وtype. الخيار type هو نوع المورد، مثل string.

ضمِّن الخيار --package إذا كنت تريد تحديد اسم حزمة جدول الموارد، وإلا سيتم استخدام أول حزمة محدّدة.

resources names --config config --type type [--package package] apk-file تطبع قائمة بأسماء الموارد لإعداد ونوع. الخيار type هو نوع المورد، مثل string. ضمِّن الخيار --package إذا كنت تريد تحديد اسم حزمة جدول الموارد، وإلا سيتم استخدام أول حزمة محدّدة.
resources xml --file path apk-file لطباعة نموذج ملف XML ثنائي يمكن لشخص عادي قراءته. ويمكنك تضمين الخيار file لتحديد المسار إلى الملف.