Use o R8 para reduzir, otimizar e acelerar seu app
Esta é a Semana de Destaques da Performance do Android!
Vamos começar com a mudança mais impactante e fácil que você pode fazer para melhorar a performance do seu app: ativar o otimizador R8 no modo completo.
Você provavelmente já conhece o R8 como uma ferramenta para reduzir o tamanho do seu app. Ele faz um trabalho fantástico de remoção de código e recursos não utilizados, reduzindo o tamanho do app. Mas o verdadeiro poder dele, o que ele realmente g-R8, é como 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 ser fundamentalmente mais eficiente. Não é apenas um pequeno ajuste.
Depois de ler este artigo, confira a introdução da Semana de destaque da performance ao otimizador R8 no YouTube.
Como o R8 melhora o desempenho do seu app
Vamos destacar as principais etapas que o otimizador R8 realiza para melhorar o desempenho do app.
O tree shaking é a etapa mais importante para reduzir o tamanho do app. Durante essa fase, o otimizador R8 remove códigos não utilizados de bibliotecas das quais seu app depende, além de códigos inativos da sua própria base de código.
A inclusão de método substitui uma chamada de método pelo código real, o que melhora o desempenho do tempo de execução.
A fusão de classes e outras estratégias são aplicadas para tornar o código mais compacto. Todas as suas 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 outros mais curtos e sem significado. Assim, em vez de MyDataModel, você pode ter uma classe chamada a. Isso causa muita confusão ao ler rastreamentos de pilha de um app otimizado pelo R8. Observação: melhoramos isso no AGP 9.0.
A redução de recursos reduz ainda mais o tamanho de um app removendo 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 mais fluida da interface, com menos frames lentos e congelados, e melhora o uso geral de recursos no dispositivo.
Estudo de caso: melhorias de performance do Reddit com o R8
Como um exemplo das melhorias de desempenho que o R8 pode trazer, vamos analisar um exemplo do Reddit. Depois de ativar o R8 no modo completo, o app Reddit para Android teve melhorias significativas de desempenho em várias áreas.
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 levam a um app mais estável e confiável, reduzindo a frustração do usuário. A renderização de frames mais suave remove a instabilidade da interface, tornando a rolagem e as animações fluidas e responsivas. Esse impacto técnico positivo também ficou claramente visível 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, percebemos 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 diários, semanais ou usuários ativos por mês, também foi afetado positivamente pelas melhorias de desempenho técnico. E vimos as classificações de apps na Google Play Store aumentarem 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 a performance do app.
Então, vamos chamar pelo nome certo: a otimização deliberada de performance é uma virtude.
Como criar um app com melhor desempenho
Sabemos que nossa orientação para desenvolvedores do R8 precisava ser melhorada. Então, começamos a trabalhar. A orientação para desenvolvedores do otimizador R8 agora é muito mais prática e oferece orientaçõ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 gradual permite que você aproveite os benefícios do R8 com segurança e receba orientações sobre problemas difíceis de depurar.
Expandimos significativamente nossas orientações sobre 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 práticas recomendadas para escrever e manter essas regras. Também fornecemos exemplos e casos de uso práticos e úteis para ajudar você a entender como evitar corretamente que o R8 remova códigos necessários no momento da execução, como códigos acessados por reflexão ou uso da interface nativa JNI.
A documentação agora também aborda etapas essenciais de acompanhamento 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. A seção 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 R8 para outros desenvolvedores usarem.
Aproveite 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 seu app para a variante de lançamento. Ele é ativado definindo 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 performance 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 grande impacto. Ao inspecionar a configuração do R8, a equipe descobriu que a flag -dontoptimize estava sendo usada. Ele foi introduzido por um arquivo de configuração padrão, que ainda é usado em muitos apps hoje em dia.
Depois de substituir proguard-android.txt por proguard-android-optimize.txt, a equipe do Disney+ notou melhorias significativas na performance do app.
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 3 do Android Studio Narwhal, você vai receber um aviso do lint ao usar proguard-android.txt
E, a partir do AGP 9.0, vamos remover totalmente o suporte para o arquivo. Isso significa que você terá que migrar para o proguard-android-optimize.txt.
Também investimos em novos recursos do Android Studio para facilitar a depuração de código otimizado para R8. A partir do AGP 9.0, agora é possível desofuscar automaticamente rastreamentos de pilha no Logcat do Android Studio para builds processados pelo R8, ajudando você a identificar a linha de código exata que está causando um problema, mesmo em um app totalmente otimizado. Isso será abordado com mais profundidade na postagem do blog de amanhã sobre esta semana do Android Performance Spotlight.
Próximas etapas
Confira a introdução da Semana de Destaques de Performance ao otimizador R8 no YouTube.
📣 Participe do 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.
- Siga nossos guias para desenvolvedores e comece a ativar a otimização de apps.
- Verifique se você ainda usa
proguard-android.txte substitua porproguard-android-optimize.txt. - Em seguida, meça o impacto. Não apenas sinta a diferença, verifique. Para medir os ganhos de performance, adapte o código do app de exemplo da biblioteca Macrobenchmark no GitHub (em inglês) e meça os tempos de inicialização antes e depois.
Temos certeza de que você vai notar uma melhoria significativa no desempenho do app. Use #optimizationEnabled para tirar dúvidas sobre como ativar ou solucionar problemas do R8. Estamos aqui para ajudar.
Envie suas perguntas para a sessão "Pergunte ao Android" na sexta-feira
Use a tag #AskAndroid nas redes sociais para tirar dúvidas sobre desempenho. Durante a semana, vamos monitorar suas perguntas e responder a várias delas na sessão "Pergunte ao Android" sobre desempenho na sexta-feira, 21 de novembro. Amanhã, vamos analisar ainda mais a fundo a depuração e a solução de problemas. Por enquanto, comece a usar o R8 e coloque seu app no caminho certo.
Continuar lendo
-
Eventos e programas
Desde os recursos básicos do otimizador R8 e das otimizações guiadas por perfil até as melhorias de desempenho com o Jetpack Compose e um novo guia para melhorar o desempenho do app, abordamos as ferramentas de baixo esforço e alto impacto necessárias para criar um app eficiente.
Ben Weiss, Sara Hamilton • 3 min de leitura
-
Eventos e programas
Em setembro do ano passado, compartilhamos nossa visão para o futuro do Google Play Games com base em uma crença fundamental: a melhor maneira de impulsionar o sucesso do seu jogo é oferecer uma experiência de jogador de nível internacional.
Maru Ahues Bouza • 3 min de leitura
-
Eventos e programas
O Google I/O está de volta! Participe on-line e conheça nossos avanços e atualizações mais recentes em produtos de toda a empresa, do Gemini ao Android, Chrome, Cloud e muito mais.
Leitura de 1 minuto
Fique por dentro
Receba os insights mais recentes sobre desenvolvimento Android na sua caixa de entrada semanalmente.