L'ottimizzazione del codice DEX è un risultato di Android vitals che ti aiuta a monitorare e migliorare la qualità, le dimensioni e le prestazioni 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 DEX dell'app, migliorano le prestazioni di runtime e riducono al minimo il footprint della memoria.
I file DEX, o Dalvik Executable, contengono il codice compilato utilizzato per eseguire l'app. In genere, questo include il codice Java e Kotlin, anziché il codice C++ compilato o i file .so.
Android vitals segnala le metriche di ottimizzazione del codice DEX per tutte le app e tutti i giochi, ma applica le soglie solo per le app e i giochi che soddisfano requisiti di dimensioni specifici.
Rileva il problema
Android vitals può avvisarti in Play Console quando i livelli di ottimizzazione, riduzione o offuscamento del codice DEX della tua app non soddisfano le percentuali minime definite.
Come vengono calcolati i punteggi di ottimizzazione
Per le app create con l'ultima versione della patch di AGP 8.10 o versioni successive (ad esempio,
8.10.1 anziché 8.10.0), queste percentuali vengono estratte dal file
r8.json incluso. Assicurati di utilizzare l'ultima versione della patch di AGP e R8 per la tua versione secondaria, in modo da generare metadati accurati.
Per le app create con versioni precedenti di AGP o ottimizzate con un ottimizzatore di codice alternativo in cui r8.json non è incluso, Android vitals stima le percentuali di offuscamento come proxy utilizzando il file mapping.txt (se incluso) o l'euristica DEX.
Dimensioni DEX totali minime
Sebbene Android vitals calcoli le metriche di ottimizzazione del codice per tutte le app, riceverai avvisi solo se l'app bundle soddisfa i seguenti requisiti di dimensioni DEX totali:
- App: il bundle contiene almeno 10 MB di codice DEX misurato come dimensione non compressa
- Giochi: il bundle contiene almeno 50 MB di codice DEX misurato come dimensione non compressa
Misura l'ottimizzazione del codice localmente
Per misurare le dimensioni DEX non compresse dell'app bundle e ottenere le percentuali di ottimizzazione, riduzione e offuscamento corrispondenti ai risultati di Android vitals, esegui android analyze:
android analyze <yourapp>.aab
Risolvi il problema
Per risolvere i punteggi bassi di ottimizzazione del codice DEX, esamina i consigli basati sul tuo sistema di build e sull'ottimizzatore:
R8
Per migliorare i punteggi di ottimizzazione del codice DEX R8, consulta le indicazioni riportate in Migliora l'ottimizzazione R8 e utilizza R8 Configuration Analyzer per capire in che modo le regole di conservazione influiscono sui punteggi di ottimizzazione, riduzione e offuscamento (per definizioni dettagliate di queste metriche, consulta Informazioni sul report).
Se utilizzi il plug-in Android per Gradle (AGP), puoi anche utilizzare la
skill R8 Analyzer per ricevere ulteriori indicazioni sull'ottimizzazione delle regole di conservazione
dell'app. Se utilizzi Bazel, hai anche accesso a R8 Configuration Analyzer;
consulta la documentazione sull'ottimizzazione di R8 di rules_android.
Ottimizzatori non R8 e post-processori DEX
Se la tua pipeline di build utilizza strumenti di build personalizzati o post-processori DEX secondari, segui questi passaggi per migliorare l'ottimizzazione della tua app:
- Apri l'app bundle in Android Studio e visualizzalo nello Strumento di analisi APK.
- Seleziona tutti i file
.dex. - Presta molta attenzione ai file con le dimensioni maggiori quando attivi/disattivi il pulsante "Deoffusca i nomi" (nota: devi caricare un file
mapping.txt). Se noti che alcuni di questi file rimangono di grandi dimensioni anche 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 corrispondenti ai pacchetti che non vengono offuscati. Ad esempio, secom.foo.è un pacchetto di grandi dimensioni nei file DEX, cerca le regole keep nel formato-keep com.foo.**o-keep com.foo.bar.**. - Tieni presente che le regole di conservazione dei consumer della libreria potrebbero non essere così semplici da identificare. Se sospetti che una regola del consumer della libreria influisca sull'ottimizzazione,
puoi ispezionare la libreria direttamente utilizzando
android analyze <library>.aaro convalidarla aggiungendola a un'app di esempio autonoma utilizzando una versione recente di AGP e ispezionandola con R8 Configuration Analyzer.