L'ottimizzazione del codice DEX è un risultato di Android vitals che ti aiuta a monitorare e migliorare la qualità, le dimensioni e il rendimento della compilazione della tua app. L'ottimizzazione e l'offuscamento del codice utilizzando R8 o strumenti alternativi (come ottimizzatori compatibili con ProGuard o post-processori DEX secondari) riducono le dimensioni del file DEX dell'app, migliorano le prestazioni di runtime e riducono al minimo l'utilizzo della memoria.
I file DEX, o Dalvik Executable, contengono il codice compilato utilizzato
per eseguire la tua app. In genere includono codice Java e Kotlin, a differenza del
codice C++ compilato o dei file .so.
I report Android vitals mostrano le metriche di ottimizzazione del codice DEX per tutte le app e i giochi, ma applica le soglie solo per le app e i giochi che soddisfano requisiti specifici di dimensioni.
Rilevare il problema
Android vitals può avvisarti quando i livelli di ottimizzazione del codice DEX della tua app sono bassi. Sono inclusi l'offuscamento, la riduzione e l'ottimizzazione per app e giochi che utilizzano R8. Per le app che non utilizzano R8, Android vitals tenta di controllare i tassi di ottimizzazione, riduzione e offuscamento, ma ricorre all'euristica di offuscamento come proxy, se necessario.
Monitorare lo stato dell'ottimizzazione
Android vitals può aiutarti a migliorare le prestazioni della tua app avvisandoti tramite Play Console quando la tua app non soddisfa le percentuali definite per l'ottimizzazione del codice. Per definizioni dettagliate di riduzione, ottimizzazione e offuscamento, consulta Utilizzare R8 Configuration Analyzer.
Per le app create con l'ultima patch di AGP versione 8.10 o successive, queste
percentuali vengono estratte dal file r8.json incluso.
Per le versioni precedenti di AGP o se il file r8.json non è incluso, le
percentuali vengono calcolate dal file mapping.txt, se incluso, o utilizzando l'euristica
DEX se il file di mapping non è disponibile.
Per le app ottimizzate con un ottimizzatore di codice alternativo, Android vitals esegue un'analisi per stimare la percentuale di classi, metodi e campi offuscati nel bundle dell'app.
Minimi per la dimensione DEX totale
Android vitals calcola le metriche di ottimizzazione del codice per tutte le app, ma riceverai avvisi solo se il tuo app bundle soddisfa i seguenti requisiti relativi alle dimensioni DEX totali:
- App: il bundle contiene almeno 10 MB di codice DEX misurati come dimensione non compressa
- Giochi: il bundle contiene almeno 50 MB di codice DEX misurati come dimensione non compressa
Android vitals mostra le dimensioni DEX della tua app, ma puoi misurarle anche localmente utilizzando la riga di comando:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
Misurare l'ottimizzazione del codice R8 in locale
Se la tua app viene ottimizzata con R8, puoi misurare l'ottimizzazione, l'offuscamento e la riduzione del bundle dell'app utilizzando R8 Configuration Analyzer. Il report Analizzatore configurazione R8 è incluso anche nella skill Analizzatore R8. Anche se il report può aiutarti a capire in che modo le regole di conservazione influiscono sui punteggi di ottimizzazione, riduzione e offuscamento, le percentuali nel report non corrispondono ai valori in Android vitals, perché vengono calcolate prima delle ottimizzazioni.
Per esaminare i metadati esatti utilizzati da Android vitals per calcolare i punteggi,
estrai il file r8.json dal tuo bundle dell'app:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
Risolvi il problema
Per risolvere i problemi relativi ai punteggi di ottimizzazione del codice DEX bassi, esamina i consigli in base al sistema di compilazione e all'ottimizzatore:
Plug-in Android per Gradle e R8
Per migliorare i punteggi di ottimizzazione del codice DEX R8, consulta le indicazioni riportate in Migliorare l'ottimizzazione R8. Puoi anche utilizzare la skill R8 Analyzer per ricevere indicazioni aggiuntive sull'ottimizzazione delle regole di conservazione dell'app.
Sistemi di compilazione non R8 e post-processori DEX
Se la pipeline di build utilizza strumenti di build personalizzati o post-processori DEX secondari, segui questi passaggi per migliorare l'ottimizzazione dell'app:
- Apri il tuo app bundle in Android Studio e visualizzalo in Strumento di analisi APK.
- Seleziona tutti i file
.dex. - Presta particolare attenzione ai file di dimensioni maggiori quando attivi il pulsante
"Deoffusca nomi" (nota: per questa operazione devi
caricare un file
mapping.txt). Se alcuni di questi file rimangono di grandi dimensioni dopo l'offuscamento, è probabile che siano interessati da regole di conservazione a livello di pacchetto. - Cerca nel file
proguard-rules.pro,configuration.txto nell'equivalente per l'ottimizzatore se non utilizzi R8 e cerca le regole keep che corrispondono ai pacchetti che non vengono offuscati. Ad esempio, secom.foo.è un pacchetto di grandi dimensioni nel tuo dex, cerca regole di conservazione nel formato-keep com.foo.**o-keep com.foo.bar.**. - Tieni presente che le regole di conservazione dei consumatori della raccolta potrebbero non essere così semplici da identificare. Se sospetti che una regola di consumo della libreria influisca sull'ottimizzazione, puoi eseguire la convalida localmente aggiungendola a un'app di esempio autonoma utilizzando una versione recente di AGP e ispezionandola con R8 Configuration Analyzer.