A otimização do código DEX é uma descoberta do Android vitals que ajuda a monitorar e melhorar a qualidade, o tamanho e o desempenho da compilação do app. Otimizar e ofuscar o código usando o R8 ou ferramentas alternativas, como otimizadores compatíveis com o ProGuard ou pós-processadores DEX secundários, reduz o tamanho do DEX do app, melhora o desempenho do ambiente de execução e minimiza o consumo de memória.
Os arquivos DEX, ou Dalvik Executable, contêm o código compilado usado
para executar o app. Isso normalmente inclui código Java e Kotlin, em vez de
código C++ compilado ou arquivos .so.
O Android vitals informa as métricas de otimização do código DEX para todos os apps e jogos, mas só aplica limites para apps e jogos que atendem a requisitos de tamanho específicos.
Detectar o problema
O Android vitals pode enviar alertas no Play Console quando os níveis de otimização, redução ou ofuscação do código DEX do app não atenderem às porcentagens mínimas definidas.
Como as pontuações de otimização são calculadas
Para apps criados com a versão de patch mais recente do AGP 8.10 ou mais recente (por exemplo,
8.10.1 em vez de 8.10.0), essas porcentagens são extraídas do arquivo
r8.json incluído. Use a versão de patch mais recente do AGP e do R8 para
sua versão secundária para que metadados precisos sejam gerados.
Para apps criados com versões anteriores do AGP ou otimizados com um
otimizador de código alternativo em que r8.json não está incluído, o Android vitals
estima as porcentagens de ofuscação como um proxy usando o arquivo mapping.txt (se
incluído) ou heurísticas DEX.
Tamanho mínimo total do DEX
Embora o Android vitals calcule as métricas de otimização de código para todos os apps, você só vai receber alertas se o pacote de app atender aos seguintes requisitos de tamanho total de DEX:
- Apps: o pacote contém pelo menos 10 MB de código DEX medido como tamanho descompactado.
- Jogos: o pacote contém pelo menos 50 MB de código DEX medido como tamanho não compactado.
Medir a otimização de código localmente
Para medir o tamanho do DEX não compactado do pacote de apps e conferir as porcentagens de otimização,
redução e ofuscação que correspondem às descobertas do Android
Vitals, execute android analyze:
android analyze <yourapp>.aab
Corrigir o problema
Para resolver as pontuações baixas de otimização de código DEX, consulte as recomendações com base no seu sistema de build e otimizador:
R8
Para melhorar as pontuações de otimização de código DEX do R8, consulte as orientações em Melhorar a otimização do R8 e use o Analisador de configuração do R8 para entender como as regras de manutenção afetam as pontuações de otimização, redução e ofuscação. Para definições detalhadas dessas métricas, consulte Entender o relatório.
Se você usa o Plug-in do Android para Gradle (AGP), também pode usar a
habilidade do analisador do R8 para receber mais orientações sobre como otimizar as regras de manutenção
do app. Se você usa o Bazel, também tem acesso ao analisador de configuração do R8.
Consulte a documentação de otimização do R8 do rules_android.
Otimizadores que não são do R8 e pós-processadores DEX
Se o pipeline de build usar ferramentas de build personalizadas ou pós-processadores DEX secundários, siga estas etapas para melhorar a otimização do app:
- Abra o pacote de app no Android Studio e confira o Analisador de APK.
- Selecione todos os arquivos
.dex. - Preste muita atenção aos arquivos com o maior tamanho ao alternar o
botão "Desofuscar nomes" (observação: isso exige que você
carregue um arquivo
mapping.txt). Se você notar que alguns desses arquivos permanecem grandes mesmo após a ofuscação, é provável que eles sejam afetados por regras de manutenção em todo o pacote. - Procure no arquivo
proguard-rules.pro,configuration.txtou no equivalente do seu otimizador, se você não estiver usando o R8, e pesquise regras de manutenção que correspondam aos pacotes que não estão sendo ofuscados. Por exemplo, secom.foo.for um pacote grande nos arquivos DEX, procure regras de armazenamento no formato-keep com.foo.**ou-keep com.foo.bar.**. - As regras de manutenção do consumidor da biblioteca podem não ser tão fáceis de identificar. Se você suspeitar que uma regra de consumidor da biblioteca está afetando a otimização,
inspecione a biblioteca diretamente usando
android analyze <library>.aarou valide-a adicionando a biblioteca a um app de exemplo independente usando uma versão recente do AGP e inspecionando-a com o Analisador de configuração do R8.