Los Perfiles de Baseline mejoran la velocidad de ejecución del código en aproximadamente un 30% desde el primer lanzamiento, ya que evitan la interpretación y los pasos de compilación just-in-time (JIT) para las instrucciones de código incluidas.
Cuando se envía un perfil de Baseline a una app o biblioteca, Android Runtime (ART) puede optimizar las instrucciones de código especificadas a través de la compilación anticipada (AOT), lo que brinda mejoras de rendimiento para cada usuario nuevo y con cada actualización de la app. Esta optimización guiada por perfil (PGO) permite que las apps optimicen el inicio, reduzcan los bloqueos de interacción y mejoren el rendimiento general del entorno de ejecución para los usuarios finales desde el primer lanzamiento.
Estas mejoras en el rendimiento dan como resultado métricas mejoradas de la empresa, como retención de usuarios, transacciones y calificaciones. Puedes leer más sobre el efecto del rendimiento en las métricas empresariales en historias de Josh, Lyft, TikTok y Zomato.
Beneficios de los Perfiles de Baseline
Los Perfiles de Baseline permiten que todas las interacciones del usuario (como el inicio de la app, la navegación entre pantallas o el desplazamiento por el contenido) sean más fluidas desde la primera vez que se ejecutan. Cuando se aumenta la velocidad y la capacidad de respuesta de una app, los Perfiles de Baseline pueden generar más usuarios activos por día y un promedio más alto de la tasa de visitas recurrentes.
Los Perfiles de Baseline ayudan a guiar la optimización más allá del inicio de la app, ya que proporcionan interacciones comunes del usuario que mejoran el tiempo de ejecución de la app desde el primer lanzamiento. La compilación anticipada guiada no depende de los dispositivos de los usuarios y se puede realizar una vez por versión en una máquina de desarrollo en lugar de un dispositivo móvil. Cuando se envían versiones con un perfil de Baseline, las optimizaciones de las apps están disponibles mucho más rápido que si solo se basaran en los perfiles de Cloud.
Cuando no se usa un perfil de Baseline, todo el código de la app se compila de forma JIT en la memoria después de que se interpreta o se escribe en un archivo odex
en segundo plano cuando el dispositivo está inactivo. Después de instalar o actualizar una app, los usuarios tienen una experiencia poco óptima desde la primera vez que la ejecutan hasta que se optimizan las nuevas instrucciones de código.
Muchas apps miden un aumento del rendimiento de alrededor del 30% después de la optimización.
Perfiles de inicio
Los perfiles de inicio son similares a los perfiles de Baseline, pero la diferencia se encuentra en que se usan en el tiempo de compilación y no para la optimización en el dispositivo. Un perfil de inicio se usa para optimizar el diseño del archivo DEX con el objetivo de mejorar los tiempos de inicio.
El código identificado en el perfil de inicio se coloca en el archivo classes.dex
principal y el resto del código se coloca en archivos DEX separados. Esto mejora los tiempos de inicio porque se reduce la cantidad de fallas de la página durante el inicio de la app. Para obtener más información sobre el modo en que los perfiles de inicio y las optimizaciones del diseño DEX pueden mejorar los tiempos de inicio de la app, consulta Optimizaciones del diseño DEX y perfiles de inicio.
Primeros pasos
Para comenzar a optimizar el rendimiento en una app existente, consulta Cómo crear Perfiles de Baseline.
Versiones estables mínimas recomendadas
La cadena de dependencias proporciona actualizaciones de versiones estables y en desarrollo. Para generar e instalar un Perfil de Baseline, usa las siguientes versiones compatibles o las posteriores del complemento de Android para Gradle, la biblioteca de Macrobenchmark y el instalador de perfiles. Se necesitan estas dependencias en diferentes momentos y funcionan en conjunto como una cadena de herramientas con el objetivo de habilitar un Perfil de Baseline óptimo.
- Complemento de Android para Gradle:
com.android.tools.build:8.0.0
- Biblioteca de Macrobenchmark:
androidx.benchmark:benchmark-macro-junit4:1.3.3
- Instalador de perfiles:
androidx.profileinstaller:profileinstaller:1.4.1
Recomendamos usar la versión más reciente de AGP para crear y administrar perfiles de Baseline. Estas son las funciones principales que se incluyen con las diferentes versiones de AGP:
Versión de AGP | Funciones |
---|---|
8.4 | Instalaciones de apps locales de compilaciones no depurables con la herramienta de línea de comandos del wrapper de Gradle o los perfiles de Baseline de instalación de Android Studio, de modo que el rendimiento de la compilación de lanzamiento local coincida más con la producción. Esta actualización no afecta el rendimiento de producción de los perfiles de Baseline. |
8.3 |
|
8.2 |
|
8.0 | Versión mínima recomendada: Usa el complemento de Gradle para el Perfil de Baseline para generar Perfiles de Baseline con una sola tarea de Gradle.
|
7.4 |
Versión mínima admitida: Las apps pueden consumir perfiles de Baseline a partir de las bibliotecas y proporcionar su propio perfil de Baseline en el archivo src/main/baseline-prof.txt .
|
Ejemplo de generación de perfiles
A continuación, se muestra una clase de ejemplo para crear un Perfil de Baseline para el inicio de la app, además de varios eventos de navegación y desplazamiento con la biblioteca recomendada de Macrobenchmark.
@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
// App startup journey.
startActivityAndWait()
device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
device.findObject(By.res("myLazyColumn")).also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
device.pressBack()
}
}
}
Puedes ver este código en contexto completo y más detalles como parte de nuestras muestras de rendimiento en GitHub.
Información que debes incluir
Cuando usas perfiles de Baseline en una app, puedes incluir el código de inicio de la app y las interacciones comunes del usuario, como la navegación entre pantallas o el desplazamiento. También puedes recopilar flujos completos, como el registro, el acceso o el pago. Los recorridos del usuario que consideres esenciales pueden beneficiarse de los perfiles de Baseline gracias a que se mejora el rendimiento del entorno de ejecución.
Si experimentas con diferentes enfoques para mejorar el rendimiento, considera incluir Perfiles de Baseline para ambos grupos de tu experimento. De esta manera, te aseguras de que todos los usuarios ejecuten código compilado de manera coherente, lo que facilita la interpretación de los resultados.
Las bibliotecas pueden proporcionar sus propios perfiles de Baseline y enviarlos con los lanzamientos para mejorar el rendimiento de la app. Por ejemplo, consulta la sección Cómo usar una sección de perfil de Baseline en el rendimiento de Jetpack Compose.
Cómo funcionan los Perfiles de Baseline
Mientras desarrollas tu app o biblioteca, procura definir perfiles de Baseline para abarcar interacciones comunes de los usuarios en las que el tiempo de renderización o la latencia resultan importantes. A continuación, se indica cómo funcionan:
Se generan las reglas de perfil legibles por humanos para tu app y se compilan en formato binario en ella. Puedes encontrarlas en
assets/dexopt/baseline.prof
. Luego, podrás subir el AAB a Google Play como de costumbre.Google Play procesa el perfil y lo envía directamente a los usuarios junto con el APK. Durante la instalación, ART realiza una compilación anticipada (AOT) de los métodos en el perfil, lo que hace que esos métodos se ejecuten más rápido. Si el perfil contiene métodos usados en el inicio de la app o durante la renderización de fotogramas, el usuario podría experimentar tiempos de inicio más rápidos y menos bloqueos.
Este flujo coopera con la agregación de los perfiles de Cloud para mejorar el rendimiento en función del uso real de la app a lo largo del tiempo.
Perfiles de Cloud
Los perfiles de Cloud ofrecen una forma adicional de optimización guiada por perfil (PGO), agregada por Google Play Store y distribuida para la compilación en el momento de la instalación, junto con los Perfiles de Baseline.
Si bien las interacciones reales del usuario con la app controlan los perfiles de Cloud, estas tardan varias horas o días después de una actualización en distribuirse, lo que limita su disponibilidad. Hasta que los perfiles estén completamente distribuidos, el rendimiento de la app será poco óptimo para los usuarios de apps nuevas o actualizadas. Además, los perfiles de Cloud solo admiten dispositivos Android que ejecutan Android 9 (nivel de API 28) o versiones posteriores, y solo hacen un escalamiento correcto para apps que tienen una base de usuarios lo suficientemente grande.
Comportamiento de la compilación en las versiones de Android
Las versiones de la plataforma de Android usan diferentes enfoques de compilación de apps, cada uno con una compensación de rendimiento correspondiente. Los Perfiles de Baseline mejoran los métodos de compilación anteriores, ya que proporcionan un perfil para todas las instalaciones.
Versión de Android | Método de compilación | Enfoque de optimización |
---|---|---|
De 5 a 6 (nivel de API 21 a 23) | AOT completa | Toda la app se optimiza durante la instalación, lo que acorta los tiempos de espera para usarla, aumenta el uso de espacio en el disco y la memoria RAM, y aumenta los tiempos de carga de código desde el disco, lo que puede aumentar el tiempo de inicio en frío. |
De 7 a 8.1 (nivel de API 24 a 27) | AOT parcial (perfil de Baseline) | androidx.profileinstaller instala los Perfiles de Baseline en la primera ejecución, cuando el módulo de la app define esta dependencia. ART puede mejorar aún más esta función agregando más reglas de perfil durante el uso de la app y compilándolas cuando el dispositivo esté inactivo. Esto optimiza el espacio en el disco y el tiempo de carga de código desde el disco, lo que reduce el tiempo de espera para la app. |
9 (nivel de API 28) y versiones posteriores | AOT parcial (perfil de Baseline + Cloud) | Play usa los Perfiles de Baseline durante las instalaciones de apps para optimizar los APKs y los perfiles de Cloud (si están disponibles). Después de la instalación, los perfiles de ART se suben a Play, se agregan y, luego, se proporcionan como perfiles de Cloud a otros usuarios cuando instalan o actualizan la app. |
Problemas conocidos
A continuación, se muestran posibles problemas y soluciones, o problemas para los que aún se están desarrollando soluciones alternativas:
Es posible que la generación de perfiles de Baseline falle debido a la configuración de permisos en algunos dispositivos, incluidos los OnePlus. Para solucionar este problema, desactiva la opción Inhabilitar la supervisión de permisos en la configuración de Opciones para desarrolladores.
La generación de perfiles de Baseline no es compatible con los dispositivos de Firebase Test Lab, incluidos los dispositivos de Test Lab administrados por Gradle (problema #285187547).
Para proporcionar correctamente perfiles de Baseline a bibliotecas, usa el complemento de Gradle para perfiles de Baseline 1.2.3 o AGP 8.3 como mínimo (problema #313992099).
Si generas perfiles de Baseline con el comando
./gradlew app:generateBaselineProfile
, también se ejecutan las comparativas en el módulo de prueba y se descartan los resultados. Si esto sucede, puedes generar únicamente los perfiles de Baseline ejecutando el comando con-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
. Este problema se corrigió en AGP 8.2.El comando para generar perfiles de Baseline para todos los tipos de compilación (
./gradlew app:generateBaselineProfile
) solo genera perfiles de Baseline para el tipo de compilación de lanzamiento. Se solucionó este problema en AGP 8.1.Es posible que los canales de distribución de apps que no sean de Google Play Store no admitan el uso de Perfiles de Baseline en la instalación. Los usuarios de apps instaladas a través de estos canales no verán los beneficios hasta que se ejecute el dexopt en segundo plano (que sucede probablemente por la noche).
El uso compartido interno de apps de Play Store no admite los perfiles de Baseline. Sin embargo, el segmento de pruebas internas sí lo hace.
Las optimizaciones de la batería en algunos dispositivos, como los de Huawei, pueden interferir en la instalación del perfil. Para asegurarte de que tus perfiles se instalen de manera efectiva, inhabilita las optimizaciones de la batería en tus dispositivos de comparativas.
Recursos adicionales
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Cómo crear perfiles de Baseline {:#creating-profile-rules}
- Cómo crear y medir perfiles de Baseline sin macrocomparativas
- Optimizaciones del diseño DEX y perfiles de inicio