Criar perfis de inicialização

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 contêm melhorando o layout do código nos arquivos DEX do APK. Com os perfis de inicialização, a inicialização do app geralmente é entre 15% e 30% mais rápida do que com os perfis de referência sozinhos.

Figura 1. Melhoria da localidade de código com a otimização do layout DEX.

Requisitos

Recomendamos usar os 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 versão mais recente

Além disso, você precisa das seguintes configurações no 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, defina dexLayoutOptimization = true.

Criar um perfil de inicialização

O Android Studio cria um perfil de inicialização junto com 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 é usar 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 de inicialização básico. Para aumentar esse perfil de inicialização com mais jornadas ideais do usuário (CUJs), adicione as CUJs de inicialização do app a um bloco rule com includeInStartupProfile definido como true. Para apps simples, iniciar a MainActivity do app pode ser suficiente. Para apps mais complexos, considere adicionar os pontos de entrada mais comuns, como iniciar o app na tela inicial ou abrir um link direto.

O snippet de código a seguir mostra um gerador de perfis de referência (por padrão, o arquivo BaselineProfileGenerator.kt) que inclui iniciar o app na tela inicial e abrir um link direto. O link direto vai direto para o feed de notícias do app, não para a tela inicial.

@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 Gerar perfil de referência para app e encontre as regras do perfil de inicialização em src/<variant>/generated/baselineProfiles/startup-prof.txt.

Considerações para criar perfis de startups

Para decidir quais jornadas do usuário cobrir ao criar um perfil de inicialização, considere onde a maioria dos usuários começa o aplicativo. Normalmente, isso acontece na tela de início e depois que o usuário faz login. Essa também é a jornada de perfil de linha de base mais básica.

Depois que o primeiro caso de uso for abordado, siga o funil do usuário para inicialização do app. Em muitos casos, os funis de inicialização de apps seguem esta lista:

  1. Atividade principal da tela de início
  2. Notificações que acionam a inicialização do app
  3. Atividades opcionais da tela de início

Trabalhe nessa lista de cima para baixo e pare antes que classes.dex fique cheio. Para abranger mais jornadas depois, mova o código para fora do caminho de inicialização e adicione mais jornadas. Para mover o código para fora do caminho de inicialização, inspecione os rastreamentos do Perfetto durante a inicialização do app e procure operações de longa duração. Você também pode usar uma macrobenchmark com o rastreamento de métodos ativado para uma visão automatizada e completa das chamadas de método durante a inicialização do app.