Para oferecer a melhor experiência do usuário, otimize seu app para que ele seja o menor e mais rápido possível. Nosso otimizador de apps, chamado R8, simplifica seu app ao remover código e recursos não utilizados, reescrever o código para otimizar o desempenho de execução e muito mais. Para os usuários, isso significa:
- Tempo de inicialização mais rápido
- Melhorias na renderização e no desempenho de execução
- Menos ANRs
Para ativar a otimização do app, defina isMinifyEnabled = true (para otimização de código) e isShrinkResources = true (para otimização de recursos) no script de build no nível do app do build de
lançamento, conforme mostrado no código a seguir. Recomendamos que você sempre ative as duas configurações. Também recomendamos ativar a otimização do app apenas na versão final que você testa antes da publicação, geralmente a build de lançamento. Isso porque as otimizações aumentam o tempo de build do projeto e podem dificultar a depuração devido à forma como modificam o código.
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') ... } } }
Otimizar a redução de recursos para apps ainda menores
A versão 8.12.0 do Plug-in do Android para Gradle (AGP) apresenta uma redução de recursos otimizada, que visa integrar a otimização de recursos e código para criar apps ainda menores e mais rápidos.
Ativar a redução otimizada de recursos
Para ativar o novo pipeline otimizado de redução de recursos em uma versão do AGP
anterior a 9.0.0, adicione o seguinte ao arquivo gradle.properties do projeto:
android.r8.optimizedResourceShrinking=true
Se você estiver usando o AGP 9.0.0 ou uma versão mais recente, não será necessário definir
android.r8.optimizedResourceShrinking=true. A redução otimizada de recursos é
aplicada automaticamente quando isShrinkResources = true está ativado na configuração de
build.
Verificar e configurar as opções de otimização do R8
Para ativar o R8 e usar os recursos de otimização completa, remova a seguinte linha do arquivo gradle.properties do projeto, se ela existir:
android.enableR8.fullMode=false # Remove this line from your codebase.
Ativar a otimização de apps dificulta a compreensão dos stack traces, principalmente se o R8 renomear classes ou métodos. Para receber stack traces que correspondam corretamente ao seu código-fonte, consulte Recuperar o stack trace original.
Se o R8 estiver ativado, crie perfis de inicialização para melhorar ainda mais o desempenho de inicialização.
Se você ativar a otimização de apps e isso causar erros, confira algumas estratégias para corrigi-los:
- Adicione regras de preservação para manter alguns códigos intactos.
- Adotar otimizações de forma incremental.
- Atualize seu código para usar bibliotecas mais adequadas para otimização.
Se você quiser otimizar a velocidade do build, consulte Configurar como o R8 é executado para saber como configurar o R8 com base no seu ambiente.
Mudanças no comportamento das versões do AGP e do R8
A tabela a seguir descreve os principais recursos introduzidos em várias versões do Plug-in do Android para Gradle (AGP) e do compilador R8.
| Versão do AGP | Recursos apresentados |
|---|---|
| 9.0 |
Redução otimizada de recursos:ativada por padrão (controlada usando android.r8.optimizedResourceShrinking). A redução otimizada de recursos ajuda a integrar a redução de recursos ao pipeline de otimização de código, resultando em apps menores e mais rápidos. Ao otimizar o código e as referências de recursos simultaneamente, ele identifica e remove recursos referenciados exclusivamente de código não utilizado. Essa é uma melhoria significativa em relação aos processos de otimização separados anteriores.Isso é especialmente útil para apps que compartilham recursos e código substanciais em diferentes formatos verticais, com melhorias medidas de mais de 50% no tamanho do app. A redução de tamanho resultante leva a downloads menores, instalações mais rápidas e uma experiência do usuário melhor com inicialização mais rápida, renderização aprimorada e menos ANRs. Filtragem de regras da biblioteca:a compatibilidade com opções globais (por exemplo, -dontobfuscate) em regras de consumidor da biblioteca foi removida, e os apps vão filtrar essas opções. Para mais informações, consulte Adicionar opções globais.Verificações de nulidade do Kotlin:otimizadas por padrão (controladas usando -processkotlinnullchecks). Esta versão também introduziu melhorias significativas na velocidade do build. Para mais informações, consulte Opções globais para otimização adicional.Otimizar pacotes específicos:use packageScope para otimizar pacotes específicos. Esse recurso está em suporte experimental. Para mais informações, consulte Otimizar pacotes especificados com packageScope.Otimizado por padrão:o suporte para getDefaultProguardFile("proguard-android.txt") foi removido porque inclui -dontoptimize, que deve ser evitado. Em vez disso, use "proguard-android-optimize.txt". Se você precisar desativar globalmente a otimização no app, adicione a flag manualmente a um arquivo ProGuard.
|
| 8.12 |
Redução de recursos:suporte inicial adicionado (desativado por padrão). Ative usando isShrinkResources). A redução de recursos funciona em conjunto com o R8 para identificar e remover recursos não utilizados de maneira eficaz.Retraço do Logcat:suporte ao retraço automático na janela do Logcat do Android Studio. |
| 8.6 |
Retraçamento aprimorado:inclui o retraçamento do nome do arquivo e do número da linha por padrão para todos os níveis minSdk (antes era necessário minSdk 26 ou mais na versão 8.2).A atualização do R8 ajuda a garantir que os rastreamentos de pilha de builds ofuscados sejam facilmente e claramente legíveis. Essa versão melhora o mapeamento de números de linha e arquivos de origem, facilitando para ferramentas como o Logcat do Android Studio rastrear automaticamente falhas até o código-fonte original. |
| 8.0 |
Modo completo por padrão:o modo completo do R8 oferece uma otimização muito mais eficiente. Ele está ativado por padrão. É possível desativar essa opção em android.enableR8.fullMode=false.
|
| 7.0 |
Modo completo disponível:lançado como um recurso ativado usando android.enableR8.fullMode=true. O modo completo aplica otimizações mais eficientes fazendo suposições mais rigorosas sobre como seu código usa reflexão e outros recursos dinâmicos. Embora reduza o tamanho do app e melhore o desempenho, pode ser necessário adicionar regras de manutenção para evitar que o código necessário seja removido.
|