Testar e resolver problemas de otimização

Depois de ativar a otimização do app, verifique se ele está funcionando conforme o esperado e se a configuração do R8 está fazendo o que você espera. As etapas gerais são as seguintes:

  1. Teste as jornadas ideais do usuário (CUJs) do app: por exemplo, verifique se os usuários podem fazer login e outras tarefas importantes.
  2. Meça os ganhos de performance usando comparativos:compare seu app antes e depois de ativar a otimização.

Se você encontrar problemas, o R8 oferece ferramentas para ajudar na solução. Se você não conseguir resolver um problema com o R8, informe um bug.

Dicas gerais

Os problemas com o R8 geralmente são exclusivos do app, mas aqui estão algumas dicas gerais para facilitar a depuração:

  • Desativar temporariamente a ofuscação:o R8 ofusca o código como parte do processo de otimização. A ofuscação geralmente não é a causa de erros, mas ela dificulta a depuração. Adicione as flags ‑dontobfuscate e ‑dontoptimize ao arquivo de regras de manutenção para ajudar a identificar o código problemático.
  • Verificar a reflexão:se você encontrar uma exceção no such element (nenhum elemento desse tipo), como

    Caused by: java.util.NoSuchElementException: Collection contains no element matching the predicate in the stack trace ,

    A exceção geralmente significa que o campo em questão está sendo usado por reflexão e você precisa adicionar uma regra de manutenção.

  • Inspecionar bytecode:a maioria dos problemas do R8 exige a inspeção de bytecode, que pode ser feita com ferramentas como o APK Analyzer.

Verificar quais regras são aplicadas

Para gerar um relatório completo de todas as regras que o R8 aplica ao criar seu projeto, inclua o seguinte no arquivo proguard‑rules.pro do módulo do app:

-printconfiguration <output-dir>/<report-name>.txt

Você pode especificar qualquer caminho e nome de arquivo. Se você não especificar um caminho ou nome de arquivo, o R8 vai gerar o relatório de regras em <module-name>/build/outputs/mapping/<build-type>/configuration.txt.

Entender por que o código foi mantido

Se você encontrar um código mantido que esperava ser removido, use a opção de configuração ‑whyareyoukeeping para entender por que ele foi mantido. O R8 gera um caminho do código mantido para um dos pontos de entrada do app. Para mais informações, consulte a documentação ‑whyareyoukeeping no manual do Proguard.

Recuperar o stack trace original

O código processado pelo R8 muda de várias maneiras para que o stack trace não se refira mais ao código original. Por exemplo, os números de linha e os nomes de classes e métodos podem mudar. Para recuperar o stack trace original, o R8 oferece a ferramenta de linha de comando retrace, que faz parte do pacote de ferramentas de linha de comando.

Para usar o retrace, forneça um arquivo de mapeamento e um arquivo de stack trace. O arquivo de mapeamento, chamado mapping.txt, é agrupado automaticamente com o Android App Bundle (AAB). Para mais detalhes, consulte a documentação de retrace e o artigo da Central de Ajuda do Play Console sobre como desofuscar stack traces de falhas.