APKnalyzer

גרסת שורת הפקודה של כלי הניתוח של APK מספקת תובנות מיידיות לגבי של ה-APK בסיום תהליך ה-build, ומאפשרת לכם להשוות את ההבדלים בין שתי חבילות APK. השימוש בכלי הניתוח של APK מפחית את העלות הזמן שאתם משקיעים בניפוי באגים בבעיות בקובצי DEX ובמשאבי DEX בתוך האפליקציה, מקטין את ה-APK.

apkanalyzer כלול ב חבילת כלי שורת הפקודה ל-Android SDK ב- android_sdk/cmdline-tools/version/bin/apkanalyzer לחלופין, ניתן לגשת אל הכלי לניתוח APK דרך Android Studio כפי שמתואר ב ניתוח ה-build באמצעות כלי הניתוח של 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 מציינים חבילות, class, methods ושדות, בהתאמה. וגם x, k, r ו-d מציינים 'הוסרה', 'נשמרה' וצמתים מוגדרים, בהתאמה.

כדי לצמצם את הפלט, מוסיפים את האפשרויות הבאות:

  • --defined-only: כולל רק מחלקות שהוגדרו ב-APK בפלט.
  • --files: מציין את שמות קובצי ה-DEX שיש לכלול. ברירת מחדל: כל קובצי ה-DEX.
  • --proguard-folder file: מציינת את תיקיית הפלט של ProGuard לחיפוש מיפויים.
  • --proguard-mappings file: מציין את קובץ המיפויים של ProGuard.
  • --proguard-seeds file: מציין את קובץ ProGuard seeds.
  • --proguard-usages file: מציין את קובץ השימושים של ProGuard.
  • --show-removed: מוצגים כיתות וחברים שהוסרו על ידי ProGuard.

פלט לדוגמה (סוג/מצב/שיטות מוגדרות/שיטות הפניה) גודל/שם בייט):

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 לציון השיטה לביטול הידור.

הפורמט ל-method decompiles היא name(params)returnType, לדוגמה, someMethod(Ljava/lang/String;I)V.

הצגת משאבים שמאוחסנים ב-res/ וב-resource.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 לציון הנתיב לקובץ.