Usa R8 para reducir, optimizar y acelerar tu app
Te damos la bienvenida al primer día de la Spotlight Week de rendimiento de Android.
Comenzaremos con el cambio más impactante y de menor esfuerzo que puedes realizar para mejorar el rendimiento de tu app: habilitar el optimizador de R8 en modo completo.
Es probable que ya conozcas R8 como una herramienta para reducir el tamaño de tu app. Hace un trabajo fantástico quitando el código y los recursos no utilizados, lo que reduce el tamaño de tu app. Sin embargo, su verdadero poder, en el que realmente es g-R8, es como optimizador.
Cuando habilitas el modo completo y permites las optimizaciones, R8 realiza optimizaciones profundas en todo el programa y reescribe el código para que sea fundamentalmente más eficiente. No se trata de un ajuste menor.
Después de leer este artículo, consulta la introducción al optimizador de R8 en YouTube de la semana de Spotlight sobre el rendimiento.
Cómo R8 mejora el rendimiento de tu app
Analicemos los pasos más importantes que realiza el optimizador de R8 para mejorar el rendimiento de la app.
La eliminación de código muerto es el paso más importante para reducir el tamaño de la app. Durante esta fase, el optimizador de R8 quita el código no utilizado de las bibliotecas de las que depende tu app, así como el código muerto de tu propia base de código.
La incorporación de métodos reemplaza una llamada de método por el código real, lo que mejora el rendimiento del tiempo de ejecución.
Se aplican la fusión de clases y otras estrategias para que el código sea más compacto. Todas tus hermosas abstracciones, como las interfaces y las jerarquías de clases, no importan en este punto y es probable que se quiten.
La reducción de código se usa para cambiar los nombres de las clases, los campos y los métodos por otros más cortos y sin significado. Por lo tanto, en lugar de MyDataModel, podrías terminar con una clase llamada a. Esto es lo que causa la mayor confusión cuando se leen seguimientos de pila de una app optimizada con R8 (ten en cuenta que mejoramos esto en AGP 9.0).
La reducción de recursos disminuye aún más el tamaño de una app, ya que quita los recursos no utilizados, como los archivos en formato XML y los elementos de diseño.
Cuando se aplican estos pasos, el optimizador de R8 mejora los tiempos de inicio de la app, habilita una renderización de la IU más fluida, con menos fotogramas lentos y congelados, y mejora el uso general de los recursos en el dispositivo.
Caso de éxito: Mejoras de rendimiento de Reddit con R8
Como ejemplo de las mejoras de rendimiento que puede aportar R8, veamos un ejemplo de Reddit. Después de habilitar R8 en modo completo, la app de Reddit para Android experimentó mejoras significativas en el rendimiento en varias áreas.
Leyenda: Cómo R8 mejoró el rendimiento de la app de Reddit
El equipo observó un inicio en frío un 40% más rápido, una reducción del 30% en los errores de "La aplicación no responde" (ANR), una mejora del 25% en la renderización de fotogramas y una reducción del 14% en el tamaño de la app.
Estas mejoras son fundamentales para la satisfacción del usuario. Un inicio más rápido significa menos tiempo de espera y un acceso más rápido al contenido. Menos errores de ANR generan una app más estable y confiable, lo que reduce la frustración de los usuarios. La renderización de fotogramas más fluida elimina los tirones de la IU, lo que hace que el desplazamiento y las animaciones se sientan fluidos y responsivos. Este impacto técnico positivo también se vio reflejado claramente en la opinión de los usuarios.
Puedes obtener más información sobre sus mejoras en nuestro blog.
Efectos secundarios no técnicos del uso de R8
Durante nuestro trabajo con socios, observamos que estas mejoras técnicas tienen un impacto directo en la satisfacción de los usuarios y se pueden reflejar en la retención de usuarios, la participación y la duración de las sesiones. El interés de los usuarios, que se puede medir con los usuarios activos por día, semana o mes, también se vio afectado de forma positiva por las mejoras en el rendimiento técnico. Además, observamos que las calificaciones de las apps en Play Store aumentan en correlación con la adopción de R8. Compartir esta información con los propietarios de productos, los directores de tecnología y los responsables de la toma de decisiones puede ayudar a acelerar el rendimiento de tu app.
Así que llamémoslo por su nombre: la optimización deliberada del rendimiento es una virtud.
Guía para mejorar el rendimiento de tu app
Nos enteramos de que nuestra guía para desarrolladores sobre R8 necesitaba mejoras. Así que nos pusimos a trabajar. La guía para desarrolladores del optimizador de R8 ahora es mucho más práctica y proporciona orientación integral para habilitar y depurar R8.
La documentación te guía sobre la estrategia de alto nivel para la adopción, enfatizando la importancia de elegir bibliotecas compatibles con la optimización y, lo que es más importante, adoptar las funciones de R8 de forma incremental para garantizar la estabilidad. Este enfoque por fases te permite aprovechar los beneficios de R8 de forma segura y, al mismo tiempo, te brinda orientación sobre los problemas difíciles de depurar.
Ampliamos significativamente nuestra guía sobre las reglas de conservación, que son el mecanismo principal para controlar el optimizador de R8. Ahora proporcionamos una sección sobre qué son las reglas de conservación, cómo aplicarlas y cómo escribirlas y mantenerlas según las prácticas recomendadas. También proporcionamos casos de uso y ejemplos prácticos y viables para ayudarte a comprender cómo evitar correctamente que R8 quite el código que se necesita en el entorno de ejecución, como el código al que se accede a través de la reflexión o el uso de la interfaz nativa de JNI.
La documentación ahora también abarca los pasos de seguimiento esenciales y las situaciones avanzadas. Agregamos una sección sobre pruebas y solución de problemas para que puedas verificar las mejoras de rendimiento y depurar los posibles problemas que surjan. En la sección de configuraciones avanzadas, se explica cómo segmentar variantes de compilación específicas, personalizar qué recursos se conservan o quitan, y se ofrecen instrucciones de optimización especiales para los autores de bibliotecas, lo que garantiza que puedas proporcionar un paquete optimizado y compatible con R8 para que lo usen otros desarrolladores.
Aprovecha todo el potencial del optimizador de R8
El optimizador de R8 usa el "modo completo" de forma predeterminada desde la versión 8.0 del complemento de Android para Gradle. Si tu proyecto se desarrolló durante muchos años, es posible que aún incluya un parámetro de configuración heredado para inhabilitarlo. Busca esta línea en el archivo gradle.properties y quítala.
android.enableR8.fullMode=false // delete this line to enable R8's full potential
Ahora, verifica si habilitaste R8 en el archivo build.gradle.kts de tu app para la variante de lanzamiento. Se habilita configurando isMinifyEnabled y isShrinkResources como verdaderos. También puedes pasar archivos de configuración predeterminados y personalizados en este paso.
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro"
)
}Caso de éxito: Mejoras en el rendimiento de Disney+
Los ingenieros de Disney+ invierten en el rendimiento de la app y optimizan la experiencia del usuario. A veces, incluso los cambios que parecen pequeños pueden tener un gran impacto. Mientras inspeccionaba su configuración de R8, el equipo descubrió que se estaba usando la marca -dontoptimize. Se incorporó a través de un archivo de configuración predeterminado, que todavía se usa en muchas apps hoy en día.
Después de reemplazar proguard-android.txt por proguard-android-optimize.txt, el equipo de Disney+ observó mejoras significativas en el rendimiento de su app.
Después de que se lanzó a los usuarios una nueva versión de la app que contenía este cambio, Disney+ observó un inicio de la app un 30% más rápido y un 25% menos de errores de ANR percibidos por el usuario.
Hoy en día, muchas apps aún usan el archivo proguard-android.txt, que contiene la marca -dontoptimize. Y ahí es donde entran en juego nuestras mejoras en las herramientas.
Compatibilidad con herramientas
A partir de la actualización de funciones de Android Studio Narwhal 3, verás una advertencia de lint cuando uses proguard-android.txt
A partir de AGP 9.0, dejaremos de admitir el archivo por completo. Esto significa que tendrás que migrar a proguard-android-optimize.txt.
También invertimos en nuevas funciones de Android Studio para que depurar el código optimizado para R8 sea más fácil que nunca. A partir de AGP 9.0, ahora puedes desofuscar automáticamente los seguimientos de pila en el logcat de Android Studio para las compilaciones procesadas por R8, lo que te ayudará a identificar la línea exacta de código que causa un problema, incluso en una app completamente optimizada. Esto se abordará con más detalle en la entrada de blog de mañana sobre esta semana de Spotlight de rendimiento de Android.
Próximos pasos
Consulta la introducción al optimizador R8 de la Performance Spotlight Week en YouTube.
📣 ¡Acepta el desafío de rendimiento!
Es hora de que veas los beneficios por tu cuenta.
Te desafiamos a habilitar el modo completo de R8 para tu app hoy mismo.
- Sigue nuestras guías para desarrolladores y comienza: Habilita la optimización de apps.
- Comprueba si todavía usas
proguard-android.txty reemplázalo porproguard-android-optimize.txt. - Luego, mide el impacto. No solo sientas la diferencia, compruébala. Para medir las mejoras de rendimiento, adapta el código de nuestra app de ejemplo de Macrobenchmark en GitHub para medir los tiempos de inicio antes y después.
Estamos seguros de que verás una mejora significativa en el rendimiento de tu app. Usa #optimizationEnabled para cualquier pregunta sobre cómo habilitar o solucionar problemas de R8. Estamos aquí para ayudarte.
Prepara tus preguntas para la sesión de Ask Android del viernes.
Usa la etiqueta #AskAndroid en redes sociales para hacer preguntas sobre el rendimiento. Durante la semana, supervisaremos tus preguntas y responderemos varias en la sesión de Ask Android sobre el rendimiento el viernes 21 de noviembre. No te pierdas el video de mañana, en el que profundizaremos aún más en la depuración y la solución de problemas. Por ahora, comienza a usar R8 y pon tu app en la vía rápida.
-
Eventos y programasDesde las capacidades fundamentales del optimizador de R8 y las optimizaciones guiadas por perfiles hasta las mejoras de rendimiento con Jetpack Compose y una nueva guía para mejorar el rendimiento de tu app, cubrimos las herramientas de bajo esfuerzo y alto impacto que necesitas para compilar una app de alto rendimiento.
Ben Weiss, Sara Hamilton • Lectura de 3 min -
Eventos y programasEl ecosistema Android es una realidad multidispositivo que abarca teléfonos, plegables, tablets, wearables, pantallas para automóviles, RE y Googlebook. En este panorama, el desarrollo adaptable es fundamental para llegar a los usuarios dondequiera que estén.
Rebecca Gutteridge • Lectura de 3 min -
Eventos y programasEste año, en Android Dev Summit, compartimos cómo están evolucionando las herramientas para desarrolladores de Android para ayudarte a aumentar tu productividad junto con tus agentes.
Adarsh Fernando • Lectura de 10 min
Recibe la información más reciente sobre el desarrollo de Android en tu bandeja de entrada todas las semanas.