Per un'esperienza utente ottimale, devi ottimizzare l'app in modo che sia il più piccola e veloce possibile. Il nostro strumento di ottimizzazione delle app, chiamato R8, semplifica l'app rimuovendo codice e risorse inutilizzati, riscrivendo il codice per ottimizzare le prestazioni del runtime e altro ancora. Per gli utenti, questo significa:
- Avvii più rapidi
- Memoria utilizzata ridotta
- Prestazioni di rendering e runtime migliorate
- Meno ANR
Panoramica dell'ottimizzazione R8
R8 utilizza un processo in più fasi per ottimizzare le dimensioni e la velocità dell'app. Le operazioni chiave includono:
Riduzione del codice (nota anche come tree shaking): R8 identifica e rimuove il codice non raggiungibile dall'applicazione e dalle relative dipendenze della libreria. Analizzando i punti di ingresso dell'app (ad esempio
ActivitiesoServicesdefiniti nel file manifest), R8 crea un grafico del codice a cui viene fatto riferimento e rimuove tutto ciò a cui non viene fatto riferimento.Ottimizzazioni logiche: R8 riscrive il codice per migliorare l'efficienza di esecuzione e ridurre il sovraccarico. Le tecniche chiave includono:
Inlining dei metodi: R8 sostituisce un sito di chiamata al metodo con il corpo effettivo del metodo chiamato. In questo modo si elimina il sovraccarico di una chiamata di funzione e R8 può eseguire ulteriori ottimizzazioni.
Unione delle classi: R8 combina insiemi di classi e interfacce in una singola classe. In questo modo si riduce il numero di classi nell'app, si riduce la pressione sulla memoria e si migliora la velocità di avvio.
Offuscamento (noto anche come minimizzazione): per ridurre le dimensioni del file DEX , R8 abbrevia i nomi di classi, campi e metodi (ad esempio,
com.example.MyActivitypotrebbe diventarea.b.a).
A partire dalla versione 8.12.0 del plug-in Android per Gradle (AGP), R8 ottimizza anche le risorse nell'ambito delle sue fasi di ottimizzazione. Per saperne di più, consulta Riduzione delle risorse ottimizzata.
Attivare l'ottimizzazione
Per attivare l'ottimizzazione dell'app, imposta isMinifyEnabled = true (per l'ottimizzazione del codice)
e isShrinkResources = true (per l'ottimizzazione delle risorse) nello script di build a livello di app della build release
build's, come mostrato nel codice seguente. Ti consigliamo di attivare sempre entrambe le impostazioni. Ti consigliamo inoltre di attivare l'ottimizzazione dell'app solo nella versione finale dell'app che testi prima della pubblicazione, in genere la build di release, perché le ottimizzazioni aumentano il tempo di compilazione del progetto e possono rendere più difficile il debug a causa del modo in cui modificano il codice.
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Alla moda
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled = true // Enables resource shrinking. shrinkResources = true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
Ottimizzare la riduzione delle risorse per app ancora più piccole
La versione 8.12.0 del plug-in Android per Gradle (AGP) introduce la riduzione delle risorse ottimizzata, che mira a integrare l'ottimizzazione delle risorse e del codice per creare app ancora più piccole e veloci.
Prima della riduzione delle risorse ottimizzata, Android Asset Packaging Tool (AAPT2) generava regole di conservazione che trattavano la riduzione delle risorse separatamente dal codice, spesso conservando codice o risorse inaccessibili che facevano riferimento l'uno all'altro.
Con la riduzione delle risorse ottimizzata, le risorse vengono considerate come parte del codice del programma, formando il grafico di riferimento. Quando una raccolta di codice o risorse non viene referenziata, non è protetta da una regola di conservazione e può essere rimossa.
Attivare la riduzione delle risorse ottimizzata
Per attivare la nuova pipeline di riduzione delle risorse ottimizzata per AGP 8.12 o 8.13, aggiungi quanto segue al file gradle.properties del progetto:
android.r8.optimizedResourceShrinking=true
Se utilizzi AGP 9.0.0 o una versione successiva, non devi impostare android.r8.optimizedResourceShrinking=true. La riduzione delle risorse ottimizzata viene applicata automaticamente quando isShrinkResources = true è attivata nella configurazione della build.
Verificare e configurare le impostazioni di ottimizzazione di R8
Per consentire a R8 di utilizzare tutte le sue funzionalità di ottimizzazione, rimuovi la
seguente riga dal file gradle.properties del progetto, se presente:
android.enableR8.fullMode=false # Remove this line from your codebase.
Tieni presente che l'attivazione dell'ottimizzazione dell'app rende difficili da comprendere le analisi dello stack, soprattutto se R8 rinomina i nomi di classi o metodi. Per ottenere analisi dello stack che corrispondano correttamente al codice sorgente, consulta Recuperare l'analisi dello stack originale.
Se R8 è attivato, devi anche creare profili di avvio per prestazioni di avvio ancora migliori.
Se attivi l'ottimizzazione dell'app e si verificano errori, ecco alcune strategie per risolverli:
- Aggiungi regole di conservazione per mantenere intatto il codice.
- Adotta le ottimizzazioni in modo incrementale.
- Aggiorna il codice per utilizzare librerie più adatte all' ottimizzazione.
Se ti interessa ottimizzare la velocità di build, consulta Configurare la modalità di esecuzione di R8 per informazioni su come configurare R8 in base al tuo ambiente.
Migliorare l'ottimizzazione R8
I vantaggi in termini di prestazioni di R8 sono direttamente correlati alla quantità di codebase che R8 è in grado di ottimizzare. Per ottenere il massimo da R8, attiva R8 in modalità completa e perfeziona le regole di conservazione per consentire la massima ottimizzazione di classi, campi e metodi.Per aiutarti, utilizza il R8 Configuration Analyzer.
R8 Configuration Analyzer ti consente di:
- Monitorare e migliorare la qualità complessiva della configurazione di R8 monitorando le metriche fornite dal report di R8 Configuration Analyzer.
- Trovare le regole di conservazione più ampie, ovvero quelle che impediscono la maggior parte dell'ottimizzazione
- e capire quale ottimizzazione impediscono per perfezionarle.
R8 Configuration Analyzer è disponibile in AGP versione 9.3.0-alpha05 o da R8 versione 9.3.7-dev. Per saperne di più, consulta Analizzare la configurazione di R8.
Modifiche al comportamento della versione di AGP e R8
La tabella seguente descrive le funzionalità chiave introdotte in varie versioni del plug-in Android per Gradle (AGP) e del compilatore R8.
| Versione AGP | Funzionalità introdotte |
|---|---|
| 9.1 |
Classi ricompattate per impostazione predefinita: R8 ricompattare le classi (spostandole nel pacchetto senza nome, al livello superiore) per compattare ulteriormente DEX, eliminando la necessità di specificare l'opzione -repackageclasses. Per informazioni su come funziona e su come disattivare questa opzione, consulta Opzioni globali.
|
| 9.0 |
Riduzione delle risorse ottimizzata: attivata per impostazione predefinita (controllata tramite android.r8.optimizedResourceShrinking). La riduzione delle risorse ottimizzata consente di integrare la riduzione delle risorse con la pipeline di ottimizzazione del codice, ottenendo app più piccole e veloci. Ottimizzando contemporaneamente i riferimenti a codice e risorse, identifica e rimuove le risorse a cui viene fatto riferimento esclusivamente dal codice inutilizzato. Si tratta di un miglioramento significativo rispetto ai precedenti processi di ottimizzazione separati.Questa funzionalità è particolarmente utile per le app che condividono risorse e codice sostanziali tra diversi settori verticali di fattori di forma, con miglioramenti misurati di oltre il 50% nelle dimensioni dell'app. La riduzione delle dimensioni risultante comporta download più piccoli, installazioni più rapide e un'esperienza utente migliore con avvio più rapido, rendering migliorato e meno ANR. Filtro delle regole della libreria: il supporto per le opzioni globali (ad esempio, -dontobfuscate) nelle regole del consumatore della libreria è stato rimosso e le app le filtreranno. Per saperne di più, consulta Aggiungere opzioni globali.Controlli null di Kotlin: ottimizzati per impostazione predefinita (controllati tramite -processkotlinnullchecks). Questa versione ha introdotto anche miglioramenti significativi nella velocità di build. Per saperne di più, consulta Opzioni globali per un'ulteriore ottimizzazione.Ottimizzare pacchetti specifici: puoi utilizzare packageScope per ottimizzare pacchetti specifici. Questa funzionalità è in fase di supporto sperimentale. Per saperne di più, consulta Ottimizzare i pacchetti specificati con packageScope.Ottimizzato per impostazione predefinita: il supporto per getDefaultProguardFile("proguard-android.txt") è stato rimosso perché include -dontoptimize, che deve essere evitato. Utilizza invece "proguard-android-optimize.txt". Se devi disattivare globalmente l'ottimizzazione nella tua app, aggiungi manualmente il flag a un file ProGuard.
|
| 8.12 |
Riduzione delle risorse ottimizzata: è stato aggiunto il supporto iniziale (controllato tramite android.r8.optimizedResourceShrinking). La riduzione delle risorse ottimizzata consente di integrare la riduzione delle risorse con la pipeline di ottimizzazione del codice. In questa versione di AGP devi attivarla manualmente.Retracing di Logcat: supporto per il retracing automatico nella finestra Logcat di Android Studio. |
| 8.6 |
Retracing migliorato: include il retracing del nome file e del numero di riga per impostazione predefinita per tutti i livelli minSdk (in precedenza era richiesto minSdk 26+ nella versione 8.2).L'aggiornamento di R8 consente di garantire che le analisi dello stack delle build offuscate siano facilmente e chiaramente leggibili. Questa versione migliora la mappatura dei numeri di riga e dei file di origine, semplificando l'esecuzione automatica del retracing degli arresti anomali al codice sorgente originale da parte di strumenti come Logcat di Android Studio. |
| 8,0 |
Modalità completa per impostazione predefinita: la modalità completa di R8 offre un'ottimizzazione significativamente più potente. È attivata per impostazione predefinita. Puoi disattivare questa opzione utilizzando android.enableR8.fullMode=false.
|
| 7.0 |
Modalità completa disponibile: introdotta come funzionalità di attivazione utilizzando android.enableR8.fullMode=true. La modalità completa applica ottimizzazioni più potenti facendo ipotesi più rigorose su come il codice utilizza la reflection e altre funzionalità dinamiche. Sebbene riduca le dimensioni dell'app e migliori le prestazioni, potrebbe richiedere regole di conservazione aggiuntive per impedire la rimozione del codice necessario.
|