Casos de éxito

Tinder reduce los inicios en frío de la app en un 47% con el nuevo Analizador de configuración de R8

Lectura de 4 min

La misión de Tinder es potenciar e inspirar conexiones reales haciendo que conocer gente sea fácil y divertido para cada nueva generación de solteros. Sin embargo, a medida que aumentaba el tamaño de la base de código de su aplicación para Android, también aumentaba su complejidad. Antes de sus últimos esfuerzos de optimización, aproximadamente el 70% de la aplicación no estaba optimizada, con 17 archivos dex,incluidos tres dedicados solo al inicio. Aunque habían habilitado R8, gran parte de su potencial de optimización estaba bloqueado debido a las reglas de conservación, y el equipo no podía identificar qué reglas específicas impedían la optimización. Para reducir el tiempo de inicio y disminuir los errores de aplicación no responde (ANR) percibidos por el usuario, Tinder recurrió al nuevo analizador de configuración de R8 para abordar estos desafíos.

Con el Analizador de configuración de R8, Tinder identificó y quitó con éxito los bloqueadores de optimización no intencionales. Los resultados fueron inmediatos y significativos: Tinder logró una reducción del 47% en los inicios en frío de la app, disminuyó el tamaño de descarga de la app en un 28.98% (hasta 61.5 MB) y redujo los errores de ANR percibidos por el usuario en un 28%.

Analizador de configuración 

El Analizador de configuración de R8 muestra la optimización de R8 a través del seguimiento de las puntuaciones de reducción, optimización y ofuscación para mostrar las áreas de perfeccionamiento disponibles. Muestra las reglas de conservación amplias, redundantes o inactivas, incluidas las de bibliotecas externas, para que puedas analizar el impacto de las reglas de conservación y definirlas mejor.

Las métricas clave que se muestran en el Analizador de configuración incluyen las siguientes:

  • Puntuación de reducción: Es el porcentaje de código disponible para la reducción de R8.
  • Nivel de optimización: Es el porcentaje de código abierto a la optimización (por ejemplo, intercalación de métodos, combinación horizontal de clases).
  • Puntuación de ofuscación: Es el porcentaje de clases, métodos y campos a los que R8 puede cambiarles el nombre para reducir el tamaño.

Usa el analizador para auditar las reglas de conservación y sus impactos:

  • Encuentra reglas amplias: Reduce el alcance de las reglas de todo el paquete que restringen la optimización de R8 y, además, identifica las clases, los métodos y los campos específicos que se excluyen de la reducción, la optimización y la ofuscación.
  • Define mejor las reglas: Orienta solo las clases o los métodos específicos que requieren reflexión para desbloquear la optimización.
  • Quita las reglas redundantes: Quita las reglas que no coincidan con ninguna clase, método o campo de tu compilación actual.
  • Reglas idénticas: Las reglas de conservación idénticas son aquellas que se orientan a las mismas clases, campos y métodos, o declaraciones duplicadas de reglas de conservación en el mismo archivo o en varios archivos de reglas de conservación.
  • Encuentra reglas subsumidas: Limpia las reglas específicas que ya están cubiertas por configuraciones más amplias.
  • Identifica las bibliotecas problemáticas: Verifica el impacto combinado en la optimización de las reglas de conservación de consumidores combinadas de todas las bibliotecas.
R8-Configuration-Analyzer-Screenshot.png
Informe del Analizador de configuración de R8 de una aplicación de ejemplo

Para ayudarte a usar el Analizador de configuración de R8 con herramientas de agentes, publicamos una habilidad de Analizador de R8. Esta habilidad optimiza los flujos de trabajo de desarrollo automatizados, ya que resume el informe de R8 Configuration Analyzer para mostrar métricas clave: puntuaciones de optimización, ofuscación y reducción. También destaca las cinco reglas de conservación más importantes, lo que te brinda información clara sobre lo que bloquea la optimización del código.

Identifica los bloqueadores de optimización ocultos

image.png

Antes de integrar el Analizador de configuración de R8, la app para Android de Tinder tenía una deuda técnica significativa debido a una base de código muy poco optimizada. Esta falta de optimización afectó directamente la experiencia del usuario, lo que provocó que los usuarios experimentaran inicios en frío lentos. 

Para resolver estos problemas, el equipo de Tinder utilizó el Analizador de configuración de R8 para auditar de forma integral su configuración de R8. El analizador mostró que la optimización de R8 de la base de código era de alrededor del 28%, incluso con el modo completo de R8. Con R8 Configuration Analyzer, Tinder identificó que una biblioteca interna estaba introduciendo una regla de conservación amplia y sin alcance. 

# Prevents optimization in all public classes along with all of their public and protected members

-keep public class * {
    public protected *;
}

Esta regla "amplia" abarcaba de forma involuntaria varias dependencias en toda la app, lo que impedía la optimización en una gran cantidad de clases. Como la regla demasiado inclusiva evitaba las fallas durante el tiempo de ejecución, los desarrolladores solían olvidar agregar reglas nuevas para las funciones nuevas que usaban la reflexión, lo que permitía que los problemas ocultos se acumularan con el tiempo.

Aprovechando las estadísticas que proporcionó el Analizador de configuración de R8, el equipo rastreó y analizó con éxito las clases específicas afectadas por la regla de conservación amplia de la biblioteca. El equipo descubrió de inmediato que la optimización se estaba bloqueando en clases más grandes que no se invocaban de forma dinámica, en las que R8 podía realizar la optimización. Refinar esta regla de conservación específica permitió que Tinder desbloqueara capacidades de optimización sustanciales, desenredara sus configuraciones heredadas y mejorara drásticamente sus números de optimización generales, con un aumento de las puntuaciones de R8 del 28% al 50%, lo que generó ganancias de rendimiento inmediatas en toda la aplicación, y el equipo de Tinder está trabajando activamente para mejorar aún más esta cifra.

  • Carga más rápida: El equipo logró una reducción del 47% en la cantidad de usuarios que experimentaban inicios en frío lentos de la app.
  • Menor tamaño: El tamaño de descarga de la app pasó de 86.6 MB a 61.5 MB (una disminución del 28.98%).
  • Estabilidad mejorada: Los errores de aplicación no responde (ANR) percibidos por el usuario disminuyeron del 0.35% al 0.28%, lo que los acerca significativamente a las cifras de la mediana de apps similares.
  • Menor complejidad: La cantidad total de archivos DEX se redujo de 17 a 11, incluidos solo dos archivos de inicio.

Más allá de estas mejoras en el rendimiento técnico, la mayor optimización de la aplicación se tradujo directamente en un crecimiento comercial tangible y una mayor participación de los usuarios, en especial en los mercados con recursos limitados.

  • Participación regional: Los países en los que los dispositivos con poca RAM ocupan una gran parte del mercado presentaron el mayor aumento en la participación, y la disminución de las tasas de ANR fue clave para mejorar la participación en este vasto mercado.
  • Crecimiento de la participación: La participación aumentó un 3% desde que se incrementó la optimización de la app.
image.png

Protege el rendimiento futuro con la integración continua

Abordar la reducción de código no es solo una solución única, sino que requiere una vigilancia continua. Inspirado por las enormes mejoras que se lograron con el Analizador de configuración de R8, el equipo de Android de Tinder integró de forma proactiva la supervisión de optimizaciones en su flujo de trabajo diario para evitar regresiones.

El equipo de Tinder agregó un trabajo nuevo en su canalización de CI/CD para informar los cambios en las estadísticas de optimización, de modo que todos puedan ver cómo su contribución afecta la optimización. Cuando se trata de aconsejar a otros desarrolladores que consideran la integración de la configuración de R8, el equipo enfatiza la importancia de auditar las dependencias internas. Si bien la mayoría de las bibliotecas de terceros populares incluyen reglas bien definidas, los proyectos internos de la empresa que se consideran "estables" podrían, en realidad, introducir reglas amplias que afecten negativamente la optimización general.

Conclusiones principales

Con una base de código muy poco optimizada y un gran volumen de archivos DEX, Tinder necesitaba una forma de auditar de forma limpia las reglas de reducción de su app. El analizador de configuración de R8 proporcionó las herramientas ideales necesarias para identificar reglas de biblioteca interna demasiado amplias, las clases afectadas por la regla de conservación, lo que permitió al equipo optimizar su base de código con confianza. Como resultado, Tinder logró reducir los inicios en frío casi a la mitad, disminuyó el tamaño de su APK en más de un 28% y estableció una base más sólida y de mejor rendimiento para sus usuarios, y el equipo trabaja activamente para mejorar aún más estas cifras.

Cómo usar el Analizador de configuración de R8

El Analizador de configuración de R8 y sus funciones independientes se pueden usar según la versión actual del complemento de Android para Gradle (AGP):

1. Lanzamiento de AGP 9.3: El Analizador de configuración de R8 está completamente integrado y se lanzó con AGP 9.3. Cuando ejecutes una compilación de lanzamiento de R8, el informe se generará en la carpeta `build/outputs/mapping/release/configanalyzer.html`.

2. Tarea de Gradle independiente: El AGP 9.3 presenta una tarea de Gradle independiente que te permite generar el informe del analizador sin ejecutar una compilación de lanzamiento completa, lo que proporciona un ciclo de reacción mucho más rápido cuando se definen mejor las reglas de conservación de forma local:

./gradlew :app:analyzeReleaseR8Config

El informe se genera a las build/reports/r8/r8-config-analyzer-release.html.

3. Uso en versiones anteriores del AGP: Si usas una versión anterior al AGP 9.3, no es necesario que migres toda la versión del AGP para analizar tu configuración. Puedes actualizar la versión de R8 de forma independiente a la 9.3.7-dev o una posterior siguiendo las instrucciones para reemplazar R8 en el AGP. Para generar el informe de forma local, ejecuta la compilación con la propiedad especificada:

./gradlew assembleRelease  -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>

Para obtener más información, consulta la documentación del Analizador de configuración de R8.

Escrito por:
Continuar leyendo