Usa R8 para reducir, optimizar y acelerar tu app
Te damos la bienvenida al primer día de la Semana de Destacados del Rendimiento de Android.
Comenzaremos con el cambio más impactante y que requiere menos esfuerzo que puedes realizar para mejorar el rendimiento de tu app: habilitar el optimizador 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 para quitar el código y los recursos que no se usan, lo que reduce el tamaño de tu app. Sin embargo, su verdadero poder, en el que realmente g-R8, es como optimizador.
Cuando habilitas el modo completo y permites las optimizaciones, R8 realiza optimizaciones profundas de todo el programa y vuelve a escribir tu código para que sea fundamentalmente más eficiente. No se trata solo de un ajuste menor.
Después de leer este artículo, consulta la introducción de la Semana de Destacados del Rendimiento al optimizador R8 en YouTube.
Cómo R8 mejora el rendimiento de tu app
Destaquemos los pasos más importantes que realiza el optimizador R8 para mejorar el rendimiento de la app.
La eliminación de código no utilizado es el paso más importante para reducir el tamaño de la app. Durante esta fase, el optimizador R8 quita el código que no se usa de las bibliotecas de las que depende tu app, así como el código muerto de tu propia base de código.
Method inlining reemplaza una llamada de método con el código real, lo que mejora el rendimiento del tiempo de ejecución.
Se aplican Class merging 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.
Se usa la minificación de código para cambiar los nombres de las clases, los campos y los métodos por nombres más cortos y sin sentido. Por lo tanto, en lugar de MyDataModel, es posible que termines con una clase llamada a. Esto es lo que causa la mayor confusión cuando se leen los seguimientos de pila de una app optimizada para R8. (Ten en cuenta que hemos mejorado esto en AGP 9.0).
La reducción de recursos reduce aún más el tamaño de una app quitando los recursos que no se usan, como los archivos XML y los elementos de diseño.
Al aplicar estos pasos, el optimizador R8 mejora los tiempos de inicio de la app, permite una renderización de la IU más fluida, con menos fotogramas lentos y congelados, y mejora el uso general de recursos integrados 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.
Título: 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 "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 cruciales para la satisfacción del usuario. Un inicio más rápido significa menos espera y un acceso más rápido al contenido. Menos ANR generan una app más estable y confiable, lo que reduce la frustración del usuario. La renderización de fotogramas más fluida elimina el bloqueo de la IU, lo que hace que el desplazamiento y las animaciones se sientan fluidos y responsivos. Este impacto técnico positivo también fue claramente visible en el sentimiento del usuario.
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 del usuario y pueden reflejarse en la retención de usuarios, la interacción y la duración de la sesión. El interés de los usuarios, que se puede medir con usuarios activos diarios, semanales o usuarios activos por mes, también se vio afectado positivamente 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 esto con los propietarios de productos, los CTO 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.
Te guiamos hacia una app con mejor rendimiento
Escuchamos que se debía mejorar nuestra guía para desarrolladores de R8. Así que nos pusimos a trabajar. La guía para desarrolladores del optimizador R8 ahora es mucho más práctica y proporciona una guía completa para habilitar y depurar R8.
La documentación te guía sobre la estrategia de adopción de alto nivel, enfatiza la importancia de elegir bibliotecas compatibles con la optimización y, lo que es fundamental, adoptar las funciones de R8 de forma incremental para garantizar la estabilidad. Este enfoque por fases te permite desbloquear de forma segura los beneficios de R8 y, al mismo tiempo, te brinda orientación sobre problemas difíciles de depurar.
Ampliamos significativamente nuestra guía sobre las reglas Keep, que son el mecanismo principal para controlar el optimizador R8. Ahora proporcionamos una sección sobre qué son las reglas Keep, cómo aplicarlas y te guiamos con prácticas recomendadas para escribirlas y mantenerlas. También proporcionamos casos de uso y ejemplos prácticos y útiles, que te ayudan a comprender cómo evitar correctamente que R8 quite el código que se necesita en el tiempo 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 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 ganancias de rendimiento y depurar cualquier problema potencial que surja. 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.
Habilita todo el potencial del optimizador R8
El optimizador R8 usa de forma predeterminada el "modo completo" 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 una marca heredada para inhabilitarlo. Verifica tu archivo gradle.properties para esta línea 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 verdaderas. 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 de rendimiento de Disney+
Los ingenieros de Disney+ invierten en el rendimiento de la app y optimizan la experiencia del usuario de la app. A veces, incluso los cambios aparentemente pequeños pueden tener un gran impacto. Mientras inspeccionaba su configuración de R8, el equipo descubrió que se usaba la marca -dontoptimize. Se incluyó en un archivo de configuración predeterminado, que todavía se usa en muchas apps en la actualidad.
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 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 de 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
Y a partir de AGP 9.0, dejaremos de admitir el archivo por completo. Esto significa que deberás migrar a proguard-android-optimize.txt.
También invertimos en nuevas funciones de Android Studio para que la depuración del 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 dentro de Logcat de Android Studio para compilaciones procesadas por R8, lo que te ayuda a identificar la línea de código exacta 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 Destacados del Rendimiento de Android.
Próximos pasos
Consulta la introducción de la Semana de Destacados del Rendimiento al optimizador R8 en YouTube.
📣 Acepta el desafío de rendimiento
Es hora de que veas los beneficios por ti mismo.
Te desafiamos a habilitar el modo completo de R8 para tu app hoy.
- Sigue nuestras guías para desarrolladores para comenzar: Habilita la optimización de la app.
-
Verifica si aún usas
proguard-android.txty reemplázalo porproguard-android-optimize.txt. - Luego, mide el impacto. No solo sientas la diferencia, verifícala. Mide tus ganancias de rendimiento adaptando el código de nuestra app de ejemplo de Macrobenchmark en GitHub para medir tus 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.
Envía tus preguntas para la sesión de Ask Android del viernes
Usa la etiqueta social #AskAndroid para enviar cualquier pregunta sobre el rendimiento. Durante toda la semana, supervisaremos tus preguntas y responderemos varias en la sesión de Ask Android sobre el rendimiento el viernes 21 de noviembre. Mantente atento para mañana, donde analizaremos con más detalle la depuración y la solución de problemas. Por ahora, comienza con R8 y acelera tu app.
Seguir leyendo
-
Eventos y programas
Desde las capacidades fundamentales del optimizador 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, abordamos las herramientas de bajo esfuerzo y alto impacto que necesitas para compilar una app con buen rendimiento.
Ben Weiss, Sara Hamilton • Lectura de 3 min
-
Eventos y programas
Ya está aquí el cronograma de Google I/O.
Lectura de 1 min
-
Eventos y programas
En septiembre pasado, compartimos nuestra visión para el futuro de Google Play Juegos basada en una creencia fundamental: la mejor manera de impulsar el éxito de tu juego es ofrecer una experiencia de jugador de primera clase.
Maru Ahues Bouza • Lectura de 3 min
Mantente al día
Recibe la información más reciente sobre el desarrollo de Android en tu bandeja de entrada todas las semanas.