Os perfis de inicialização são um subconjunto dos perfis de referência. Os perfis de inicialização são usados pelo sistema de build para otimizar ainda mais as classes e os métodos que eles contêm, melhorando o layout do código nos arquivos DEX do APK. Com os perfis de inicialização, a inicialização do app é até 15% mais rápida do que com apenas os perfis de referência.
![](https://developer.android.google.cn/static/topic/performance/images/dex-layout-optimizations.png?authuser=8&hl=pt-br)
Requisitos
Recomendamos o uso de Perfis de inicialização com as seguintes ferramentas:
- Macrobenchmark do Jetpack 1.2.0 ou mais recente.
- Plug-in do Android para Gradle 8.2 ou mais recente
- Android Studio Iguana ou versão mais recente
Além disso, você precisa das seguintes configurações no seu app:
- R8 ativado. Para o build de lançamento, defina
isMinifyEnabled = true
. - Otimizações de layout DEX ativadas. No bloco
baselineProfile {}
do arquivo de build do módulo do app, definadexLayoutOptimization = true
.
Criar um perfil de startup
O Android Studio cria um perfil de inicialização junto a um perfil de referência quando você usa o modelo padrão do gerador de perfil de referência.
As etapas gerais para criar e gerar um perfil de inicialização são as mesmas para criar um perfil de referência.
A maneira padrão de criar um perfil de inicialização é usando o modelo de módulo do gerador de perfil
de referência no Android Studio. Isso inclui interações
de inicialização que formam um perfil básico. Para aumentar esse perfil de inicialização
com jornadas ideais do usuário (CUJs), adicione as CUJs de inicialização do seu app a um bloco rule
com includeInStartupProfile
definido como true
. Para apps simples, iniciar
o MainActivity
do app pode ser suficiente. Para apps mais complexos, considere
adicionar os pontos de entrada mais comuns, como iniciar o app pela
tela inicial ou usar um link direto.
O snippet de código abaixo mostra um gerador de perfis de referência (por padrão, o
arquivo BaselineProfileGenerator.kt
) que inclui iniciar o app na
tela inicial e usar um link direto. O link direto vai diretamente para o
feed de notícias do app, não para a tela inicial dele.
@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {
@get:Rule
val rule = BaselineProfileRule()
@Test
fun generate() {
rule.collect(
packageName = "com.example.app",
includeInStartupProfile = true
) {
// Launch directly into the NEWS_FEED.
startActivityAndWait(Intent().apply {
setPackage(packageName)
setAction("com.example.app.NEWS_FEED")
})
}
}
}
Execute a configuração Generate Baseline Profile for app e encontre as
regras do perfil de inicialização em
src/<variant>/generated/baselineProfiles/startup-prof.txt
.
Confirmar a otimização dos perfis de inicialização
Para confirmar a otimização do layout DEX, use o Android Studio para abrir o APK e
verificar as classes nos arquivos DEX. Confira se o classes.dex
principal não está
completamente preenchido. Caso seu app seja composto por um único arquivo DEX, você pode verificar
se ele contém dois arquivos DEX depois de ativar o perfil de inicialização.
O Android Studio avisará se as classes de inicialização não couberem em um único arquivo DEX.
Para receber informações de diagnóstico que incluam a quantidade de métodos que não são de inicialização nas
classes de inicialização, verifique se o compilador R8 está atualizado para, no mínimo, a versão
8.3.36-dev fazendo as seguintes mudanças no arquivo settings.gradle
ao
aplicar o perfil de inicialização:
Kotlin
pluginManagement { buildscript { repositories { mavenCentral() maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath("com.android.tools:r8:8.3.6-dev") } } }
Groovy
pluginManagement { buildscript { repositories { mavenCentral() maven { url uri('https://storage.googleapis.com/r8-releases/raw') } } dependencies { classpath 'com.android.tools:r8:8.3.6-dev" } } }
Adicione --info
depois de
assembleRelease
no comando abaixo ao criar com o Gradle.
./gradlew assembleRelease --info
O diagnóstico é impresso no terminal.
Se o app ou qualquer biblioteca referenciar uma API simplificada, as implementações de compatibilidade de pacote dessas classes sempre estarão contidas no último arquivo DEX. Esse último arquivo DEX simplificado não participa de otimizações de layout DEX.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Criar perfis de referência {:#creating-profile-rules}
- Perfis de referência {:#baseline-profiles}
- Como criar uma comparação da Microbenchmark