ProfileInstaller

  
Possibilita que as bibliotecas sejam preenchidas automaticamente com antecedência com traces de compilação para serem lidos pelo ART.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
17 de novembro de 2021 1.0.4 - 1.1.0-beta03 -

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 no arquivo build.gradle para seu app ou módulo:

Groovy

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.1.0-beta04"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.1.0-beta04")
}

Para ver 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 existente clicando no botão de estrela.

Criar novo problema

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

Versão 1.1.0

Versão 1.1.0-beta03

17 de novembro de 2021

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

androidx.profileinstaller:profileinstaller:1.0.4 é lançado. 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 transcodificarão 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.1.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, quiser desativar a instalação do perfil, será possível 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, em que uma regra, nesse caso, é 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 é utilizada ao usar 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 terá o seguinte padrão:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • E uma regra de classe terá 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 um descritor de 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 sinalização H indica que ele é um método "hot" (frequente) e precisa ser compilado com antecedência.

  • Um método com a sinalização 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 sinalização P indica que ele é chamado após a inicialização.

  • Uma classe presente 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ó serão utilizados se você estiver usando o Plug-in do Android para Gradle 7.0+ e versões mais recentes. No momento, esse arquivo só é ativado com uma sinalização 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 classes que estarão no caminho de inicialização e que são essenciais para o desempenho, produzirão 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. Portanto, recomendamos começar de maneira conservadora se você for definir suas próprias regras de perfil.