Os perfis de inicialização são um subconjunto de perfis de referência. Os perfis de inicialização são usados pelo o sistema de build para otimizar ainda mais as classes e os métodos que eles contêm, melhorar o layout do código nos arquivos DEX do seu APK. Com os perfis de inicialização, a inicialização do app é até 15% mais rápida do que só com os perfis de referência.
![](https://developer.android.google.cn/static/topic/performance/images/dex-layout-optimizations.png?authuser=19&hl=pt)
Requisitos
Recomendamos o uso de perfis de inicialização com as seguintes ferramentas:
- Jetpack Macrobenchmark 1.2.0 ou mais recente
- Plug-in do Android para Gradle 8.2 ou mais recente
- Android Studio Iguana ou 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 objeto arquivo de build do módulo do app, definadexLayoutOptimization = true
.
Criar um perfil de inicialização
O Android Studio cria um perfil de inicialização junto de um perfil de referência quando você usar 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 é usar o perfil de referência
Modelo de módulo do gerador do Android Studio. Isso inclui inicialização
interações que formam um perfil básico de inicialização. Para ampliar este perfil de inicialização
com mais jornadas ideais do usuário (CUJs), adicione as CUJs de inicialização do app a uma rule
bloco com includeInStartupProfile
definido como true
. Para apps simples, lançar
o MainActivity
do app pode ser suficiente. Para apps mais complexos,
adicionando os pontos de entrada mais comuns, como iniciar o aplicativo pela
tela inicial ou iniciar em um link direto.
O snippet de código a seguir mostra um gerador de perfis de referência (por padrão, o
BaselineProfileGenerator.kt
) que inclui iniciar o app no
tela inicial e abrir um link direto. O link direto leva diretamente ao
no feed de notícias do app, não na 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 Generate Baseline Profile for app configuration e encontre a
As regras do perfil de inicialização em
src/<variant>/generated/baselineProfiles/startup-prof.txt
.
Confirmar otimização de 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. Verifique se o classes.dex
principal não é
completamente preenchidos. Se o aplicativo consiste em um único arquivo DEX, você pode verificar
se o app contém dois arquivos DEX após ativar o perfil de inicialização.
O Android Studio avisa se as classes de inicialização não couberem em um único arquivo DEX.
Para receber informações de diagnóstico que incluem a quantidade de métodos que não são de inicialização em
as classes de inicialização, confira se o compilador R8 está atualizado com pelo menos 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 alguma API de simplificação, o pacote as implementações de compatibilidade dessas classes estão sempre contidas na arquivo DEX. Este último arquivo DEX de simplificação não participa do layout DEX e otimizações.
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