Eventos y programas

Usa R8 para reducir, optimizar y acelerar tu app

Lectura de 5 min
Ver el perfil de Ben Weiss
Ben Weiss Ingeniero de Relaciones con Desarrolladores

Usa R8 para reducir, optimizar y acelerar tu app

Te damos la bienvenida al primer día de la Semana de enfoque en el rendimiento de Android.

Comenzaremos con el cambio más impactante y sencillo que puedes realizar para mejorar el rendimiento de tu app: habilitar el optimizador R8 en el modo completo.

Es probable que ya conozcas R8 como una herramienta para reducir el tamaño de tu app. Realiza un trabajo fantástico para quitar el código y los recursos sin usar, lo que reduce el tamaño de tu app. Sin embargo, su verdadero poder, en el que realmente g-R8 es experto, es como optimizador.

Cuando habilitas el modo completo y permites las optimizaciones, R8 realiza optimizaciones profundas de todo el programa y reescribe tu código para que sea fundamentalmente más eficiente. No se trata de un ajuste menor.

Después de leer este artículo, mira la introducción de la Semana de enfoque en el rendimiento del optimizador R8 en YouTube.

Cómo R8 mejora el rendimiento de tu app

image.png

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 no utilizado 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 inactivo de tu propia base de código.

La inserció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 aplica la combinació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, es posible que termines con una clase llamada a. Esto es lo que causa la mayor confusión al leer los seguimientos de pila de una app optimizada con R8 (ten en cuenta que mejoramos 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.

Si se aplican estos pasos, el optimizador de 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 los recursos en el dispositivo.

Caso de éxito: Las 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.

image.png

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 "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 espera y acceso más rápido al contenido. Una menor cantidad de errores de ANR genera 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 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 se observó 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 del usuario y se pueden reflejar en la retención, 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, por semana o 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 aumentaron en correlación con la adopción de R8. Compartir esta información con los propietarios de productos, los CTO y los responsables de la toma de decisiones puede ayudar a acelerar el rendimiento de tu app.

image.png

Así que llamémoslo por su nombre: la optimización deliberada del rendimiento es una virtud.

Cómo guiarte hacia una app con mejor rendimiento

Nos comentaron que debíamos mejorar nuestra orientación para desarrolladores sobre R8. Así que nos pusimos a trabajar. La orientación para desarrolladores del optimizador 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 aptas para la optimización y, fundamentalmente, 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 orientación 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 te brindamos orientación con prácticas recomendadas para escribirlas y mantenerlas. También proporcionamos ejemplos y casos de uso prácticos y útiles para ayudarte 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 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 en el 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 especiales de optimización para los autores de bibliotecas, lo que garantiza que puedas proporcionar un paquete optimizado y compatible con R8 para que lo usen otros desarrolladores.

Cómo habilitar todo el potencial del optimizador 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 una marca heredada para inhabilitarlo. Revisa tu archivo gradle.properties para encontrar 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. Para habilitarlo, establece isMinifyEnabled y isShrinkResources en verdadero. En este paso, también puedes pasar archivos de configuración predeterminados y personalizados.

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 su experiencia del usuario. A veces, incluso los cambios aparentemente pequeños pueden tener un gran impacto. Mientras inspeccionaba la 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 aún 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.

image.png

Después de que se lanzó a los usuarios una nueva versión de la app que contenía este cambio, Disney+ registró un inicio de la app un 30% más rápido y un 25% menos de errores de ANR percibidos por el usuario. 

Actualmente, muchas apps aún usan el archivo proguard-android.txt, que contiene la marca -dontoptimize. Aquí 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 

image.png

A partir de AGP 9.0, dejaremos de admitir por completo el archivo. Esto significa que deberás migrar a proguard-android-optimize.txt.

También invertimos en nuevas funciones de Android Studio para que depurar el código optimizado con R8 sea más fácil que nunca. A partir de AGP 9.0, ahora puedes desofuscar automáticamente los seguimientos de pila en Logcat de Android Studio para las compilaciones procesadas por R8, lo que te ayudará a identificar la línea de código exacta que causa un problema, incluso en una app completamente optimizada. Esto se tratará con más detalle en la entrada del blog de mañana sobre esta Semana de Android Performance Spotlight.

Próximos pasos

Mira la introducción de la Semana de enfoque en el rendimiento del optimizador R8 en YouTube.

📣 ¡Acepta el desafío de rendimiento!

Es hora de que descubras los beneficios por tu cuenta.

Te desafiamos a habilitar el modo completo de R8 para tu app hoy mismo.

  1. Sigue nuestras guías para desarrolladores y comienza: Habilita la optimización de la app.
  2. Comprueba si aún usas proguard-android.txt y reemplázalo por proguard-android-optimize.txt.
  3. Luego, mide el impacto. No solo sientas la diferencia, verifícala. Para medir las mejoras en el rendimiento, adapta el código de nuestra app de ejemplo de Macrobenchmark en GitHub para medir los tiempos de inicio antes y después.

Tenemos la certeza de que notarás una mejora significativa en el rendimiento de tu app. Usa #optimizationEnabled para cualquier pregunta sobre cómo habilitar R8 o solucionar problemas relacionados con él. Estamos aquí para ayudarte.

Trae tus preguntas para la sesión de Pregúntale a Android del viernes

Usa la etiqueta de redes sociales #AskAndroid para hacer preguntas sobre el rendimiento. Durante la semana, supervisaremos tus preguntas y responderemos varias en la sesión de Pregúntale a Android sobre el rendimiento el viernes 21 de noviembre. No te pierdas el contenido de mañana, en el que profundizaremos aún más en la depuración y la solución de problemas. Pero, por ahora, comienza a usar R8 y pon tu app en la vía rápida.

Escrito por:
Continuar leyendo