אישור אופטימיזציה של פרופילים בהפעלה

כדי לוודא שפרופילי ההפעלה פועלים, אפשר להשתמש ב-Android Studio או לבדוק את המטא-נתונים של R8 build.

אישור באמצעות Android Studio

כדי לוודא שהפריסה של DEX עברה אופטימיזציה, משתמשים ב-Android Studio כדי לפתוח את ה-APK ולבדוק את המחלקות בקובצי ה-DEX. מוודאים שהמיכל הראשי classes.dex לא מלא עד הסוף. אם האפליקציה שלכם מורכבת מקובץ DEX יחיד, תוכלו לבדוק אם האפליקציה מכילה שני קובצי DEX אחרי הפעלת פרופיל ההפעלה.

אם מחלקות ההפעלה לא נכנסות לקובץ DEX אחד, מוצגת אזהרה ב-Android Studio. כדי לקבל מידע אבחוני שכולל את מספר השיטות שאינן שיטות הפעלה במחלקות ההפעלה, צריך לוודא שהקומפיילר R8 מעודכן לגרסה 8.3.21 לפחות. לשם כך, מבצעים את השינויים הבאים בקובץ settings.gradle כשמחילים את פרופיל ההפעלה:

Kotlin

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.21")
        }
    }
}

מגניב

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

כשמבצעים build באמצעות Gradle, מוסיפים את --info אחרי assembleRelease בפקודה הבאה.

./gradlew assembleRelease --info

לאחר מכן, האבחון מודפס במסוף.

אם האפליקציה או ספריות כלשהן מפנות אל ממשקי API שעברו desugaring, הטמעות התאימות שצורפו של המחלקות האלה תמיד ייכללו בקובץ ה-DEX האחרון. קובץ ה-DEX האחרון הזה אחרי הסרת הסוכר לא משתתף באופטימיזציות של פריסת ה-DEX.

אישור באמצעות מטא-נתונים של חבילה

החל מ-AGP 8.8, ‏ R8 מוציא מטא-נתונים ב-Android App Bundle ‏ (AAB) שאפשר להשתמש בהם כדי לבדוק אם האופטימיזציה של פריסת ה-DEX הצליחה. כדי לבדוק אם האופטימיזציה פעלה:

  1. יוצרים את קובץ ה-AAB של האפליקציה:

    ./gradlew app:bundleRelease
    
  2. בודקים שיש לפחות קובץ DEX אחד שמכיל את הטקסט "startup": true.

    1. פותחים את המטא-נתונים:

      unzip -j -o path-to-aab BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.json
      

      הנתיב לקובץ ה-AAB יכול להיות משהו כמו app/build/outputs/bundle/release/app-release.aab.

    2. בודקים את הפלט, שאמור להיראות כך:

          inflating: r8.json
      [
        {
          "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951",
          "startup": true
        }
      ]
      

    אם רואים רק "startup": false במטא-נתונים, צריך להפעיל פרופילים להפעלה ולוודא שהפרופיל להפעלה לא מוצפן.

  3. בודקים אם ערכי ה-SHA-256 מהמטא-נתונים תואמים לערכים מקובץ ה-AAB. כדי לקבל את ערכי ה-SHA-256 של כל קובצי ה-DEX, מריצים את הפקודה הבאה:

    unzip -o path-to-aab */dex/*.dex && sha256sum */dex/*
    

    הפלט אמור להיראות כך:

    Archive: app/build/outputs/bundle/release/myapp-release.aab
      inflating: base/dex/classes.dex
    f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951  base/dex/classes.dex
    

    משווים את ערכי הגיבוב לערכי ה-checksum משלב 1. אם ערכי ה-SHA-256 לא זהים, יכול להיות שיש שלב קומפילציה שמפריע ליכולת של R8 להפיק קובצי DEX.