Eventos e programas

Usar o R8 para reduzir, otimizar e acelerar seu app

Leitura de 5 min
Ver o perfil de Ben Weiss
Ben Weiss Engenheiro de relações com desenvolvedores

Usar o R8 para reduzir, otimizar e acelerar seu app

Este é o primeiro dia da Semana de Destaque de Performance do Android!

Vamos começar com a mudança mais impactante e de menor esforço que você pode fazer para melhorar o desempenho do seu app: ativar o otimizador R8 no modo completo.

Você provavelmente já conhece o R8 como uma ferramenta para reduzir o tamanho do app. Ele faz um trabalho fantástico de remover códigos e recursos não utilizados, reduzindo o tamanho do app. Mas o verdadeiro poder dele, o que ele faz de m-8, é ser um otimizador.

Quando você ativa o modo completo e permite otimizações, o R8 realiza otimizações profundas em todo o programa, reescrevendo o código para que ele seja fundamentalmente mais eficiente. Não é só um pequeno ajuste.

Depois de ler este artigo, confira a introdução da Performance Spotlight Week ao otimizador R8 no YouTube.

Como o R8 melhora o desempenho do seu app

image.png

Vamos destacar as principais etapas que o otimizador R8 segue para melhorar o desempenho do app.

A remoção de código morto é a etapa mais importante para reduzir o tamanho do app. Durante essa fase, o otimizador do R8 remove o código não utilizado das bibliotecas de que seu app depende, bem como o código inativo da sua própria base de código.

A incorporação de métodos substitui uma chamada de método pelo código real, o que melhora o desempenho do ambiente de execução.

A mesclagem de classes e outras estratégias são aplicadas para tornar o código mais compacto. Todas as suas belas abstrações, como interfaces e hierarquias de classes, não importam neste momento e provavelmente serão removidas.

A minificação de código é usada para mudar os nomes de classes, campos e métodos para nomes mais curtos e sem significado. Portanto, em vez de MyDataModel, você pode acabar com uma classe chamada a. Isso é o que causa mais confusão ao ler stack traces de um app otimizado pelo R8. Observação: melhoramos isso no AGP 9.0.

A redução de recursos diminui ainda mais o tamanho de um app ao remover recursos não utilizados, como arquivos XML e drawables.

Ao aplicar essas etapas, o otimizador R8 melhora os tempos de inicialização do app, permite uma renderização de interface mais suave, com menos frames lentos e congelados, e melhora o uso geral de recursos no dispositivo.

Estudo de caso: melhorias de desempenho do Reddit com o R8

Como um exemplo das melhorias de desempenho que o R8 pode trazer, vamos dar uma olhada em um exemplo do Reddit. Depois de ativar o modo completo do R8, o app Reddit para Android teve melhorias significativas de desempenho em várias áreas.

image.png

Legenda: Como o R8 melhorou o desempenho do app do Reddit

A equipe observou uma inicialização a frio 40% mais rápida, uma redução de 30% nos erros "O app não está respondendo" (ANR), uma melhoria de 25% na renderização de frames e uma redução de 14% no tamanho do app.

Essas melhorias são cruciais para a satisfação do usuário. Uma inicialização mais rápida significa menos espera e acesso mais rápido ao conteúdo. Menos ANRs resultam em um app mais estável e confiável, reduzindo a frustração do usuário. A renderização de frames mais suave remove as instabilidades da interface, tornando a rolagem e as animações mais fluidas e responsivas. Esse impacto técnico positivo também ficou evidente no sentimento dos usuários.

Saiba mais sobre as melhorias no nosso blog.

Efeitos colaterais não técnicos do uso do R8

Durante nosso trabalho com parceiros, vimos que essas melhorias técnicas têm um impacto direto na satisfação do usuário e podem ser refletidas na retenção de usuários, no engajamento e na duração da sessão. O engajamento do usuário, que pode ser medido com usuários ativos por dia, semana ou mês, também foi afetado positivamente pelas melhorias no desempenho técnico. E as notas dos apps na Google Play Store aumentaram em correlação com a adoção do R8. Compartilhar isso com os proprietários de produtos, CTOs e tomadores de decisão pode ajudar a acelerar o desempenho do seu app.

image.png

Vamos chamar as coisas pelo nome: a otimização deliberada de desempenho é uma virtude.

Como melhorar o desempenho do seu app

Recebemos feedback de que as orientações para desenvolvedores sobre o R8 precisavam ser melhoradas. Então, fomos trabalhar. As orientações para desenvolvedores do otimizador R8 agora são muito mais práticas e oferecem instruções abrangentes para ativar e depurar o R8.

A documentação orienta você sobre a estratégia de alto nível para adoção, enfatizando a importância de escolher bibliotecas compatíveis com otimização e, principalmente, adotar os recursos do R8 de forma incremental para garantir a estabilidade. Essa abordagem em fases permite que você aproveite os benefícios do R8 com segurança e oferece orientações sobre problemas difíceis de depurar.

Ampliamos significativamente nossas orientações sobre as regras de manutenção, que são o principal mecanismo para controlar o otimizador R8. Agora, oferecemos uma seção sobre o que são as regras de retenção, como aplicá-las e orientações com as práticas recomendadas para escrevê-las e mantê-las. Também fornecemos casos de uso e exemplos práticos, ajudando você a entender como impedir corretamente que o R8 remova o código necessário no momento da execução, como o código acessado por reflexão ou o uso da interface nativa do JNI.

A documentação agora também aborda as etapas de acompanhamento essenciais e cenários avançados. Adicionamos uma seção sobre testes e solução de problemas para que você possa verificar os ganhos de desempenho e depurar possíveis problemas que surgirem. A seção de configurações avançadas explica como segmentar variantes de build específicas, personalizar quais recursos são mantidos ou removidos e oferece instruções especiais de otimização para autores de bibliotecas, garantindo que você possa fornecer um pacote otimizado e compatível com o R8 para outros desenvolvedores usarem.

Ativar todo o potencial do otimizador R8

O otimizador R8 usa o "modo completo" por padrão desde a versão 8.0 do Plug-in do Android para Gradle. Se o projeto foi desenvolvido ao longo de muitos anos, ele ainda pode incluir uma flag legada para desativá-lo. Verifique se essa linha está no arquivo gradle.properties e remova-a.

android.enableR8.fullMode=false // delete this line to enable R8's full potential

Agora, verifique se você ativou o R8 no arquivo build.gradle.kts do app para a variante de lançamento. Ele é ativado ao definir isMinifyEnabled e isShrinkResources como "true". Também é possível transmitir arquivos de configuração padrão e personalizados nessa etapa.

release {

   isMinifyEnabled = true

   isShrinkResources = true

   proguardFiles(

       getDefaultProguardFile("proguard-android-optimize.txt"),

       "keep-rules.pro"

   )

}

Estudo de caso: melhorias de desempenho do Disney+

Os engenheiros do Disney+ investem no desempenho do app e estão otimizando a experiência do usuário. Às vezes, até mesmo mudanças aparentemente pequenas podem ter um impacto enorme. Ao inspecionar a configuração do R8, a equipe descobriu que a flag -dontoptimize estava sendo usada. Ele foi trazido por um arquivo de configuração padrão, que ainda é usado em muitos apps hoje em dia.

Depois de substituir o proguard-android.txt pelo proguard-android-optimize.txt, a equipe do Disney+ observou melhorias significativas no desempenho do app.

image.png

Depois que uma nova versão do app com essa mudança foi lançada para os usuários, o Disney+ teve uma inicialização 30% mais rápida e 25% menos ANRs percebidos pelo usuário. 

Hoje, muitos apps ainda usam o arquivo proguard-android.txt, que contém a flag -dontoptimize. É aí que entram as melhorias nas ferramentas.

Suporte a ferramentas

A partir da atualização de recursos do Android Studio Narwhal 3, você vai receber um aviso de lint ao usar proguard-android.txt.

image.png

A partir do AGP 9.0, vamos remover totalmente o suporte ao arquivo. Isso significa que você vai precisar migrar para o proguard-android-optimize.txt.

Também investimos em novos recursos do Android Studio para facilitar ainda mais a depuração de código otimizado pelo R8. A partir do AGP 9.0, é possível desofuscar automaticamente stack traces no logcat do Android Studio para builds processados pelo R8, o que ajuda a identificar a linha exata do código que está causando um problema, mesmo em um app totalmente otimizado. Isso será abordado em mais detalhes na postagem do blog de amanhã sobre esta Semana de Destaque de Desempenho do Android.

Próximas etapas

Confira a introdução da Semana de Destaques de Performance ao otimizador R8 no YouTube.

📣 Aceite o desafio de performance!

É hora de conferir os benefícios por conta própria.

Desafiamos você a ativar o modo completo do R8 no seu app hoje mesmo.

  1. Siga nossos guias para desenvolvedores para começar: Ativar a otimização de apps.
  2. Verifique se você ainda usa proguard-android.txt e substitua por proguard-android-optimize.txt.
  3. Em seguida, meça o impacto. Não basta sentir a diferença, verifique. Meça os ganhos de desempenho adaptando o código do nosso app de exemplo da Macrobenchmark no GitHub para medir os tempos de inicialização antes e depois.

Temos certeza de que você vai notar uma melhora significativa no desempenho do seu app. Use #optimizationEnabled para qualquer dúvida sobre como ativar ou resolver problemas do R8. Estamos aqui para ajudar.

Traga suas dúvidas para a sessão "Pergunte ao Android" na sexta-feira

Use a tag #AskAndroid nas redes sociais para fazer perguntas sobre desempenho. Durante a semana, vamos monitorar suas perguntas e responder a várias delas na sessão "Pergunte ao Android" sobre performance na sexta-feira, 21 de novembro. Amanhã vamos nos aprofundar ainda mais na depuração e na solução de problemas. Por enquanto, comece a usar o R8 e coloque seu app no caminho certo.

Escrito por:
Continue lendo