Eventos y programas

Usar R8 para reducir, optimizar y acelerar el desarrollo de tu aplicación

Lectura de 5 minutos
Ben Weiss
Ingeniero de relaciones con desarrolladores

Usar R8 para reducir, optimizar y acelerar el desarrollo de tu aplicación

Te damos la bienvenida al primer día de la serie Spotlight Week sobre el rendimiento de Android.

Vamos a empezar con el cambio más eficaz y sencillo que puedes hacer para mejorar el rendimiento de tu aplicación: habilitar el optimizador R8 en modo completo.

Seguramente ya conozcas R8 como herramienta para reducir el tamaño de tu aplicación. Hace un trabajo fantástico eliminando el código y los recursos que no se usan, lo que reduce el tamaño de tu aplicación. Pero su verdadero potencial, aquello en lo que es g-R8, es su capacidad de optimización.

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

Después de leer este artículo, consulta la introducción de la serie Spotlight Week sobre el rendimiento del optimizador R8 en YouTube.

Cómo mejora el rendimiento de tu aplicación R8

imagen.png

Vamos a destacar los pasos más importantes que lleva a cabo el optimizador R8 para mejorar el rendimiento de las aplicaciones.

La sacudida del árbol es el paso más importante para reducir el tamaño de la aplicación. Durante esta fase, el optimizador R8 elimina el código no utilizado de las bibliotecas de las que depende tu aplicación, así como el código obsoleto de tu propia base de código.

La inserción de métodos sustituye una llamada de método por el código real, lo que mejora el rendimiento del tiempo de ejecución.

Se aplican fusiones de clases y otras estrategias para que el código sea más compacto. Todas tus bonitas abstracciones, como las interfaces y las jerarquías de clases, no importan en este punto y es probable que se eliminen.

La minificació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, puede que acabes con una clase llamada a. Esto es lo que más confusión genera al leer los seguimientos de pila de una aplicación optimizada con R8. Ten en cuenta que hemos mejorado este aspecto en AGP 9.0.

La reducción de recursos reduce aún más el tamaño de una aplicación eliminando los recursos que no se utilizan, como los archivos XML y los elementos de diseño.

Si sigues estos pasos, el optimizador R8 mejorará los tiempos de inicio de las aplicaciones, permitirá que la interfaz de usuario se renderice de forma más fluida, con menos fotogramas lentos y congelados, y mejorará el uso general de los recursos en el dispositivo.

Caso de éxito: mejoras de rendimiento de Reddit con R8

Para ver un ejemplo de las mejoras de rendimiento que puede aportar R8, echemos un vistazo a un ejemplo de Reddit. Tras habilitar R8 en modo completo, la aplicación Android de Reddit experimentó mejoras significativas en el rendimiento en varias áreas.

imagen.png

Título: Cómo mejoró R8 el rendimiento de la aplicación de Reddit

El equipo observó que el arranque en frío era un 40% más rápido, que los errores "La aplicación no responde" (ANR) se redujeron en un 30% , que el renderizado de los fotogramas mejoró en un 25% y que el tamaño de la aplicación se redujo en un 14% .

Estas mejoras son fundamentales para la satisfacción de los usuarios. Un inicio más rápido significa menos tiempo de espera y un acceso más rápido al contenido. Si hay menos errores ANR, la aplicación será más estable y fiable, lo que reducirá la frustración de los usuarios. La renderización de fotogramas más fluida elimina los tirones de la interfaz de usuario, lo que hace que el desplazamiento y las animaciones sean fluidos y respondan bien. Este impacto técnico positivo también se reflejó claramente en la opinión de los usuarios.

Puedes consultar más información sobre estas mejoras en nuestro blog.

Efectos secundarios no técnicos de usar R8

Durante nuestro trabajo con los partners, hemos observado que estas mejoras técnicas tienen un impacto directo en la satisfacción de los usuarios y pueden reflejarse en la retención de usuarios, la interacción y la duración de las sesiones. La fidelización de los usuarios, que se puede medir con los usuarios activos diarios, semanales o mensuales, también se ha visto afectada positivamente por las mejoras en el rendimiento técnico. Además, hemos observado que las valoraciones de las aplicaciones en Play Store han aumentado en correlación con la adopción de R8. Compartir esta información con los propietarios de tus productos, los directores de tecnología y los responsables de tomar decisiones puede ayudarte a mejorar el rendimiento de tu aplicación.

imagen.png

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

Te ayudamos a crear una aplicación con mejor rendimiento

Hemos recibido comentarios de que nuestra guía para desarrolladores de R8 necesitaba mejoras. Así que nos pusimos manos a la obra. La guía para desarrolladores del optimizador R8 ahora es mucho más práctica y ofrece instrucciones completas para habilitar y depurar R8.

La documentación te guía en la estrategia general de adopción, destacando la importancia de elegir bibliotecas compatibles con la optimización y, lo que es más importante, de adoptar las funciones de R8 de forma incremental para garantizar la estabilidad. Este enfoque gradual te permite disfrutar de las ventajas de R8 de forma segura y, al mismo tiempo, te ofrece orientación sobre problemas difíciles de depurar.

Hemos ampliado considerablemente nuestra guía sobre las reglas Keep, que son el mecanismo principal para controlar el optimizador R8. Ahora ofrecemos una sección sobre qué son las reglas de conservación, cómo aplicarlas y te damos consejos sobre las prácticas recomendadas para escribirlas y mantenerlas. También proporcionamos casos prácticos y ejemplos concretos para ayudarte a entender cómo evitar que R8 elimine código que se necesita en el tiempo de ejecución, como el código al que se accede mediante reflexión o el uso de la interfaz nativa JNI.

La documentación ahora también incluye los pasos de seguimiento esenciales y los casos avanzados. Hemos añadido una sección sobre pruebas y solución de problemas para que puedas verificar las mejoras de rendimiento y depurar cualquier problema que pueda surgir. En la sección Configuraciones avanzadas se explica cómo orientar a variantes de compilación específicas, personalizar los recursos que se conservan o se eliminan, y se ofrecen instrucciones de optimización especiales para los autores de bibliotecas. De esta forma, puedes proporcionar un paquete optimizado y compatible con R8 para que lo usen otros desarrolladores.

Aprovechar todo el potencial del optimizador R8

El optimizador R8 usa el "modo completo" de forma predeterminada desde la versión 8.0 del complemento de Android para Gradle. Si tu proyecto se ha desarrollado a lo largo de muchos años, es posible que siga incluyendo una marca antigua para inhabilitarlo. Busca esta línea en el archivo gradle.properties y elimínala.

android.enableR8.fullMode=false // delete this line to enable R8's full potential

Ahora, comprueba si has habilitado R8 en el archivo build.gradle.kts de tu aplicación para la variante de lanzamiento. Para habilitarlo, asigna el valor true a isMinifyEnabled y isShrinkResources. En este paso, también puedes transferir 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 de rendimiento de Disney+

Los ingenieros de Disney+ invierten en el rendimiento de la aplicación y están optimizando la experiencia de usuario. A veces, incluso los cambios aparentemente pequeños pueden tener un gran impacto. Al inspeccionar su configuración de R8, el equipo descubrió que se estaba usando la marca -dontoptimize. Se introdujo mediante un archivo de configuración predeterminado, que se sigue usando en muchas aplicaciones hoy en día.

Tras sustituir proguard-android.txt por proguard-android-optimize.txt, el equipo de Disney+ observó mejoras significativas en el rendimiento de su aplicación.

imagen.png

Después de lanzar una nueva versión de la aplicación que incluía este cambio, Disney+ experimentó un inicio de la aplicación un 30% más rápido y un 25% menos de errores ANR percibidos por los usuarios. 

Hoy en día, muchas aplicaciones siguen usando el archivo proguard-android.txt, que contiene la marca -dontoptimize. Ahí es donde entran en juego las mejoras de nuestras herramientas.

Asistencia con las herramientas

A partir de la actualización con nuevas funciones de Android Studio Narwhal 3, verás una advertencia de lint cuando uses proguard-android.txt 

imagen.png

A partir de AGP 9.0, dejaremos de ofrecer asistencia por completo para este archivo. Esto significa que tendrás que migrar a proguard-android-optimize.txt.

También hemos invertido en nuevas funciones de Android Studio para que depurar código optimizado con R8 sea más fácil que nunca. A partir de AGP 9.0, ahora puedes desofuscar automáticamente los rastreos 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 aplicación totalmente optimizada. Este tema se tratará con más detalle en la entrada del blog de mañana sobre esta semana de Android Performance Spotlight.

Pasos siguientes

Consulta la introducción de la serie Spotlight Week sobre el optimizador R8 en YouTube.

📣 ¡Participa en el reto de rendimiento!

Es el momento de comprobar las ventajas por ti mismo.

Te proponemos que habilites el modo completo de R8 en tu aplicación hoy mismo.

  1. Para empezar, sigue nuestras guías para desarrolladores: Habilitar la optimización de aplicaciones.
  2. Comprueba si sigues usando proguard-android.txt y sustitúyelo por proguard-android-optimize.txt.
  3. Después, mide el impacto. No te limites a notar la diferencia, verifícala. Mide las mejoras de rendimiento adaptando el código de nuestra  aplicación de ejemplo Macrobenchmark en GitHub para medir los tiempos de inicio antes y después.

Estamos seguros de que notarás una mejora significativa en el rendimiento de tu aplicación. Usa #optimizationEnabled si tienes alguna duda sobre cómo habilitar o solucionar problemas de R8. Estamos aquí para ayudarte.

Envía tus preguntas para la sesión Ask Android del viernes

Usa la etiqueta #AskAndroid para plantear cualquier pregunta sobre el rendimiento. A lo largo de la semana, monitorizaremos vuestras preguntas y responderemos a varias de ellas en la sesión Pregunta a Android sobre el rendimiento del viernes 21 de noviembre. No te pierdas la sesión de mañana, en la que profundizaremos aún más en la depuración y la solución de problemas. Pero, por ahora, empieza a usar R8 y pon tu aplicación en la vía rápida.

Escrito por:

Seguir leyendo