אופטימיזציה של קוד DEX

אופטימיזציה והצפנה של הקוד באמצעות R8 או כלים חלופיים (כמו כלי אופטימיזציה שתואמים ל-ProGuard או מעבדי DEX משניים) מקטינים את גודל ה-DEX של האפליקציה, משפרים את ביצועי זמן הריצה ומצמצמים את השימוש בזיכרון.

קבצי DEX, או Dalvik Executable, מכילים את הקוד המהודר שמשמש להפעלת האפליקציה. בדרך כלל הם כוללים קוד Java ו-Kotlin, בניגוד לקוד C++ מהודר או לקבצי .so.

מדידת אופטימיזציה של קוד R8 באופן מקומי

כדי למדוד את הגודל של קובצי ה-DEX הלא דחוסים של קובץ ה-App Bundle באופן מקומי באמצעות שורת הפקודה, מריצים את הפקודה:

unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

אם האפליקציה שלכם עוברת אופטימיזציה באמצעות R8, אתם יכולים למדוד את האופטימיזציה, ההסתרה וההקטנה של קובץ ה-App Bundle באמצעות כלי הניתוח של הגדרות R8. הגדרות R8 דוח ניתוח ההגדרות של R8 כלול גם במיומנות ניתוח R8.

כדי לבדוק את המטא-נתונים אחרי האופטימיזציה שמוטמעים בקובץ ה-AAB (ב-AGP מגרסה 8.10 ואילך), מחלצים את הקובץ r8.json:

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.