É possível otimizar pacotes específicos usando o R8 com packageScope. Ela foi
criada como uma primeira etapa opcional para apps que ainda não usam o R8 e não é
recomendada para apps que já usam o R8.
Considerar o uso de packageScope
Se o app já usa o R8, não use packageScope, porque é uma configuração
subótima em termos de desempenho e tamanho do app. Em vez disso, melhore
a configuração do R8 do seu app com regras de manutenção aprimoradas ou, se estiver usando o
modo de compatibilidade, migre para o modo completo do R8.
Para apps que ainda não usam o R8, mas estão adotando o R8, use packageScope para
gerenciar a transição de forma incremental. Como o R8 aplica otimizações avançadas
que podem alterar o comportamento do app, restringir essas otimizações a pacotes específicos
que são seguros para otimizar, como o AndroidX e o Kotlin, permite que você tenha
ganhos de performance com risco mínimo. Depois que o app estiver estável, você poderá expandir gradualmente essas otimizações para o restante da codebase e das dependências, testando a estabilidade em cada etapa.
Pré-requisitos
Para usar o R8 com packageScope, é necessário ter o Plug-in do Android para Gradle 9.0 ou mais recente.
Configurar a otimização
Para ativar a otimização com o packageScope, siga estas etapas.
Escolher bibliotecas para otimizar
Identifique as bibliotecas a serem otimizadas. Recomendamos começar com as bibliotecas AndroidX e
Kotlin androidx.**, kotlin.** e kotlinx.** porque são
bibliotecas estáveis que foram configuradas para compatibilidade com o R8.
Ativar o suporte para usar o R8 com packageScope
Adicione o seguinte ao arquivo gradle.properties do seu projeto:
android.r8.gradual.support=true
Configurar o bloco de otimização
No arquivo build.gradle.kts (ou build.gradle) no nível do módulo, adicione um
bloco optimization à configuração de build de lançamento. Dentro desse bloco, use
packageScope para listar os pacotes específicos que você quer otimizar. No arquivo
build.gradle.kts, coloque sua lista de pacotes em 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.**"] } } } }
Testar a otimização
Depois de aplicar ou atualizar a declaração packageScope, teste seu
app para verificar se não ocorreram falhas inesperadas ou mudanças de
comportamento.
Transição da otimização de pacotes específicos para a otimização de todo o app
Para maximizar os benefícios da otimização, faça uma transição gradual do uso de packageScope para o R8 em todo o app. Esse processo envolve aumentar gradualmente a cobertura da otimização:
- Comece com bibliotecas estáveis. Comece incluindo apenas bibliotecas estáveis e amplamente usadas que sejam compatíveis com as otimizações do R8 na lista
packageScope. Comece com as bibliotecas AndroidX e Kotlinandroidx.**,kotlin.**ekotlinx.**. - Adicione pacotes de forma incremental. Adicione gradualmente novos prefixos de pacote ao
packageScope:- Avalie as dependências. Revise as bibliotecas do app. Bons candidatos para adicionar à lista
packageScopeincluem bibliotecas oficiais do Google (por exemplo,com.google.**) e outras bibliotecas robustas, comoOkHttp(por exemplo,okhttp3.**eokio.**). Priorize bibliotecas que não envolvam reflexão, serialização ou chamadas de código nativo (JNI) pesadas. - Priorize com base no tamanho do pacote. Use o APK Analyzer do Android Studio para identificar os maiores contribuintes para o tamanho do app.
1. Crie um AAB ou APK de lançamento com o R8 desativado.
1. Abra no Analyzer e inspecione os arquivos
dex. 1. Ordene os pacotes por tamanho. Os maiores pacotes oferecem o maior retorno do investimento (ROI) para otimização. Segmentar essas primeiro oferece a redução de tamanho mais significativa no início do processo, desde que essas bibliotecas não tenham regras de manutenção muito amplas. Consulte Escolha bibliotecas com sabedoria para mais informações.
- Avalie as dependências. Revise as bibliotecas do app. Bons candidatos para adicionar à lista
- Verifique as mudanças de comportamento. Depois de adicionar cada novo prefixo de pacote, faça testes abrangentes para detectar e resolver regressões ou comportamentos inesperados.
- Adicione os pacotes de apps por último. Se os pacotes do app não usarem muita
reflexão, inclua-os em
packageScopee adicione regras de retenção de forma incremental conforme necessário. Se os pacotes do app usarem muita reflexão, inclua os pacotes empackageScopee adicione regras de retenção em todo o pacote para os pacotes necessários. Itere as regras de retenção para refiná-las. - Use o R8 em todo o app. Depois que a maioria das dependências do app
for incluída na declaração
packageScopee o app estiver estável, remova opackageScopepara otimizar todo o app no modo completo.