Otimização de código DEX

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.txt ou 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, se com.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>.aar ou 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.