Crea perfiles de inicio

Los perfiles de inicio son un subconjunto de los perfiles de Baseline. Se usan perfiles de inicio por el sistema de compilación para optimizar aún más las clases y los métodos que contienen mejorando el diseño del código en los archivos DEX de tu APK. Con los perfiles de inicio, el inicio de tu app suele ser entre un 15% y un 30% más rápido que con Baseline solo perfiles.

Figura 1: Mejora de la localidad del código a partir del diseño DEX optimización.

Requisitos

Recomendamos usar perfiles de inicio con las siguientes herramientas:

  • Jetpack Macrobenchmark 1.2.0 o una versión posterior
  • Complemento de Android para Gradle 8.2 o una versión posterior
  • Android Studio Iguana o versiones posteriores

Además, necesitas la siguiente configuración en la app:

  • R8. Para la compilación de lanzamiento, establece isMinifyEnabled = true
  • Se habilitaron las optimizaciones del diseño DEX. En el bloque baselineProfile {} de archivo de compilación del módulo de app, configurado dexLayoutOptimization = true.

Cómo crear un perfil de inicio

Android Studio crea un perfil de inicio junto con un perfil de Baseline cuando haces lo siguiente: usar la plantilla predeterminada del generador de perfiles de Baseline.

Los pasos generales para crear y generar un perfil de startup son los mismos que para crear un perfil de Baseline.

La forma predeterminada de crear un Perfil de startup es usar el Perfil de Baseline Plantilla de módulo generador desde Android Studio. Esto incluye las interacciones de inicio que forman un perfil de inicio básico. Para mejorar este perfil de startup con más recorridos críticos del usuario (CUJ), agrega los CUJ de inicio de tu app a un rule bloque con includeInStartupProfile establecido en true. En el caso de las apps simples, es posible que sea suficiente iniciar la MainActivity de la app. En el caso de apps más complejas, agregar los puntos de entrada más comunes a la aplicación, como iniciarla desde la pantalla principal o iniciarlos en un vínculo directo.

En el siguiente fragmento de código, se muestra un generador de perfiles de Baseline (de forma predeterminada, el BaselineProfileGenerator.kt) que incluye iniciar la app desde el la pantalla de inicio y crear un vínculo directo. El vínculo directo va directamente al feed de noticias de la app, no a la pantalla principal.

@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")
            })
        }
    }
}

Ejecuta la configuración Generate Baseline Profile for app y busca la Reglas del perfil de inicio en src/<variant>/generated/baselineProfiles/startup-prof.txt

Confirma la optimización de los perfiles de inicio

Para confirmar la optimización del diseño DEX, usa Android Studio para abrir el APK y verificar las clases en los archivos DEX. Asegúrate de que el classes.dex principal no esté esté completamente rellenado. Si tu app consta de un solo archivo DEX, puedes verificarlo Indica si la app contiene dos archivos DEX después de habilitar el perfil de inicio.

Android Studio te advierte si las clases de inicio no caben en un solo archivo DEX. Para obtener información de diagnóstico que incluya la cantidad de métodos que no fueron de inicio en las clases de inicio, asegúrate de que el compilador R8 esté actualizado al menos a la versión 8.3.36-dev realizando los siguientes cambios en el archivo settings.gradle cuando aplicas el Perfil de inicio:

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"
        }
    }
}

Asegúrate de agregar --info después de assembleRelease en el siguiente comando cuando compiles con Gradle.

./gradlew assembleRelease --info

Luego, el diagnóstico se imprime en la terminal.

Si tu app o cualquier biblioteca hacen referencia a alguna API con expansión de sintaxis, implementaciones de compatibilidad de estas clases archivo DEX. Este último archivo DEX con expansión de sintaxis no participa en el diseño DEX optimizaciones.

Consideraciones para crear perfiles de inicio

El resultado de las clases y los métodos de un perfil de inicio está limitado por el tamaño el primer archivo classes.dex. Esto significa que no todos los recorridos del perfil de Baseline también deben ser recorridos del perfil de inicio.

Para decidir qué recorridos del usuario cubrir cuando creas un perfil de startup, considera lo siguiente: en la que la mayoría de los usuarios inician la aplicación. Por lo general, se origina en el selector después de acceder a la cuenta. Este también es el perfil de Baseline más básico del proyecto.

Después de cubrir el primer caso de uso, sigue el embudo de usuarios para el inicio de la app. En muchos casos, los embudos de inicio de la app siguen esta lista:

  1. Actividad del selector principal
  2. Notificaciones que activan el inicio de la app
  3. Actividades de selector opcionales

Trabaja en esta lista desde la parte superior y detente antes de que classes.dex esté completo. Para cubrir más recorridos después, quitar el código de la ruta de inicio y agregar más del mundo de los datos. Para quitar el código de la ruta de inicio, inspecciona los registros de Perfetto durante el inicio de la app y buscar operaciones de larga duración. También puedes usar una macrocomparativa con el seguimiento de métodos habilitado para obtener una vista automatizable y completa de las llamadas a los métodos durante el inicio de la app.