אופטימיזציה של קוד DEX היא ממצא של תפקוד האפליקציה שעוזר לכם לעקוב אחרי האיכות, הגודל והביצועים של הקומפילציה של האפליקציה ולשפר אותם. אופטימיזציה והסתרה של הקוד באמצעות R8 או כלים חלופיים (כמו כלי אופטימיזציה שתואמים ל-ProGuard או מעבדי DEX משניים) מקטינים את גודל ה-DEX של האפליקציה, משפרים את ביצועי זמן הריצה וממזערים את השימוש בזיכרון.
קבצי DEX, או Dalvik Executable, מכילים את הקוד המהודר שמשמש להפעלת האפליקציה. בדרך כלל הם כוללים קוד Java ו-Kotlin, בניגוד לקוד C++ מהודר או לקבצי .so.
דוחות על תפקוד האפליקציה ב-Android כוללים מדדים של אופטימיזציה של קוד DEX לכל האפליקציות והמשחקים, אבל הם אוכפים ספי ערכים רק לאפליקציות ולמשחקים שעומדים בדרישות גודל ספציפיות.
זיהוי הבעיה
הנתונים של מדד תפקוד האפליקציה יכולים לעזור לכם לגלות מתי רמות האופטימיזציה של קוד ה-DEX של האפליקציה נמוכות. האופטימיזציה כוללת טשטוש, צמצום ואופטימיזציה של אפליקציות ומשחקים שמשתמשים ב-R8. באפליקציות שלא משתמשות ב-R8, מדד תפקוד האפליקציה מנסה לבדוק את שיעורי האופטימיזציה, ההקטנה וההסתרה, אבל אם צריך הוא משתמש בהיוריסטיקה של הסתרה כפרוקסי.
מעקב אחר סטטוס האופטימיזציה
הנתונים של מדד תפקוד האפליקציה יכולים לעזור לכם לשפר את הביצועים שלה. לשם כך, תקבלו התראות דרך Play Console אם האפליקציה לא עומדת בשיעורים המינימליים שנקבעו לאופטימיזציה של הקוד. הגדרות מפורטות של כיווץ, אופטימיזציה והסתרה זמינות במאמר שימוש בכלי לניתוח ההגדרות של R8.
באפליקציות שנוצרו באמצעות הטלאי האחרון של AGP בגרסה 8.10 ואילך, אחוזי הדירוג האלה נלקחים מקובץ r8.json שכלול באפליקציה.
בגרסאות ישנות יותר של AGP או במקרים שבהם קובץ r8.json לא נכלל, האחוזים מחושבים מקובץ mapping.txt אם הוא נכלל, או באמצעות היוריסטיקה של DEX אם קובץ המיפוי לא זמין.
באפליקציות שעברו אופטימיזציה באמצעות כלי אופטימיזציה חלופי של קוד, המערכת של תפקוד האפליקציה מבצעת ניתוח כדי להעריך את אחוז המחלקות, השיטות והשדות שעברו טשטוש ב-קובץ AAB.
הגודל הכולל המינימלי של קובצי DEX
מערכת תפקוד האפליקציה מחשבת מדדים של אופטימיזציה של קוד לכל האפליקציות, אבל תקבלו התראות רק אם קובץ ה-AAB שלכם עומד בדרישות הבאות לגבי הגודל הכולל של קובץ ה-DEX:
- אפליקציות: ה-Bundle מכיל לפחות 10MB של קוד DEX שנמדד כגודל לא דחוס
- משחקים: קובץ ה-Bundle מכיל לפחות 50MB של קוד DEX, שנמדד כגודל לא דחוס
במדד תפקוד האפליקציה ל-Android מוצג הגודל של קובץ ה-DEX של האפליקציה, אבל אפשר גם למדוד אותו באופן מקומי באמצעות שורת הפקודה:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
מדידת אופטימיזציה של קוד R8 באופן מקומי
אם האפליקציה שלכם עוברת אופטימיזציה באמצעות R8, אתם יכולים למדוד את האופטימיזציה, ההסתרה והכיווץ של קובץ ה-App Bundle באמצעות כלי הניתוח של הגדרות R8. דוח הניתוח של הגדרות R8 כלול גם במיומנות R8 Analyzer. הדוח יכול לעזור לכם להבין איך כללי השמירה משפיעים על ציוני האופטימיזציה, ההקטנה וההסתרה, אבל האחוזים בדוח לא יהיו זהים לערכים בתכונה 'תפקוד האפליקציה' ב-Android, כי האחוזים האלה מחושבים לפני האופטימיזציות.
כדי לבדוק את המטא-נתונים המדויקים שמשמשים את תפקוד האפליקציה לחישוב הציונים, צריך לחלץ את הקובץ r8.json מקובץ ה-AAB של האפליקציה:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
פתרון הבעיה
כדי לטפל בציוני אופטימיזציה נמוכים של קוד DEX, כדאי לעיין בהמלצות על סמך מערכת build והכלי לאופטימיזציה:
פלאגין של Android Gradle ו-R8
כדי לשפר את ציוני האופטימיזציה של קוד ה-DEX של R8, אפשר לעיין בהנחיות שבמאמר שיפור האופטימיזציה של R8. אפשר גם להשתמש במיומנות R8 Analyzer כדי לקבל הנחיות נוספות לאופטימיזציה של כללי השמירה של האפליקציה.
מערכות build שאינן R8 ומעבדי DEX לאחר עיבוד
אם צינור עיבוד הנתונים שלכם משתמש בכלים מותאמים אישית לבנייה או במעבדי DEX משניים לאחר העיבוד, אתם יכולים לבצע את השלבים הבאים כדי לשפר את האופטימיזציה של האפליקציה:
- פותחים את קובץ ה-AAB ב-Android Studio ומציגים אותו בהכלי לניתוח APK.
- בוחרים את כל הקבצים של
.dex. - שימו לב במיוחד לקבצים עם הגודל הכי גדול כשלוחצים על הלחצן 'הסרת טשטוש של שמות' (הערה: כדי לעשות את זה צריך להעלות קובץ
mapping.txt). אם חלק מהקבצים האלה נשארים גדולים גם אחרי ההסתרה, כנראה שהם מושפעים מכללי שמירה שחלים על כל החבילה. - בודקים בקובץ
proguard-rules.pro,configuration.txt, או בקובץ המקביל אם לא משתמשים ב-R8, ומחפשים כללי שמירה שתואמים לחבילות שלא עוברות הסתרה. לדוגמה, אםcom.foo.היא חבילה גדולה ב-dex, מחפשים כללי שמירה בפורמט-keep com.foo.**או-keep com.foo.bar.**. - חשוב לזכור שכללי שמירה של צרכני ספריות עשויים להיות קשים יותר לזיהוי. אם אתם חושדים שכלל צריכת ספרייה משפיע על האופטימיזציה, אתם יכולים לבדוק את זה באופן מקומי. לשם כך, מוסיפים את הכלל לאפליקציית דוגמה עצמאית באמצעות גרסה עדכנית של AGP, ובודקים אותו באמצעות הכלי R8 Configuration Analyzer.