Los perfiles de inicio son un subconjunto de los perfiles de Baseline. El sistema de compilación usa los perfiles de inicio para optimizar aún más las clases y los métodos que contienen mediante la mejora del diseño del código en los archivos DEX de tu APK. Con los perfiles de inicio, el inicio de tu app es hasta un 15% más rápido que con los perfiles de Baseline solo.
![](https://developer.android.com/static/topic/performance/images/dex-layout-optimizations.png?authuser=5&hl=es)
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 tu app:
- R8 habilitado Para tu compilación de lanzamiento, establece
isMinifyEnabled = true
. - Se habilitaron las optimizaciones del diseño DEX. En el bloque
baselineProfile {}
del archivo de compilación del módulo de la app, configuradexLayoutOptimization = true
.
Crea un perfil de inicio
Android Studio crea un perfil de inicio junto con un perfil de Baseline cuando usas la plantilla predeterminada del generador de perfiles de Baseline.
Los pasos generales para crear y generar un perfil de inicio son los mismos que para crear un perfil de Baseline.
La forma predeterminada de crear un perfil de inicio es usar la plantilla del módulo generador de perfiles de Baseline desde Android Studio. Esto incluye las interacciones de inicio que forman un perfil de inicio básico. Para aumentar este perfil de inicio con más recorridos críticos del usuario (CUJ), agrega los CUJ de inicio de tu app a un bloque rule
con includeInStartupProfile
establecido en true
. Para apps simples, iniciar la MainActivity
de la app puede ser suficiente. En el caso de apps más complejas, considera agregar los puntos de entrada más comunes, como iniciarla desde la pantalla principal o acceder a un vínculo directo.
En el siguiente fragmento de código, se muestra un generador de perfiles de Baseline (de forma predeterminada, el archivo BaselineProfileGenerator.kt
) que incluye iniciar tu app desde la pantalla principal y luego iniciarla en 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 de Generate Baseline Profile for app y busca las 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 campo classes.dex
principal no esté completamente rellenado. Si tu app consta de un solo archivo DEX, puedes verificar si 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 son de inicio en las clases de inicio, asegúrate de que el compilador R8 esté actualizado a la versión 8.3.36-dev como mínimo; para ello, realiza los siguientes cambios en el archivo settings.gradle
cuando apliques 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
El diagnóstico se imprime en la terminal.
Si tu app o alguna biblioteca hacen referencia a APIs con expansión de sintaxis, las implementaciones de compatibilidad integradas de estas clases siempre se encuentran en el último archivo DEX. Este último archivo DEX con expansión de sintaxis no participa en las optimizaciones de diseño DEX.
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Cómo crear perfiles de Baseline {:#creating-profile-rules}
- Perfiles de Baseline {:#baseline-profiles}
- Cómo escribir una microcomparativa