ProfileInstaller

  
Permite que as bibliotecas sejam preenchidas automaticamente antes dos rastros de compilação serem lidos pelo ART.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
7 de fevereiro de 2024 1.3.1 - - 1.4.0-alpha01

Declarar dependências

Para adicionar uma dependência ao ProfileInstaller, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários ao arquivo build.gradle do seu app ou módulo:

Groovy

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.3.1"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.3.1")
}

Para mais informações sobre dependências, consulte Adicionar dependências de build.

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.4

Versão 1.4.0-alpha01

7 de fevereiro de 2024

Lançamento de androidx.profileinstaller:profileinstaller:1.4.0-alpha01. A versão 1.4.0-alpha01 contém estas confirmações.

Correções de bugs

  • Código de erro adicionado para nenhum perfil incorporado ao verificador de perfil. (Ifb109, b/313928520).
  • Correção de falhas ao descartar sombreadores no Android U (API 34) e em emuladores (I031ca, b/274314544).
  • Foi ativado o suporte para Android U no instalador de perfil. (Iaf177).
  • Correção do instalador de perfil no Android U que falhava porque o perfil atual não era criado vazio quando o processo era iniciado (Ie3899).
  • Correção da transcodificação de bitmap do método no formato de perfil V_015S (aosp/2906631) e (aosp/2847740).

Versão 1.3

Versão 1.3.1

3 de maio de 2023

Lançamento de androidx.profileinstaller:profileinstaller:1.3.1. A versão 1.3.1 contém estas confirmações.

Correções de bugs

  • Foi ativado o suporte para Android U no instalador de perfil (Iaf177).
  • Correção do instalador de perfil no Android U que falhava porque o perfil atual não era criado vazio quando o processo era iniciado (Ie3899).

Versão 1.3.0

22 de março de 2023

Lançamento de androidx.profileinstaller:profileinstaller:1.3.0. A versão 1.3.0 contém estas confirmações.

Mudanças importantes desde a versão 1.2.0

  • Correção de uma NullPointerException em ProfileInstallReceiver (b/243851384).
  • A API ProfileVerifier foi adicionada para verificar no app se um perfil de referência foi compilado, programado ou está ausente (I263a4, b/246653809).
  • Foi adicionada uma nova transmissão do shell que permite que o Macrobenchmark apague totalmente os dados de perfil na memória para disco para que sejam incluídos na geração de perfil de referência. Isso é necessário para usar a biblioteca macrobenchmark para capturar perfis de valor de referência com BaselineProfileRule e avaliar a performance do perfil usando CompilationMode.Partial(warmupIterations)
  • Inclusão de um código de diagnóstico para detectar perfis de referência compactados. Os perfis de referência compactados não podem ser instalados pelo Profileinstaller em Macrobenchmarks ou em produção devido à sobrecarga da CPU. Eles precisam ser evitados ao criar o app atualizando para Studio/AGP Electric Eel ou a versão bundletool 1.13.1(I86413, b/261998144).
  • Foram adicionados hooks a macrobenchmark para capturar perfis e armazenar o cache do sombreador, que são necessários para gerar perfis de referência ou a macrobenchmark em dispositivos sem acesso root (Ie0a7d, b/250083467, b/253094958) (Ia5171, b/231455742).

Versão 1.3.0-rc01

8 de março de 2023

androidx.profileinstaller:profileinstaller:1.3.0-rc01 é lançado sem mudanças desde a última versão Beta. A versão 1.3.0-rc01 contém estas confirmações.

Versão 1.3.0-beta01

8 de fevereiro de 2023

Lançamento de androidx.profileinstaller:profileinstaller:1.3.0-beta01. A versão 1.3.0-beta01 contém estas confirmações.

Mudanças na API

  • Remoção do suporte para o processamento de perfis compactados. A abertura e descompactação levam a uma regressão de 10s no uso da CPU durante a inicialização. Em vez disso, foi adicionado um diagnóstico para descobrir perfis de referência compactados incorretamente (I86413, b/261998144).

Versão 1.3.0-alpha03

11 de janeiro de 2023

Lançamento de androidx.profileinstaller:profileinstaller:1.3.0-alpha03. A versão 1.3.0-alpha03 contém estas confirmações.

Correções de bugs

  • Agora, é possível processar perfis de referência compactados ou descompactados (Ic61a0).
  • MacrobenchmarkScope.dropShaderCache() foi corrigido para não falhar mais ao corrigir o registro de transmissão no manifesto de profileinstaller (I5c728, b/258619948).

Versão 1.3.0-alpha02

9 de novembro de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.3.0-alpha02. A versão 1.3.0-alpha02 contém estas confirmações.

Mudanças na API

  • Um hook foi usado para fazer comparações a fim de eliminar o cache do sombreador e garantir uma performance consistente para inicialização a frio, especialmente ao compilar com perfis de iterações de aquecimento. Essa atualização é necessária para medir a inicialização a frio usando benchmark-macro-junit4:1.2.0-alpha05 ou versões mais recentes. Para ver as mudanças na API da biblioteca Benchmark, consulte a página Benchmark 1.2.0-alpha07 (Ia5171, b/231455742).

Versão 1.3.0-alpha01

24 de outubro de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.3.0-alpha01. A versão 1.3.0-alpha01 contém estas confirmações.

Mudanças na API

  • Foi adicionada a API ProfileVerifier para verificar no app se um perfil de referência foi compilado, programado ou está ausente (I263a4, b/246653809).
  • Foi adicionada uma nova transmissão do shell que permite que o Macrobenchmark apague totalmente os dados de perfil na memória para disco para que sejam incluídos na geração de perfil de referência. Isso é necessário para usar a biblioteca macrobenchmark para capturar perfis de valor de referência com BaselineProfileRule e avaliar a performance do perfil usando CompilationMode.Partial(warmupIterations) (Ie0a7d, b/250083467, b/253094958).

Versão 1.2.2

Versão 1.2.2

11 de janeiro de 2023

Lançamento de androidx.profileinstaller:profileinstaller:1.2.2. A versão 1.2.2 contém estas confirmações.

Correções de bugs

  • Agora, é possível processar perfis de referência compactados ou descompactados (Ic61a0).

Versão 1.2.1

Versão 1.2.1

7 de dezembro de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.2.1. A versão 1.2.1 contém estas confirmações.

Novos recursos

  • O profileinstaller foi ativado para S_V2 (API 32) e TIRAMISU (API 33) (b/254900303).

Versão 1.2.0

Versão 1.2.0

27 de julho de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.2.0. A versão 1.2.0 contém estas confirmações.

Mudanças importantes desde a 1.1.0

  • Foi adicionado suporte ao formato de perfil do ART usado no Android 12 e versões mais recentes.
  • Foram adicionadas novas APIs em ProfileInstallReceiver para ter resultados mais consistentes com Macrobenchmarks ao usar perfis de referência

Versão 1.2.0-rc01

15 de junho de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.2.0-rc01. A versão 1.2.0-rc01 contém estas confirmações.

  • Esta versão é idêntica à androidx.profileinstaller:profileinstaller:1.2.0-beta03.

Versão 1.2.0-beta03

1º de junho de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.2.0-beta03. A versão 1.2.0-beta03 contém estas confirmações.

Versão 1.2.0-beta02

18 de maio de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.2.0-beta02. A versão 1.2.0-beta02 contém estas confirmações.

  • Não é necessária nenhuma mudança para oferecer suporte para as versões do Compose 1.2.0-beta02.

Versão 1.2.0-beta01

11 de maio de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.2.0-beta01. A versão 1.2.0-beta01 contém estas confirmações.

Mudanças na API

  • Foram adicionadas novas APIs em ProfileInstallReceiver para ter resultados mais consistentes com Macrobenchmarks ao usar perfis de referência (If2ae5, b/215740637).

Correções de bugs

  • O Instalador de perfil gera uma mensagem útil ao tentar usar o formato de metadados V_001 no Android 12 e versões mais recentes (aosp/1978526, b/217502387).
  • O Instalador de perfil agora usa o androidx.startup versão 1.1.1 (aosp/2077099, b/229828376).

Versão 1.2.0-alpha02

26 de janeiro de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.2.0-alpha02. A versão 1.2.0-alpha02 contém estas confirmações.

Esta versão é idêntica à 1.2.0-alpha01.

Versão 1.2.0-alpha01

12 de janeiro de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.2.0-alpha01. A versão 1.2.0-alpha01 contém estas confirmações.

Novos recursos

  • Adição de suporte ao formato de perfil do ART usado no Android 12 e versões mais recentes.

Versão 1.1.0

Versão 1.1.0

9 de fevereiro de 2022

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0. A versão 1.1.0 contém estas confirmações.

Versão 1.1.0-rc01

15 de dezembro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-rc01 sem atualizações desde a versão 1.1.0-beta04. A versão 1.1.0-rc01 contém estas confirmações.

Versão 1.1.0-beta04

1º de dezembro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-beta04. A versão 1.1.0-beta04 contém estas confirmações.

Versão 1.1.0-beta03

17 de novembro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-beta03. A versão 1.1.0-beta03 contém estas confirmações.

Correções de bugs

  • Houve uma atualização para oferecer suporte ao Compose 1.1.0-beta03.

Versão 1.1.0-beta02

3 de novembro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-beta02. A versão 1.1.0-beta02 contém estas confirmações.

Correções de bugs

  • Atualização para oferecer suporte ao Compose 1.1.0-beta02.

Versão 1.1.0-beta01

27 de outubro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-beta01. A versão 1.1.0-beta01 contém estas confirmações.

  • Nenhuma mudança desde a versão 1.1.0-alpha07.

Versão 1.1.0-alpha07

13 de outubro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-alpha07. A versão 1.1.0-alpha07 contém estas confirmações.

Novos recursos

  • Novo suporte ao profm no Android N.

Versão 1.1.0-alpha06

29 de setembro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-alpha06. A versão 1.1.0-alpha06 contém estas confirmações.

Correções de bugs

  • Problemas de transcodificação do instalador do perfil em N, O e O_MR1 foram corrigidos (I12d75).

Versão 1.1.0-alpha05

15 de setembro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-alpha05. A versão 1.1.0-alpha05 contém estas confirmações.

Correções de bugs

  • A transcodificação de perfil do Android Nougat e do Android Oreo para apks multidex foi corrigida.

Versão 1.1.0-alpha04

1º de setembro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-alpha04. A versão 1.1.0-alpha04 contém estas confirmações.

Correções de bugs

  • O ProfileInstaller foi corrigido para facilitar a execução de MacroBenchmarks usando apps com perfis de valor de referência no CompilationMode.BaselineProfile (I42657, b/196074999).

Versão 1.1.0-alpha03

18 de agosto de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-alpha03. A versão 1.1.0-alpha03 contém estas confirmações.

Correções de bugs

  • Mudança no comportamento de ignorar do profileinstaller para registrar o PackageInfo.lastUpdatedTime em um arquivo no diretório de arquivos do app e compará-lo antes de instalar o perfil na próxima execução (Ib93d1).
  • Ajuste no formato do perfil em dispositivos P, Q e R para atender aos requisitos do ART (I84e89).

Versão 1.1.0-alpha02

4 de agosto de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-alpha02. A versão 1.1.0-alpha02 contém estas confirmações.

Atualização para oferecer compatibilidade com o Compose 1.1.0-alpha01.

Versão 1.1.0-alpha01

21 de julho de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.1.0-alpha01. A versão 1.1.0-alpha01 contém estas confirmações.

Correções de bugs

  • Correção de um bug que acionava o modo restrito em algumas circunstâncias.

Versão 1.0

Versão 1.0.4

13 de outubro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.0.4. A versão 1.0.4 contém estas confirmações:

  • Atualização para oferecer suporte ao Compose 1.0.4.

Versão 1.0.3

29 de setembro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.0.3. A versão 1.0.3 contém estas confirmações:

  • Atualização para oferecer suporte ao Compose 1.0.3.

Versão 1.0.2

1º de setembro de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.0.2. A versão 1.0.2 contém estas confirmações:

Correções de bugs

  • A transcodificação de perfil foi adicionada a dispositivos P, Q e R. Com a mudança, esses dispositivos transcodificam o perfil, garantindo que o perfil escrito possa sempre ser usado pelo ART. Anteriormente, a transcodificação era ignorada nessas plataformas, o que às vezes levava o ART a não conseguir processar o perfil de origem. Não houve mudanças nas APIs para desenvolvedores.

Versão 1.0.1

4 de agosto de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.0.1. A versão 1.0.1 contém estas confirmações.

Atualização para oferecer compatibilidade com o Compose 1.0.1.

Versão 1.0.0

28 de julho de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.0.0. A versão 1.0.0 contém estas confirmações.

Principais recursos da versão 1.0.0

O instalador de perfil é uma nova biblioteca que possibilita que bibliotecas e aplicativos definam “regras de perfil”, e empacotem informações do perfil do ART com um APK. A biblioteca instalará esses perfis após a inicialização do aplicativo. Isso pode ser usado para melhorar o desempenho do aplicativo.

Consulte as notas da versão detalhadas em 1.0.0-beta01 para ver mais informações sobre quais são essas regras de perfil e como elas funcionam.

Versão 1.0.0-rc02

14 de julho de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.0.0-rc02. A versão 1.0.0-rc02 contém estas confirmações:

Versão 1.0.0-rc01

1º de julho de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.0.0-rc01. A versão 1.0.0-rc01 contém estas confirmações.

Esta é uma versão RC sem mudanças do Beta.

Versão 1.0.0-beta01

16 de junho de 2021

Lançamento de androidx.profileinstaller:profileinstaller:1.0.0-beta01. A versão 1.0.0-beta01 contém estas confirmações.

Finalidade da biblioteca

O instalador de perfil é uma nova biblioteca que possibilita que bibliotecas e aplicativos definam “regras de perfil”, e empacotem informações do perfil do ART com um APK. A biblioteca instalará esses perfis após a inicialização do aplicativo. Isso pode ser usado para melhorar o desempenho do aplicativo.

A instalação do perfil é feita com a biblioteca androidx.startup. Se por algum motivo alguém quiser desativar a instalação do perfil, poderá modificar o manifesto para removê-lo:


       <provider
           android:name="androidx.startup.InitializationProvider"
           android:authorities="${applicationId}.androidx-startup"
           android:exported="false"
           tools:node="merge">
           <meta-data android:name="androidx.profileinstaller.ProfileInstallerInitializer"
                     tools:node="remove" />
       </provider>

Isso é especialmente útil se o app tiver requisitos de inicialização não triviais e você quiser acionar a instalação do perfil manualmente usando a API ProfileInstaller.writeProfile.

O que são as regras de perfil?

  • As regras de perfil para uma biblioteca são especificadas em um arquivo de texto baseline-prof.txt localizado no diretório src/main ou equivalente. O arquivo especifica uma regra por linha. Nesse caso, uma regra é um padrão para a correspondência de métodos ou classes na biblioteca. A sintaxe dessas regras é um superconjunto do formato de perfil do ART legível que é usado junto com adb shell profman --dump-classes-and-methods .... Essas regras podem ter uma das duas formas destinadas a métodos ou classes.

  • Uma regra de método tem o seguinte padrão:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • E uma regra de classe tem o seguinte padrão:

    <CLASS_DESCRIPTOR>
    
  • Aqui, <FLAGS> é um ou mais dos caracteres H, S e P, para indicar se esse método precisa ser sinalizado como "Hot" (frequente), "Startup" (de inicialização) ou "Post Startup" (pós-inicialização).

  • O <CLASS_DESCRIPTOR> é o descritor da classe à qual o método desejado pertence. Por exemplo, a classe androidx.compose.runtime.SlotTable teria o descritor Landroidx/compose/runtime/SlotTable;.

  • A <METHOD_SIGNATURE> é a assinatura do método e inclui o nome, os tipos de parâmetro e os tipos de retorno do método. Por exemplo, o método fun isPlaced(): Boolean em LayoutNode tem a assinatura isPlaced()Z.

  • Esses padrões podem ter caracteres curinga (**, * e ?) para que uma única regra inclua vários métodos ou classes.

O que as regras fazem?

  • Um método com a flag H indica que ele é um método "hot" (frequente) e precisa ser compilado com antecedência.

  • Um método com a flag S indica que ele é chamado na inicialização e precisa ser compilado com antecedência para evitar o custo da compilação e interpretação dele no momento da inicialização.

  • Um método com a flag P indica que ele é chamado após a inicialização.

  • A presença de uma classe nesse arquivo indica que ela é usada durante a inicialização e precisa ser pré-alocada no heap para evitar o custo do carregamento dela.

Como isso funciona?

  • As bibliotecas podem definir essas regras que serão empacotadas nos artefatos do AAR. Quando um APK é criado e inclui esses artefatos, essas regras são mescladas e usadas para criar um perfil do ART binário compacto que seja específico para o APK. Assim, o ART poderá aproveitar esse perfil quando o APK estiver instalado em dispositivos para compilar um subconjunto específico do aplicativo, com antecedência, para melhorar o desempenho dele, especialmente na primeira execução. Isso não terá efeito nos aplicativos depuráveis.

  • Os arquivos de regras precisam ser nomeados como baseline-prof.txt e colocados no diretório raiz do conjunto de origem principal. Ele precisa ser um arquivo irmão do arquivo AndroidManifset.xml.

  • Atualmente, esses arquivos só vão ser utilizados se você estiver usando o Plug-in do Android para Gradle 7.0 ou mais recente. Esse arquivo só é ativado com uma flag nas gradle.properties:

    # Enable adding baseline-prof.txt files to AAR artifacts, and binary profiles to APKs
    android.experimental.enableArtProfiles=true
    

Os perfis precisam de um equilíbrio

  • Perfis elaborados de maneira adequada que priorizam corretamente os métodos e as classes que vão estar no caminho de inicialização e que são essenciais para a performance vão produzir os melhores resultados. No entanto, incluir muitos métodos ou classes nos perfis pode resultar em um efeito negativo em termos de consumo de memória e uso de disco. Recomendamos começar com prudência, se você for definir suas próprias regras de perfil.