אתם יכולים לבדוק אם פרופילי ה-Startup פועלים באמצעות Android Studio או על ידי בדיקת המטא-נתונים של גרסאות build של R8.
אימות באמצעות Android Studio
כדי לוודא שהאופטימיזציה של הפריסה של קובץ ה-DEX בוצעה, פותחים את קובץ ה-APK ב-Android Studio ומאמתים את הכיתות בקובצי ה-DEX. חשוב לוודא שהשדה הראשי classes.dex
לא מלא לגמרי. אם האפליקציה מורכבת מקובץ DEX יחיד, תוכלו לבדוק אם האפליקציה מכילה שני קובצי DEX אחרי הפעלת פרופיל ההפעלה.
אם כיתות האתחול לא נכנסות לקובץ DEX יחיד, תופיע אזהרה ב-Android Studio.
כדי לקבל מידע אבחון שכולל את מספר השיטות שאינן של סטארט-אפ בכיתות הסטארט-אפ, צריך לוודא שמהדר R8 מעודכן לפחות לגרסה 8.3.36-dev. לשם כך, מבצעים את השינויים הבאים בקובץ settings.gradle
כשמחילים את פרופיל ה-Startup:
Kotlin
pluginManagement { buildscript { repositories { mavenCentral() maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath("com.android.tools:r8:8.3.6-dev") } } }
Groovy
pluginManagement { buildscript { repositories { mavenCentral() maven { url uri('https://storage.googleapis.com/r8-releases/raw') } } dependencies { classpath 'com.android.tools:r8:8.3.6-dev" } } }
כשמפתחים באמצעות Gradle, חשוב להוסיף את --info
אחרי assembleRelease
בפקודה הבאה.
./gradlew assembleRelease --info
לאחר מכן, האבחון מודפס במסוף.
אם האפליקציה או הספריות שלכם מפנות לממשקי API שהוסר מהם הסוכר, הטמעות התאימות בחבילה של הכיתות האלה תמיד נכללות בקובץ ה-DEX האחרון. קובץ ה-DEX האחרון שהוסר ממנו הסוכר לא משתתף באופטימיזציות של פריסה של DEX.
אימות באמצעות המטא-נתונים של החבילה
החל מ-AGP 8.8, R8 מפיק מטא-נתונים בקובץ Android App Bundle (AAB) שאפשר להשתמש בהם כדי לבדוק אם האופטימיזציה של הפריסה של DEX הצליחה. כדי לבדוק אם האופטימיזציה פעלה, מבצעים את הפעולות הבאות:
יוצרים את קובץ ה-AAB של האפליקציה:
./gradlew app:bundleRelease
בודקים שיש לפחות קובץ DEX אחד שמכיל את הטקסט
"startup": true
.פותחים את המטא-נתונים:
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
.בודקים את הפלט, שאמור להיראות כך:
inflating: r8.json [ { "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951", "startup": true } ]
אם מוצג רק הערך
"startup": false
במטא-נתונים, צריך להפעיל פרופילים של סטארט-אפים ולוודא שפרופיל הסטארט-אפ לא עבר ערפול.בודקים אם ערכי ה-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.