Diferença entre perfis de referência e de inicialização

Este documento explica a diferença entre perfis de linha de base e perfis de inicialização.

Você pode usar o plug-in do Gradle do perfil de referência para capturar automaticamente os arquivos de perfil de referência legíveis por humanos gerados pelos testes BaselineProfileRule. Ao criar o app, o Plug-in do Android para Gradle (AGP) compila essas regras de perfil legíveis por humanos em um formato binário, empacotado como baseline.prof no pacote de aplicativo Android (APK) ou no Android App Bundle (AAB), que o Android Runtime (ART) pode usar de maneira eficaz para a compilação no dispositivo, desde que o perfil binário seja menor que 1,5 MB.

Os arquivos de perfil produzidos geralmente são chamados de startup-prof.txt e baseline-prof.txt.

perfil de referência

O arquivo de perfil de referência contém um conjunto abrangente de regras que o ART usa para pré-compilar caminhos de código usados com frequência, o que otimiza a inicialização do app, reduz a instabilidade de interação e melhora a performance geral do ambiente de execução.

O arquivo de perfil de referência geralmente é um superconjunto das regras encontradas no seu perfil de inicialização. Esse arquivo inclui todas as regras necessárias para a otimização da inicialização do app (geradas pela tarefa baselineProfile do Gradle), além de perfis adicionais para outras jornadas críticas do usuário. Por exemplo, rolar e navegar por diferentes telas.

Essas regras não relacionadas à inicialização são geradas independente do valor do campo de configuração includeInStartupProfile. Para mais informações, consulte Visão geral dos perfis de referência.

Perfil de startup

O arquivo de perfil de inicialização contém regras otimizadas especificamente para o caminho de inicialização do app. Durante a compilação, o D8 e o R8 consomem bytecode Java para produzir arquivos executáveis Dalvik (DEX). O D8 e o R8 usam perfis de inicialização para otimizar o layout DEX, colocando o código de inicialização crítico no arquivo .dex principal para um carregamento de classe mais rápido. Para alcançar os ganhos de performance mais significativos, o código de inicialização precisa estar contido no arquivo .dex principal. Se o tamanho cumulativo do código de inicialização for muito grande, ele vai transbordar para arquivos DEX subsequentes, que geralmente são preenchidos com classes e métodos não essenciais, o que diminui a velocidade de inicialização.

Embora um perfil de inicialização forneça os metadados necessários para a otimização do layout DEX, a otimização de código R8 pode ser muito eficaz para ajudar nesse processo. Ao remover código não utilizado e reduzir o bytecode, o R8 reduz a pegada total da lógica de inicialização. Essa redução aumenta a probabilidade de o código crítico permanecer no arquivo .dex principal, evitando estouros e garantindo uma execução mais eficiente em uma variedade maior de versões do Android. Em geral, defina includeInStartupProfile como true apenas para cenários de teste essenciais para a exibição inicial do app.

Para mais informações, consulte Visão geral dos perfis de inicialização.