Attivare l'ottimizzazione delle app

Per garantire la migliore esperienza utente, devi ottimizzare la tua app per renderla il più piccola e veloce possibile. Il nostro ottimizzatore di app, chiamato R8, semplifica la tua app rimuovendo codice e risorse inutilizzati, riscrivendo il codice per ottimizzare le prestazioni di runtime e altro ancora. Per i tuoi utenti, questo significa:

  • Avvii più rapidi
  • Rendering e prestazioni di runtime migliorati
  • Meno ANR

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 di rilascio 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 rilascio, 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"),

                ...
            )
            ...
        }
    }
    ...
}

Groovy

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 ottimizzata delle risorse, che mira a integrare l'ottimizzazione delle risorse e del codice per creare app ancora più piccole e veloci.

Attivare la riduzione ottimizzata delle risorse

Per attivare la nuova pipeline di riduzione delle risorse ottimizzata per una versione di AGP precedente alla 9.0.0, 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 ottimizzata delle risorse viene applicata automaticamente quando isShrinkResources = true è attivato nella configurazione della build.

Verificare e configurare le impostazioni di ottimizzazione R8

Per consentire a R8 di utilizzare le sue funzionalità di ottimizzazione complete, 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 delle app rende difficile la comprensione delle analisi dello stack, soprattutto se R8 rinomina i nomi di classi o metodi. Per ottenere stack trace che corrispondano correttamente al tuo codice sorgente, consulta Recuperare lo stack trace originale.

Se R8 è attivato, devi anche creare profili di avvio per prestazioni di avvio ancora migliori.

Se attivi l'ottimizzazione delle app e si verificano errori, ecco alcune strategie per risolverli:

Se ti interessa ottimizzare la velocità di compilazione, consulta Configurare la modalità di esecuzione di R8 per informazioni su come configurare R8 in base al tuo ambiente.

Modifiche al comportamento delle versioni di AGP e R8

La tabella seguente descrive le funzionalità chiave introdotte in varie versioni del plug-in Android Gradle (AGP) e del compilatore R8.

Versione AGP Funzionalità introdotte
9,0 Riduzione ottimizzata delle risorse:attivata per impostazione predefinita (controllata tramite android.r8.optimizedResourceShrinking). La riduzione ottimizzata delle risorse consente di integrare la riduzione delle risorse con la pipeline di ottimizzazione del codice, ottenendo app più piccole e veloci. Ottimizzando contemporaneamente i riferimenti al codice e alle risorse, identifica e rimuove le risorse a cui viene fatto riferimento esclusivamente da codice inutilizzato. Si tratta di un miglioramento significativo rispetto ai precedenti processi di ottimizzazione separati.

Ciò è particolarmente utile per le app che condividono risorse e codice sostanziali in diversi verticali di fattori di forma, con miglioramenti misurati di oltre il 50% delle 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 di consumo della libreria è stato interrotto e le app le filtreranno. Per saperne di più, vedi Aggiungere opzioni globali.

Controlli di nullità Kotlin:ottimizzati per impostazione predefinita (controllati utilizzando -processkotlinnullchecks). Questa versione ha introdotto anche miglioramenti significativi nella velocità di build. Per maggiori informazioni, consulta Opzioni globali per un'ulteriore ottimizzazione.

Ottimizza pacchetti specifici:puoi utilizzare packageScope per ottimizzare pacchetti specifici. Questa funzionalità è in fase di supporto sperimentale. Per ulteriori informazioni, consulta la sezione Ottimizzare i pacchetti specificati con packageScope.

Ottimizzato per impostazione predefinita:il supporto di getDefaultProguardFile("proguard-android.txt") è stato interrotto perché include -dontoptimize, che deve essere evitato. Utilizza invece "proguard-android-optimize.txt". Se devi disattivare l'ottimizzazione a livello globale nella tua app, aggiungi manualmente il flag a un file ProGuard.
8.12 Riduzione delle risorse:è stato aggiunto il supporto iniziale (disattivato per impostazione predefinita). Attiva l'utilizzo di isShrinkResources). La riduzione delle risorse funziona in tandem con R8 per identificare e rimuovere in modo efficace le risorse inutilizzate.

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 contribuisce a 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 il retracing automatico degli arresti anomali al codice sorgente originale per strumenti come Logcat di Android Studio.
8,0 Modalità completa per impostazione predefinita:la modalità completa R8 offre un'ottimizzazione molto più potente. È abilitato per impostazione predefinita. Puoi disattivare questa funzionalità utilizzando android.enableR8.fullMode=false.
7,0 Modalità completa disponibile: introdotta come funzionalità attivabile tramite android.enableR8.fullMode=true. La modalità completa applica ottimizzazioni più efficaci formulando ipotesi più rigorose su come il codice utilizza la reflection e altre funzionalità dinamiche. Sebbene riduca le dimensioni dell'app e ne migliori le prestazioni, potrebbe richiedere ulteriori regole di conservazione per impedire la rimozione del codice necessario.