Os perfis de referência melhoram a velocidade de execução do código em cerca de 30% desde a primeira inicialização, evitando a interpretação e as etapas de compilação just-in-time (JIT) para caminhos de código incluídos.
Ao enviar um perfil de referência em um app ou uma biblioteca, o Android Runtime (ART) pode otimizar os caminhos de código especificados, usando a compilação antecipada (AOT, na sigla em inglês) para fornecer melhorias de desempenho a cada novo usuário e atualização do app. Essa otimização guiada por perfil (PGO, na sigla em inglês) permite que os apps otimizem a inicialização, reduzam a instabilidade de interação e melhorem o desempenho geral de execução para usuários desde o lançamento.
Essas melhorias resultam diretamente em melhores métricas de negócios, como retenção de usuários, transações e classificações. Leia as histórias dos apps Josh, Lyft, TikTok e Zomato para descobrir como o desempenho afeta as métricas de negócios.
Benefícios dos perfis de referência
Os perfis de referência tornam todas as interações do usuário, como inicialização do app, navegação entre telas ou rolagem de conteúdo, mais suaves desde a primeira execução. Ao aumentar a velocidade e a capacidade de resposta de um app, os perfis de referência podem gerar mais usuários ativos por dia e uma taxa média de visitantes recorrentes mais alta.
Os perfis de referência ajudam a orientar a otimização além da inicialização do app, oferecendo interações comuns do usuário que melhoram o tempo de execução desde o primeiro uso. A compilação guiada AOT não depende de dispositivos do usuário e pode ser feita uma vez por versão em uma máquina de desenvolvimento em vez de um dispositivo móvel. Com o envio de versões com um perfil de referência, as otimizações de apps ficam disponíveis muito mais rápido do que usando apenas os perfis da nuvem.
Quando um perfil de referência não é usado, todo o código do app passa por compilação JIT na memória
após ser interpretado ou é escrito em um arquivo odex
em segundo plano quando o dispositivo está
inativo. Depois de instalar ou atualizar um app, os usuários têm uma
experiência não ideal desde a primeira execução até que novos caminhos de código sejam
otimizados.
Muitos apps relatam cerca de 30% de melhora de performance após a otimização.
Perfis de inicialização
Os perfis de inicialização são semelhantes aos perfis de referência. A diferença é que eles
são usados durante a compilação, e não para a otimização no dispositivo. Um perfil
de inicialização é usado para otimizar o layout do arquivo DEX e melhorar os tempos de inicialização.
O código identificado no perfil de inicialização é colocado no arquivo classes.dex
principal, e o outro em arquivos DEX separados. Isso melhora
os tempos de inicialização, reduzindo o número de falhas da página durante a inicialização do app. Para saber
mais sobre como os perfis de inicialização e as otimizações de layout DEX podem melhorar os tempos de
inicialização do app, consulte Otimizações de layout DEX e perfis de
inicialização.
Começar
Para começar a otimizar a performance do app atual, consulte Criar perfis de referência.
Versões estáveis mínimas recomendadas
A cadeia de dependências oferece as versões de lançamento estáveis e em desenvolvimento. Para gerar e instalar um perfil de referência, use as versões abaixo ou mais recentes do Plug-in do Android para Gradle, da biblioteca Macrobenchmark e do instalador de perfil. Essas dependências são necessárias em momentos diferentes e funcionam juntas como um conjunto de ferramentas para gerar um perfil de referência ideal.
- Plug-in do Android para Gradle:
com.android.tools.build:8.0.0
- Biblioteca Macrobenchmark:
androidx.benchmark:benchmark-macro-junit4:1.3.3
- Instalador de perfil:
androidx.profileinstaller:profileinstaller:1.4.1
Recomendamos o uso da versão mais recente do AGP para criar e gerenciar perfis de referência. Estas são as principais funcionalidades que acompanham diferentes versões do AGP:
Versão do AGP | Recursos |
---|---|
8.4 | Instalações de apps locais de builds não depuráveis usando a ferramenta de linha de comando do wrapper do Gradle ou o Android Studio instalam perfis de referência para que o desempenho do build de lançamento local corresponda mais de perto à produção. Essa atualização não afeta o desempenho de produção dos perfis de referência. |
8.3 |
|
8.2 |
|
8.0 | Versão mínima recomendada: use o plug-in do perfil de referência do Gradle para gerar perfis de referência com uma única tarefa do Gradle.
|
7.4 |
Versão mínima com suporte: os apps podem consumir perfis de referência
de bibliotecas e fornecer o próprio perfil de referência no
arquivo src/main/baseline-prof.txt .
|
Exemplo de geração de perfil
Consulte o exemplo de classe abaixo para criar um perfil de referência para a inicialização do app, além de vários eventos de navegação e rolagem usando a biblioteca Macrobenchmark recomendada:
@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
// App startup journey.
startActivityAndWait()
device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
device.findObject(By.res("myLazyColumn")).also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
device.pressBack()
}
}
}
É possível conferir esse código em um contexto completo e em mais detalhes como parte dos nossos exemplos de performance no GitHub (link em inglês).
O que incluir
Ao usar perfis de referência em um app, você pode incluir um código de inicialização e algumas interações comuns do usuário, por exemplo, navegação entre telas ou rolagem. Também é possível coletar fluxos inteiros, por exemplo, registro, login ou pagamento. Qualquer jornada do usuário que você considere crítica pode se beneficiar dos perfis de referência, melhorando a performance de execução.
Se você estiver testando abordagens diferentes para melhorar a performance, inclua perfis de referência para os dois grupos do experimento. Ao fazer isso, você facilita a interpretação dos resultados, garantindo que todos os usuários executem de maneira consistente o código compilado.
As bibliotecas podem fornecer perfis de referência próprios e os enviar nos lançamentos de novas versões para melhorar o desempenho do app. Por exemplo, consulte a seção Usar um perfil de referência na página performance do Jetpack Compose.
Como funcionam os perfis de referência
Ao desenvolver seu app ou biblioteca, defina perfis de referência para cobrir interações comuns do usuário em que a latência ou o tempo de renderização são importantes. Confira como eles funcionam:
As regras de perfil legíveis por humanos são geradas para o app e compiladas em formato binário. Você pode encontrá-las em
assets/dexopt/baseline.prof
. Em seguida, faça upload do AAB no Google Play normalmente.O Google Play processa o perfil e o envia diretamente para os usuários com o APK. Durante a instalação, o ART realiza a compilação antecipada de métodos no perfil, resultando em uma execução mais rápida deles. Se o perfil tem métodos usados na inicialização do app ou durante a renderização do frame, o usuário pode notar tempos de inicialização mais rápidos e instabilidade reduzida.
Esse fluxo coopera com a agregação de perfis da nuvem para ajustar o desempenho com base no uso real do app ao longo do tempo.
Perfis da nuvem
Os perfis da nuvem oferecem uma outra forma de PGO, agregada pela Google Play Store e distribuída para compilação durante a instalação, junto aos perfis de referência.
Embora os perfis da nuvem sejam focados em interações reais do usuário com o app, eles levam várias horas ou dias após uma atualização para serem distribuídos, o que limita a disponibilidade. Até que os perfis sejam totalmente distribuídos, a performance do aplicativo não será ideal para usuários novos ou que atualizaram o app. Além disso, os perfis da nuvem oferecem suporte apenas a dispositivos com o Android 9 (nível 28 da API) ou versões mais recentes, e só são escalonados corretamente para apps que tenham uma base de usuários suficientemente grande.
Comportamento de compilação nas versões do Android
As versões da plataforma Android usam diferentes abordagens de compilação de apps, cada uma com uma compensação de performance correspondente. Os perfis de referência melhoram os métodos de compilação anteriores fornecendo um perfil para todas as instalações.
Versão do Android | Método de compilação | Abordagem de otimização |
---|---|---|
Android 5 a 6 (API de nível 21 a 23) | Antecipação completa | O app todo é otimizado durante a instalação, resultando em longos tempos de espera para o uso, aumento no uso de RAM e espaço em disco e tempos mais longos de carregamento do código do disco, o que pode aumentar os tempos de inicialização a frio. |
Android 7 a 8.1 (API de nível 24 a 27) | Antecipação parcial (perfil de referência) | Os perfis de referência são
instalados por
androidx.profileinstaller
na primeira execução, quando o
módulo do app define essa
dependência. O ART pode melhorar
ainda mais o processo adicionando
outras regras de perfil
durante o uso do app e
as compilando quando o
dispositivo está inativo. Isso
otimiza o espaço em disco
e o tempo para carregar o código do
disco, reduzindo
o tempo de espera do app. |
Android 9 (nível 28 da API) e versões mais recentes | Antecipação parcial (perfil de referência + da nuvem) | O Google Play usa perfis de referência durante a instalação do app para otimizar os perfis de APK e da nuvem, se disponíveis. Após a instalação, é feito o upload dos perfis do ART para o Play, e eles são agregados e fornecidos como perfis da nuvem para outros usuários na instalação ou atualização do app. |
Problemas conhecidos
Confira abaixo possíveis problemas e soluções ou problemas em que há desenvolvimentos contínuos de soluções alternativas:
A geração do perfil de referência pode falhar devido às configurações de permissão em alguns dispositivos, incluindo dispositivos OnePlus. Para contornar esse problema, desative a opção Desativar monitoramento de permissões nas configurações Opções do desenvolvedor.
A geração de perfil de referência não é compatível com dispositivos do Firebase Test Lab, incluindo os gerenciados pelo Gradle (issue #285187547).
Para fornecer perfis de referência para bibliotecas, use o plug-in do perfil de referência para Gradle 1.2.3 ou o AGP 8.3, no mínimo (problema 313992099).
Se você gerar perfis de referência com o comando
./gradlew app:generateBaselineProfile
, os comparativos de mercado no módulo de teste também serão executados e os resultados serão descartados. Se isso acontecer, você poderá gerar apenas os perfis de referência executando o comando com-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
. Esse problema foi corrigido no AGP 8.2.O comando para gerar perfis de referência para todos os tipos de build,
./gradlew app:generateBaselineProfile
, só gera perfis de referência para o tipo de build de lançamento. Esse problema foi corrigido no AGP 8.1.Os canais de distribuição de apps que não são da Google Play Store podem não oferecer suporte ao uso de perfis de referência na instalação. Os usuários de apps instalados que usam esses canais não terão esses benefícios até que o dexopt em segundo plano seja executado, provavelmente durante a madrugada.
O Compartilhamento interno de apps da Play Store não tem suporte a perfis de referência. No entanto, a faixa de teste interno tem.
As otimizações de bateria em alguns dispositivos, como os da Huawei, podem interferir na instalação do perfil. Para garantir que seus perfis sejam instalados de maneira eficaz, desative todas as otimizações de bateria nos dispositivos de referência.
Outros recursos
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Criar perfis de referência {:#creating-profile-rules}
- Criar e medir perfis de referência sem a Macrobenchmark
- Otimizações de layout DEX e perfis de inicialização