Android Studio כולל כלי לניתוח קובצי APK, שמספק תובנות מיידיות לגבי ההרכב של קובץ ה-APK או קובץ ה-Android App Bundle אחרי תהליך הבנייה.
השימוש בכלי לניתוח קובצי APK יכול לקצר את הזמן שאתם משקיעים בניפוי באגים ב-DEX ובמשאבים באפליקציה, ולעזור לכם להקטין את גודל ה-APK. הכלי לניתוח APK זמין גם משורת הפקודה באמצעות apkanalyzer
.
בעזרת הכלי לניתוח קובצי APK, אפשר:
- הצגת הגודל המוחלט והיחסי של קבצים באפליקציה, כמו קובצי DEX וקובצי משאבים של Android.
- להבין את ההרכב של קובצי DEX.
- אפשר לראות במהירות את הגרסאות הסופיות של קבצים באפליקציה, כמו קובץ
AndroidManifest.xml
. - השוואה בין שני קובצי APK או App Bundle.
יש שלוש דרכים לגשת לכלי לניתוח קובצי APK כשפרויקט פתוח:
- גוררים APK או App Bundle לחלון Editor ב-Android Studio.
- עוברים לתצוגה Project בחלון Project, ואז לוחצים לחיצה כפולה על ה-APK בספריית ברירת המחדל
build/output/apks/
. - בסרגל התפריטים, בוחרים באפשרות Build > Analyze APK (גרסה > ניתוח APK), ואז בוחרים את קובץ ה-APK או את קובץ ה-App Bundle.
הצגת פרטי הקובץ והגודל
קובצי APK הם קבצים בפורמט ZIP. כלי הניתוח של APK מציג כל קובץ או תיקייה כישות שאפשר להרחיב כדי לנווט לתיקיות. ההיררכיה של הישויות משקפת את המבנה של הקבצים והתיקיות בקובץ ה-APK.
בכלי לניתוח קובצי APK מוצגים הערכים של גודל הקובץ הדחוס (או 'גודל הקובץ הגולמי') וגודל קובץ ההורדה של כל ישות, כמו שמוצג באיור 1. גודל הקובץ הגולמי מייצג את התרומה של הישות לגודל הכולל של ה-APK. גודל ההורדה מייצג את הגודל הדחוס המשוער של הישות כפי שהיא תועבר על ידי Google Play. הערך % of Total Download Size מציין את אחוז הגודל של הישות מתוך הגודל הכולל של ה-APK.

הצגת הקובץ AndroidManifest.xml
אם הפרויקט כולל כמה קבצים מסוג AndroidManifest.xml
, למשל בשביל גרסאות מוצר שונות, או כולל ספריות שמספקות גם קובץ מניפסט, הקבצים האלה ימוזגו לקובץ אחד באפליקציה. קובץ המניפסט הזה הוא בדרך כלל קובץ בינארי ב-APK או ב-App Bundle, אבל כשבוחרים אותו בכלי לניתוח APK, הכלי משחזר את טופס ה-XML של הישות הזו ומציג אותו.
הכלי הזה עוזר לכם להבין אילו שינויים בוצעו באפליקציה במהלך הבנייה. לדוגמה, תוכלו לראות איך קובץ AndroidManifest.xml
מספרייה שהאפליקציה שלכם תלויה בה משולב בקובץ AndroidManifest.xml
הסופי.
בנוסף, הצופה הזה מספק יכולות מסוימות של lint. אזהרות או שגיאות מופיעות בפינה השמאלית העליונה. באיור 2 מוצגת שגיאה שדווחה לגבי קובץ המניפסט שנבחר.

צפייה בקובצי DEX
הכלי DEX File Viewer ב-APK Analyzer מאפשר לכם לגשת באופן מיידי למידע הבסיסי בקובצי ה-DEX באפליקציה. הכלי מציג את מספר המחלקות, החבילות, ההפניות הכוללות וההצהרות, ויכול לעזור לכם להחליט אם להשתמש ב-multidex או איך להסיר תלויות כדי לא לחרוג ממגבלת 64K DEX.
איור 3 מציג אפליקציה בגודל בינוני שנמצאת מתחת למגבלת ה-64K DEX. כל חבילה, מחלקה ושיטה בתוך קובץ ה-DEX כוללים ספירות שמופיעות בעמודות Defined Methods (שיטות מוגדרות) ו-Referenced Methods (שיטות שמופנות אליהן).
בעמודה Referenced Methods (שיטות שמופיעות בהפניה) מוצג מספר השיטות שמופיעות בהפניה בקובץ ה-DEX. בדרך כלל זה כולל שיטות שמוגדרות בקוד, בספריות של יחסי תלות ובשיטות שמוגדרות בחבילות סטנדרטיות של Java ו-Android שבהן הקוד משתמש. אלה השיטות שנספרות כחלק ממגבלת השיטות של 64K בכל קובץ DEX.
בעמודה Defined Methods (שיטות מוגדרות) מוצג רק מספר השיטות שמוגדרות באחד מקובצי ה-DEX, ולכן המספר הזה הוא קבוצת משנה של Referenced Methods (שיטות שמופיעות בהפניות).

סינון של תצוגת עץ הקבצים של DEX
מעל לרשימת Class, הכלי לניתוח APK מספק מסננים לצפייה בתוכן של קובץ ה-DEX שנבחר, כמו שמוצג באיור 4.

BuildConfig
.כדי להשתמש במסננים להצגת כל השיטות והשדות בתוך מחלקה, פועלים לפי השלבים הבאים:
- ברשימה File, בוחרים את הקובץ
classes.dex
. - ברשימה כיתה, מנווטים לכיתה ובוחרים אותה.
- מרחיבים את הכיתה שבחרתם.
- מעבירים את המתג הצגת שדות
כדי להציג או להסתיר את השדות של הכיתה.
- מפעילים או משביתים את האפשרות Show methods (הצגת שיטות)
כדי להציג או להסתיר את שיטות הכיתה.
מפעילים או משביתים את האפשרות הצגת כל השיטות או השדות שאליהם יש הפניה
כדי להציג או להסתיר חבילות, מחלקות, שיטות ושדות שאליהם יש הפניה.
בתצוגת העץ, צמתים באותיות נטויות הם הפניות שאין להן הגדרה בקובץ ה-DEX שנבחר. קובץ DEX יכול להפנות לשיטות ולשדות שמוגדרים בקובץ אחר. לדוגמה,
System.out.println()
הוא הפניה לשיטהprintln()
ב-Android framework.
טעינת מיפויים של ProGuard
לצד סמלי הסינון מופיעים סמלי המיפוי של ProGuard. הסמלים של ProGuard מושבתים עד שמעלים קבוצה של קובצי מיפוי של ProGuard שמוסיפים פונקציונליות לצפייה ב-DEX, כמו ביטול טשטוש של שמות (mapping.txt
), הצגת צמתים שהוסרו (usage.txt
) וסימון צמתים שלא ניתן להסיר (seeds.txt
).
קובץ המיפוי של ProGuard שאתם מייבאים חייב להיות תוצאה של אותו build שיצר את קובצי ה-DEX עם הפעלת צמצום הקוד.

כדי לטעון את קובצי המיפוי של ProGuard:
- לוחצים על Load Proguard mappings....
עוברים לתיקיית הפרויקט שמכילה את קובצי המיפוי וטוענים את כל הקבצים, שילוב של הקבצים או את התיקייה שמכילה את הקבצים.
קבצי המיפוי נמצאים בדרך כלל בתיקייה
project/app/build/outputs/mappings/release/
. אם המבנה הזה של הפרויקט מזוהה, ברירת המחדל של בורר הקבצים היא התיקייה release.קודם כל, בוחר הקבצים בודק אם יש שמות קבצים שתואמים בדיוק ל-
mapping.txt
, ל-seeds.txt
ול-usage.txt
. לאחר מכן, בורר הקבצים מחפש שמות קבצים שמכילים את הטקסטmapping
, usage
אוseeds
במקום כלשהו ומסתיימים ב-.txt
. לדוגמה,release-seeds-1.10.15.txt
היא התאמה.
הרשימה הבאה מתארת את קובצי המיפוי:
-
seeds.txt
: צמתים שהגדרת ProGuard מונעת את ההסרה שלהם במהלך הכיווץ מוצגים בהדגשה. -
mapping.txt
: מפעיל את האפשרות Deobfuscate names (ביטול הטשטוש של השמות)כדי שתוכלו לשחזר את השמות המקוריים של הצמתים שטשטשו ב-R8. לדוגמה, אפשר לשחזר שמות של צמתים שעברו טשטוש כמו
a
,b
ו-c
ל-MyClass
,MainActivity
ו-myMethod()
.
usage.txt
: מפעיל את האפשרות הצגת צמתים שהוסרו כדי שתוכלו להציג מחלקות, שיטות ושדות שהוסרו על ידי R8 במהלך הכיווץ. הצמתים ששוחזרו מוצגים עם קו חוצה.
מידע נוסף על שימוש ב-R8 כדי לערפל את הקוד ולצמצם אותו זמין במאמר בנושא כיווץ, ערפול ואופטימיזציה של האפליקציה.
הצגת קוד בייט, איתור שימושים ויצירת כלל Keep
לצמתים בתצוגת הרשימה Class יש תפריט הקשר עם האפשרויות הבאות, שמאפשרות לראות את קוד הבייט, למצוא שימושים ולהציג תיבת דו-שיח שבה מוצגים כללי ProGuard שאפשר להעתיק ולהדביק לצומת שנבחר. לוחצים לחיצה ימנית על צומת כלשהו בתצוגת הרשימה Class כדי להציג את תפריט ההקשר שלו.
Show bytecode: מפענח את המחלקה, השיטה או השדה שנבחרו ומציג את הייצוג של smali bytecode בתיבת דו-שיח, באופן הבא:

init
method.Find usages: מציג אילו חלקים אחרים בקוד DEX מפנים למחלקה או לשיטה שנבחרו, כמו שמוצג באיור 7.
אם טענתם את seeds.txt
, הצמתים שמוצגים באותיות מודגשות מציינים שההגדרה של ProGuard מונעת את ההסרה שלהם במהלך הכיווץ:

MyClass
.
Generate Proguard Keep rule (יצירת כלל ProGuard Keep): מציג כללי ProGuard שאפשר להעתיק ולהדביק בקובץ ההגדרות של ProGuard בפרויקט, כמו שמוצג באיור 8. כך אפשר למנוע את ההסרה של חבילה, מחלקה, method או שדה מסוימים במהלך שלב צמצום הקוד. מידע נוסף זמין במאמר בנושא התאמה אישית של הקוד שרוצים לשמור.

הצגת ישויות של קוד ומשאבים
משימות שונות של בנייה משנות את הישויות הסופיות באפליקציה. לדוגמה, כללי כיווץ של ProGuard יכולים לשנות את הקוד הסופי, ומשאבי תמונות יכולים להיות מוחלפים על ידי משאבים בטעם מוצר.
כדי לראות את הגרסה הסופית של הקבצים באמצעות הכלי לניתוח APK, לוחצים על הישות כדי לראות תצוגה מקדימה של ישות הטקסט או התמונה, כמו שמוצג באיור 9.

הכלי לניתוח קובצי APK יכול גם להציג קובצי טקסט וקובצים בינאריים שונים.
לדוגמה, במציג הישויות resources.arsc
אפשר לראות את הערכים הספציפיים להגדרה, כמו תרגומים של שפה למשאב מחרוזת. באיור 10 אפשר לראות את התרגומים של כל מחרוזת משאב.

השוואה בין קבצים
כלי הניתוח של קובצי APK יכול להשוות את הגודל של הישויות בשני קובצי APK או קובצי Android App Bundle שונים. המידע הזה שימושי כשרוצים להבין למה גודל האפליקציה גדל בהשוואה לגרסה קודמת.
לפני שמפרסמים אפליקציה מעודכנת, צריך לבצע את הפעולות הבאות:
- טוענים את גרסת האפליקציה שרוצים לפרסם ל-APK Analyzer.
- בפינה השמאלית העליונה של הכלי לניתוח קובצי APK, לוחצים על השוואה לקובץ APK קודם....
בתיבת הדו-שיח לבחירה, מאתרים את הארטיפקט שפורסם לאחרונה למשתמשים ולוחצים על אישור.
מופיעה תיבת דו-שיח דומה לזו שבאיור 11, כדי לעזור לכם להעריך את ההשפעה של העדכון על המשתמשים.
איור 11 מציג את ההבדל בין גרסאות ניפוי הבאגים לבין גרסאות ההפצה של אפליקציה מסוימת. סוגי הבנייה האלה משתמשים באפשרויות בנייה שונות, שמשנות את הישויות הבסיסיות בצורה שונה.
