ProfileInstaller

  
Permite que as bibliotecas sejam preenchidas automaticamente antes de os 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
4 de setembro de 2024 1.3.1 1.4.0-rc01 - -

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-rc01

4 de setembro de 2024

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

Versão 1.4.0-beta01

21 de agosto de 2024

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

Versão 1.4.0-alpha02

7 de agosto de 2024

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

Novos recursos

  • Foi adicionado suporte à API 35 ao Instalador de perfil. (6f9f6fa).

Correções de bugs

  • Remoção da descrição manual do acesso às novas APIs da plataforma, já que isso acontece automaticamente pela modelagem de API ao usar o R8 com o AGP 7.3 ou mais recente (por exemplo, o R8 versão 3.3) e para todos os builds ao usar o AGP 8.1 ou mais recente (por exemplo, o D8 versão 8.1). Os clientes que não usam o AGP são aconselhados a atualizar para o D8 versão 8.1 ou mais recente. Veja mais detalhes neste artigo. (If6b4c, b/345472586).

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 soltar sombreadores no Android U (API 34) e em emuladores. (I031ca, b/274314544).
  • Suporte ativado para o Android U no instalador de perfil. (Iaf177).
  • Foi corrigida a falha do instalador de perfil no Android U porque o perfil atual não foi criado 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

  • Ativação da compatibilidade com o Android U no instalador de perfil (Iaf177).
  • Foi corrigida a falha do instalador de perfil no Android U porque o perfil atual não foi criado 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)
  • Adição de um código de diagnóstico para detectar perfis de valor de referência compactados. Os perfis de referência compactados não podem ser instalados pelo Profileinstaller em Macrobenchmarks ou na produção devido à sobrecarga da CPU. Evite isso ao criar o app atualizando para o Studio/AGP Electric Eel ou a versão bundletool 1.13.1(I86413, b/261998144).
  • Foram adicionados hooks para macrobenchmark para capturar perfis e soltar o cache de sombreador, que são necessários para gerar perfis de referência ou 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

androidx.profileinstaller:profileinstaller:1.1.0-alpha07 é lançado. 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.