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:
- Inizia con le librerie stabili. Inizia includendo nell'elenco
packageScopesolo le librerie stabili e di uso comune compatibili con le ottimizzazioni di R8. Inizia con le librerie AndroidX e Kotlinandroidx.**,kotlin.**ekotlinx.**. - Aggiungi i pacchetti in modo incrementale. Aggiungi gradualmente nuovi prefissi di pacchetti a
packageScope:- Valuta le dipendenze. Esamina le librerie dell'app. I candidati ideali da aggiungere all'elenco
packageScopeincludono le librerie ufficiali di Google (ad esempio,com.google.**) e altre librerie robuste comeOkHttp(ad esempio,okhttp3.**eokio.**). Dai la priorità alle librerie che non comportano chiamate di reflection, serializzazione o codice nativo (JNI) pesanti. - Dai la priorità in base alle dimensioni del pacchetto. Utilizza APK
Analyzer di Android Studio per identificare i maggiori contributori alle dimensioni dell'app.
- Crea un AAB o un APK di release con R8 disattivato.
- Apri il file in Analyzer ed esamina i file
dex. - 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.
- Valuta le dipendenze. Esamina le librerie dell'app. I candidati ideali da aggiungere all'elenco
- 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.
- Aggiungi i pacchetti dell'app per ultimi. Se i pacchetti dell'app non utilizzano molta reflection, includili in
packageScopee aggiungi le regole di conservazione in modo incrementale in base alle esigenze. Se i pacchetti dell'app utilizzano molta reflection, includili inpackageScopee aggiungi regole di conservazione a livello di pacchetto per i pacchetti richiesti. Itera sulle regole di conservazione per perfezionarle. - Passa all'utilizzo di R8 nell'intera app. Dopo aver incluso la maggior parte delle dipendenze dell'app nella dichiarazione
packageScopee aver verificato che l'app sia stabile, rimuovipackageScopeper ottimizzare l'intera app in modalità completa.