Puoi verificare il funzionamento dei profili di avvio utilizzando Android Studio o esaminando i metadati della compilazione R8.
Conferma con Android Studio
Per confermare l'ottimizzazione del layout DEX, utilizza Android Studio per aprire l'APK e verificare le classi nei file DEX. Assicurati che il colore primario classes.dex
non sia completamente coperto. Se la tua app è costituita da un singolo file DEX, puoi controllare se contiene due file DEX dopo aver attivato il profilo di avvio.
Android Studio ti avvisa se i classi di avvio non rientrano in un singolo file DEX.
Per ottenere informazioni di diagnostica che includono il numero di metodi non di avvio nelle classi di avvio, assicurati che il compilatore R8 sia aggiornato almeno alla versione 8.3.36-dev apportando le seguenti modifiche al file settings.gradle
quando applichi il profilo di avvio:
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" } } }
Assicurati di aggiungere --info
dopo
assembleRelease
nel seguente comando durante la compilazione con Gradle.
./gradlew assembleRelease --info
La diagnostica viene quindi stampata nel terminale.
Se la tua app o le librerie fanno riferimento ad API desugared, le implementazioni di compatibilità associate di queste classi sono sempre contenute nell'ultimo file DEX. L'ultimo file DEX desugared non partecipa alle ottimizzazioni del layout DEX.
Conferma con i metadati del bundle
A partire da AGP 8.8, R8 genera metadati nell'Android App Bundle (AAB) che puoi utilizzare per verificare se l'ottimizzazione del layout DEX è riuscita. Per verificare se l'ottimizzazione ha funzionato, procedi nel seguente modo:
Crea l'AAB della tua app:
./gradlew app:bundleRelease
Verifica che sia presente almeno un file DEX contenente il testo
"startup": true
.Apri i metadati:
unzip -j -o path-to-aab BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.json
Il percorso dell'AAB potrebbe essere simile a
app/build/outputs/bundle/release/app-release.aab
.Controlla l'output, che dovrebbe avere il seguente aspetto:
inflating: r8.json [ { "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951", "startup": true } ]
Se nei metadati viene visualizzato solo
"startup": false
, devi attivare i profili di avvio e assicurarti che il profilo di avvio non sia offuscato.Verifica che i valori SHA-256 dei metadati corrispondano a quelli dell'AAB. Per recuperare i valori SHA-256 per tutti i file DEX, esegui quanto segue:
unzip -o path-to-aab */dex/*.dex && sha256sum */dex/*
L'output dovrebbe essere simile al seguente:
Archive: app/build/outputs/bundle/release/myapp-release.aab inflating: base/dex/classes.dex f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951 base/dex/classes.dex
Confronta i valori hash con i valori "checksum" del passaggio 1. Se i valori SHA-256 non corrispondono, è possibile che un passaggio di compilazione interferisca con la capacità di R8 di produrre file DEX.