Ottimizzazione del codice DEX

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 gli ottimizzatori compatibili con ProGuard o i post-processori DEX secondari) riducono le dimensioni DEX dell'app, migliorano le prestazioni di runtime e riducono al minimo l'utilizzo della memoria.

I file DEX (Dalvik Executable) contengono il codice compilato utilizzato per eseguire l'app. In genere, includono codice Java e Kotlin, a differenza del codice C++ compilato o dei file .so.

Android vitals segnala 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 di dimensioni specifici.

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 le app e i giochi che utilizzano R8. Per le app che non utilizzano R8, Android vitals tenta di controllare le percentuali di ottimizzazione, riduzione e offuscamento, ma se necessario utilizza l'euristica di offuscamento come proxy.

Monitorare lo stato dell'ottimizzazione

Android vitals può contribuire a migliorare le prestazioni della tua app avvisandoti tramite Play Console quando l'app non soddisfa le percentuali minime 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 quando 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 nell'app bundle.

Minimi delle dimensioni DEX totali

Anche se Android vitals calcola 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 dimensioni non compresse.
  • Giochi: il bundle contiene almeno 50 MB di codice DEX misurato come dimensioni non compresse.

Android vitals mostra le dimensioni DEX dell'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 localmente l'ottimizzazione del codice R8

Se la tua app esegue l'ottimizzazione con R8, puoi misurare l'ottimizzazione, l'offuscamento e la riduzione dell'app bundle utilizzando R8 Configuration Analyzer. Il report di R8 Configuration Analyzer è incluso anche nella skill di analisi 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 corrisponderanno ai valori in Android vitals, perché queste percentuali vengono calcolate prima delle ottimizzazioni.

Per esaminare i metadati esatti utilizzati da Android vitals per calcolare i punteggi, estrai il file r8.json dall'app bundle:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

Risolvere il problema

Per risolvere i problemi relativi ai punteggi di ottimizzazione del codice DEX bassi, esamina i consigli in base al sistema di build 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 di analisi R8 per ricevere ulteriori indicazioni sull'ottimizzazione delle regole di conservazione dell'app.

Sistemi di build 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 l'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 mentre attivi/disattivi il pulsante "Deoffusca nomi" (nota: per questa operazione devi caricare un file mapping.txt). Se alcuni di questi file rimangono di grandi dimensioni anche se offuscati, è probabile che siano interessati dalle regole di conservazione a livello di pacchetto.
  • Cerca nel file proguard-rules.pro, in configuration.txt o nell'equivalente per l'ottimizzatore se non utilizzi R8 e cerca le regole di conservazione che corrispondono ai pacchetti che non vengono offuscati. Ad esempio, se com.foo. è un pacchetto di grandi dimensioni nel file DEX, cerca le regole di conservazione nel formato -keep com.foo.** o -keep com.foo.bar.**.
  • Tieni presente che le regole di conservazione dei consumer di librerie potrebbero non essere così semplici da identificare. Se sospetti che una regola di consumer di librerie influisca sull'ottimizzazione, puoi convalidarla localmente aggiungendola a un'app di esempio autonoma utilizzando una versione recente di AGP ed esaminandola con R8 Configuration Analyzer.