ProfileInstaller
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
21 de agosto de 2024 | 1.3.1 | - | 1.4.0-beta01 | - |
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.
Consulte a documentação do Issue Tracker para saber mais.
Versão 1.4
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 descartar 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
emProfileInstallReceiver
(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 usandoCompilationMode.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 a 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 usandoCompilationMode.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 comMacrobenchmarks
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 comMacrobenchmarks
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ão1.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 noCompilationMode.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óriosrc/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 comadb 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 caracteresH
,S
eP
, 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 classeandroidx.compose.runtime.SlotTable
teria o descritorLandroidx/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étodofun isPlaced(): Boolean
emLayoutNode
tem a assinaturaisPlaced()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 arquivoAndroidManifset.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.