Ottimizzare i pacchetti specificati con packageScope (sperimentale)

Puoi ottimizzare pacchetti specifici utilizzando R8 con packageScope. Questa opzione è pensata come primo passo facoltativo per le app che non utilizzano ancora R8 e non è consigliata per le app che lo utilizzano già.

Valuta se utilizzare packageScope

Se la tua app utilizza già R8, non utilizzare packageScope, perché è una configurazione non ottimale in termini di prestazioni e dimensioni dell'app. Migliora invece la configurazione R8 della tua app con regole di conservazione migliorate o, se utilizzi la modalità compatibilità, eseguendo la migrazione alla modalità completa di R8.

Le app che non utilizzano ancora R8, ma che lo stanno adottando, possono utilizzare packageScope per gestire la transizione in modo incrementale. Poiché R8 applica potenti ottimizzazioni che possono alterare il comportamento dell'app, limitare queste ottimizzazioni a pacchetti specifici che sono sicuri da ottimizzare, come AndroidX e Kotlin, ti consente di ottenere miglioramenti delle prestazioni con un rischio minimo. Una volta che l'app è stabile, puoi espandere gradualmente queste ottimizzazioni al resto del codebase e delle dipendenze, verificando la stabilità in ogni fase.

Prerequisiti

L'utilizzo di R8 con packageScope richiede:

  • Plug-in Android per Gradle versione 9.0 o successive.
  • R8 in modalità completa, non in modalità compatibilità.

Configurare l'ottimizzazione

Per attivare l'ottimizzazione con packageScope, completa i seguenti passaggi.

Scegliere le librerie da ottimizzare

Identifica le librerie da ottimizzare. Ti consigliamo di iniziare con le librerie AndroidX e Kotlin androidx.**, kotlin.** e kotlinx.**, perché sono librerie stabili che sono state configurate per la compatibilità con R8.

Attivare il supporto per l'utilizzo di R8 con packageScope

Aggiungi quanto segue al file gradle.properties del progetto:

android.r8.gradual.support=true

Configurare il blocco di ottimizzazione

Nel file build.gradle.kts (o build.gradle) a livello di modulo, aggiungi un optimization blocco alla configurazione di build della release. All'interno di questo blocco, utilizza packageScope per elencare i pacchetti specifici che vuoi ottimizzare. Nel file build.gradle.kts, racchiudi l'elenco dei pacchetti in setOf().

Kotlin

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
            }
        }
    }
}

Alla moda

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
            }
        }
    }
}

Testare l'ottimizzazione

Dopo aver applicato o aggiornato la dichiarazione packageScope, testa attentamente l' app per verificare che non si siano verificati arresti anomali o modifiche del comportamento imprevisti.

Eseguire la transizione dall'ottimizzazione di pacchetti specifici all'ottimizzazione dell'intera app

Per massimizzare i vantaggi dell'ottimizzazione, devi mirare a passare gradualmente dall'utilizzo di packageScope all'utilizzo di R8 sull'intera app. Questo processo prevede l'espansione incrementale della copertura dell'ottimizzazione:

  1. Inizia con le librerie stabili. Inizia includendo nell'elenco packageScope solo le librerie stabili e di uso comune compatibili con le ottimizzazioni di R8. Inizia con le librerie AndroidX e Kotlin androidx.**, kotlin.** e kotlinx.**.
  2. Aggiungi i pacchetti in modo incrementale. Aggiungi gradualmente nuovi prefissi di pacchetti a packageScope:
    1. Valuta le dipendenze. Esamina le librerie dell'app. I candidati ideali da aggiungere all'elenco packageScope includono le librerie ufficiali di Google (ad esempio, com.google.**) e altre librerie robuste come OkHttp (ad esempio, okhttp3.** e okio.**). Dai la priorità alle librerie che non comportano chiamate di reflection, serializzazione o codice nativo (JNI) pesanti.
    2. Dai la priorità in base alle dimensioni del pacchetto. Utilizza APK Analyzer di Android Studio per identificare i maggiori contributori alle dimensioni dell'app.
      1. Crea un AAB o un APK di release con R8 disattivato.
      2. Apri il file in Analyzer ed esamina i file dex.
      3. Ordina i pacchetti per dimensioni. I pacchetti più grandi offrono il massimo ritorno sull'investimento (ROI) per l'ottimizzazione. Se li scegli come target per primi, otterrai la riduzione delle dimensioni più significativa all'inizio del processo, a condizione che queste librerie non abbiano regole di conservazione eccessivamente ampie. Per ulteriori informazioni, consulta la sezione Scegliere le librerie con attenzione.
  3. Verifica le modifiche del comportamento. Dopo aver aggiunto ogni nuovo prefisso di pacchetto, esegui test completi per rilevare e risolvere eventuali regressioni o comportamenti imprevisti.
  4. Aggiungi i pacchetti dell'app per ultimi. Se i pacchetti dell'app non utilizzano molta reflection, includili in packageScope e aggiungi le regole di conservazione in modo incrementale in base alle esigenze. Se i pacchetti dell'app utilizzano molta reflection, includili in packageScope e aggiungi regole di conservazione a livello di pacchetto per i pacchetti richiesti. Itera sulle regole di conservazione per perfezionarle.
  5. Passa all'utilizzo di R8 nell'intera app. Dopo aver incluso la maggior parte delle dipendenze dell'app nella dichiarazione packageScope e aver verificato che l'app sia stabile, rimuovi packageScope per ottimizzare l'intera app in modalità completa.