Ottimizzare i pacchetti specificati con packageScope (sperimentale)

Puoi ottimizzare pacchetti specifici utilizzando R8 con packageScope. Questo passaggio è concepito come primo passaggio facoltativo per le app che non utilizzano ancora R8 e non è consigliato per le app che già utilizzano R8.

Valuta se utilizzare packageScope

Se la tua app utilizza già R8, non utilizzare packageScope, perché si tratta di 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à di compatibilità, esegui la migrazione alla modalità completa di R8.

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

Prerequisiti

L'utilizzo di R8 con packageScope richiede il plug-in Android per Gradle 9.0 o versioni successive.

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é si tratta di librerie stabili configurate per la compatibilità con R8.

Attiva 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 blocco optimization alla configurazione della build di rilascio. 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 {
      proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")
      optimization {
        enable = true
        packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
      }
    }
  }
}

Groovy

android {
  buildTypes {
    release {
      proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
      optimization {
        enable = true
        packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
      }
    }
  }
}

Testare l'ottimizzazione

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

Transizione dall'ottimizzazione di pacchetti specifici all'ottimizzazione dell'intera app

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

  1. Inizia con librerie stabili. Inizia includendo solo librerie stabili e di uso comune compatibili con le ottimizzazioni di R8 nell'elenco packageScope. Inizia con le librerie AndroidX e Kotlin androidx.**, kotlin.** e kotlinx.**.
  2. Aggiungi pacchetti in modo incrementale. Aggiungi gradualmente nuovi prefissi pacchetto al packageScope:
    1. Valuta le dipendenze. Controlla le librerie della tua app. I candidati ideali da aggiungere all'elenco packageScope includono librerie Google ufficiali (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. Priorità in base alle dimensioni del pacchetto. Utilizza APK Analyzer di Android Studio per identificare i fattori che contribuiscono maggiormente alle dimensioni della tua app. 1. Crea un AAB o un APK di release con R8 disattivato. 1. Apri il file nell'analizzatore e controlla i file dex. 1. Ordina i pacchetti per dimensioni. I pacchetti più grandi offrono il ritorno sull'investimento (ROI) più elevato per l'ottimizzazione. Il targeting di queste librerie ti offre la riduzione più significativa delle dimensioni all'inizio del processo, a condizione che queste librerie non abbiano regole di conservazione eccessivamente ampie. Per saperne di più, consulta la sezione Scegliere le librerie con attenzione.
  3. Verifica le modifiche al comportamento. Dopo aver aggiunto ogni nuovo prefisso del 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 regole di conservazione in modo incrementale in base alle necessità. Se i pacchetti dell'app utilizzano molte reflection, includi i pacchetti in packageScope e aggiungi regole di conservazione a livello di pacchetto per i pacchetti richiesti. Itera le regole di conservazione per perfezionarle.
  5. Passa all'utilizzo di R8 nell'intera app. Dopo che la maggior parte delle dipendenze dell'app sono incluse nella dichiarazione packageScope e l'app è stabile, rimuovi packageScope per ottimizzare l'intera app in modalità completa.