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. A otimização e a ofuscação do código usando R8 ou ferramentas alternativas (como otimizadores compatíveis com o ProGuard ou pós-processadores DEX secundários) reduzem o tamanho do DEX do app, melhoram o desempenho de execução e minimizam a presença na memória

Os arquivos DEX (Dalvik Executable) contêm o código compilado usado para executar o app. Isso geralmente inclui código Java e Kotlin, em vez de código C++ compilado ou arquivos .so.

O Android vitals informa métricas de otimização de código DEX para todos os apps e jogos, mas só aplica limites para aqueles que atendem a requisitos de tamanho específicos.

Detectar o problema

O Android vitals pode alertar quando os níveis de otimização do código DEX do app estão baixos. Isso inclui ofuscação, redução e otimização para apps e jogos que usam o R8. Para apps que não usam o R8, o Android vitals tenta verificar as taxas de otimização, redução e ofuscação, mas recorre à heurística de ofuscação como um proxy quando necessário.

Monitorar o status da otimização

O Android vitals pode ajudar a melhorar o desempenho do app, alertando você pelo Play Console quando ele não atende às porcentagens mínimas definidas para otimização de código. Para definições detalhadas de redução, otimização e ofuscação, consulte Usar o Analisador de configuração do R8.

Para apps criados com o patch mais recente da versão 8.10 ou mais recente do AGP, essas porcentagens são extraídas do arquivo r8.json incluído.

Para versões mais antigas do AGP ou quando o arquivo r8.json não está incluído, as porcentagens são calculadas no arquivo mapping.txt, se incluído, ou usando a heurística DEX se o arquivo de mapeamento não estiver disponível.

Para apps otimizados com um otimizador de código alternativo, o Android vitals realiza uma análise para estimar a porcentagem de classes, métodos e campos ofuscados no pacote de app.

Mínimos de tamanho total do DEX

Embora o Android vitals calcule 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 do 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 descompactado.

O Android vitals mostra o tamanho do DEX do app, mas você também pode medir isso localmente usando a linha de comando:

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

Medir a otimização do código R8 localmente

Se o app for otimizado com o R8, você poderá medir a otimização, a ofuscação e a redução do Android App Bundle usando o Analisador de configuração do R8. O relatório do Analisador de configuração do R8 também está incluído na R8 Analyzer Skill. Embora o relatório possa ajudar você a entender como as regras de manutenção afetam as pontuações de otimização, redução e ofuscação, as porcentagens no relatório não correspondem aos valores no Android vitals, porque essas porcentagens são calculadas antes das otimizações.

Para inspecionar os metadados exatos que o Android vitals usa para calcular suas pontuações, extraia o arquivo r8.json do pacote de app:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

Corrigir o problema

Para resolver pontuações baixas de otimização de código DEX, analise as recomendações com base no sistema de build e no otimizador:

Plug-in do Android para Gradle e R8

Para melhorar as pontuações de otimização do código DEX do R8, consulte as orientações em Melhorar a otimização do R8. Você também pode usar a R8 Analyzer Skill para receber mais orientações sobre como otimizar as regras de manutenção do app.

Sistemas de build 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 visualize-o no APK Analyzer.
  • Selecione todos os arquivos .dex.
  • Preste atenção aos arquivos com o maior tamanho ao ativar o "Desofuscar nomes". Observação: isso exige que você faça o upload de um arquivomapping.txt. Se alguns desses arquivos permanecerem grandes enquanto estiverem ofuscados, é provável que eles sejam afetados por regras de manutenção em todo o pacote.
  • Procure no arquivo proguard-rules.pro, configuration.txt ou equivalente para o 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 no DEX, procure regras de manutenção do formato -keep com.foo.** ou -keep com.foo.bar.**.
  • As regras de manutenção do consumidor de biblioteca podem não ser tão simples de identificar. Se você suspeitar que uma regra de consumidor de biblioteca está afetando a otimização, valide localmente adicionando-a a um app de exemplo independente usando uma versão recente do AGP e inspecionando-a com o Analisador de configuração do R8.