Reduce el tamaño de tu app instantánea

Google Play Instant ofrece experiencias enriquecidas y nativas con solo presionar un vínculo web. Los usuarios pueden experimentar tu app sin tener que instalarla, lo que permite aumentar el nivel y la calidad de participación. Sin embargo, para que una app instantánea se cargue tan rápido como una página web para dispositivos móviles típica, debes ser eficiente y estar bien estructurada. Mientras más pequeño sea el objeto binario de tu app instantánea, más rápido se cargará y más fluida será la experiencia del usuario.

En este documento, se describen las prácticas recomendadas para administrar la estructura y el tamaño del objeto binario de tu app a fin de permitir una experiencia de app instantánea fluida. También puedes aplicar estas prácticas para mejorar la app instalable.

Refactoriza en múltiples módulos de funciones

La mejora más importante del tamaño del objeto binario de tu app ocurre cuando refactorizas la app en varios módulos de funciones. Comienza con un módulo de función básica y, luego, extrae flujos de trabajo con temas relacionados en sus propios módulos de funciones. Asigna una actividad inicial y una URL única a cada módulo de función para que los usuarios puedan completar el flujo de trabajo del módulo correctamente.

A medida que creas módulos de función, mantén el módulo de función básica lo más pequeño posible. En particular, presta mucha atención a las partes de tu app que requieren acceso a tus bibliotecas dependientes. Si solo un módulo de función usa una biblioteca determinada, importa esa biblioteca al módulo de función específico, no al módulo de función básica. Ten en cuenta que, para lanzar una app instantánea de un módulo de función específico, el tamaño total de ese módulo de función y el módulo de función básica debe ser inferior a 4 MB.

Prácticas recomendadas

Cuando refactorizas tu app, ten en cuenta las siguientes prácticas recomendadas:

Usa la misma base de código para ambos tipos de apps
Puedes simplificar el proceso de administración de proyectos de la app utilizando la misma base de código modular para crear ambas apps: la instalada y la instantánea.
Diseña para múltiples módulos de funciones
Incluso si la app tiene solo un flujo de trabajo y requiere solo un módulo de funciones por ahora, sigue siendo una buena idea diseñar para múltiples módulos de funciones. De esa manera, puedes agregar módulos existentes a la app sin afectar el tamaño del módulo de función original.
No te enfoques en el límite de tamaño del módulo de función al principio
Los límites de tamaño del módulo de función no se aplican a los objetos binarios compilados localmente. También puedes lanzar una app instantánea por medio del segmento de prueba interna, que impone un límite de 10 MB para los tamaños de los módulos de función. Solo se aplica el límite de 4 MB en los segmentos Alfa y de producción.

Actualiza los recursos de la app

Algunas apps, en especial las que tienen un historial de base de código más largo, contienen recursos que los objetos binarios de tu app ya no usan. Cuando buscas formas de hacer que los módulos de la app sean más pequeños, ten en cuenta las siguientes fuentes comunes de código innecesario.

Reduce el tamaño de archivo de las imágenes

Para reducir significativamente el tamaño total de los elementos de diseño de la app, usa el formato de archivo WebP en lugar de PNG. Google Play Instant proporciona compatibilidad total con WebP, incluidas la transparencia y compresión sin pérdidas, por lo que la calidad de la imagen sigue siendo la misma.

Si es posible, quita todos los requisitos de retrocompatibilidad para usar otras imágenes PNG. Si debes usar imágenes PNG, colócalas en el módulo que se utiliza para instalar y compilar la app.

Quita idiomas adicionales

Si tu app admite varios idiomas, reduce todos los recursos localizados que puedas. Es particularmente útil completar este paso si utilizas una biblioteca de "compatibilidad de apps", como android.support.v7.appcompat. En esta biblioteca, se incluyen mensajes en muchos idiomas, algunos de los cuales tu app podría no admitir.

Para obtener más información, consulta cómo quitar recursos alternativos no utilizados, en especial los idiomas no utilizados.

Quita archivos adicionales

Es posible que tu app ya no use algunos de los recursos que importaste a tu proyecto. Para quitar esos recursos, Android Studio tiene una verificación de Lint que te ayudará con esa tarea específica. Sigue estos pasos para usar la herramienta:

  1. Presiona Control+Alt+Shift+I (Command+Alt+Shift+I en Mac OS).
  2. En el cuadro de diálogo que aparece, escribe "unused resources".
  3. Selecciona la opción Recursos no utilizados para iniciar el proceso de inspección de uso de recursos.

Si quedan recursos grandes en la app, evalúa si es posible desempaquetarlos y descargarlos como archivos independientes después de que el usuario comience a interactuar con ella. En general, este tipo de aplazamiento de carga de imágenes requiere un cambio de código, pero puede reducir considerablemente el tamaño de archivo de la app instantánea, ya que solo se descargan los recursos que un usuario solicita de manera explícita.

Quita las bibliotecas que no se usan

A medida que aumenta el alcance de una app, esta puede incluir una cantidad sorprendente de dependencias, en particular, de uno de los siguientes tipos:

  • Bibliotecas nativas: Son las que contienen código nativo que tu app instantánea nunca ejecuta.
  • Dependencias transitivas: Son aquellas de las que dependen las bibliotecas importadas de la app.

Android Studio tiene varias herramientas útiles para identificar dependencias ajenas al proyecto de tu app:

Bibliotecas externas

La vista Project de Android Studio incluye una sección External Libraries.

En esta sección, se incluyen todas las bibliotecas que utiliza la app, lo que incluye el código nativo y todas las dependencias transitivas. En esta vista, busca bibliotecas no utilizadas o duplicadas que no requiera tu app.

Analizador de APK

Puedes usar la herramienta Analizador de APK para comparar diferentes compilaciones, incluidas las compilaciones de apps instantáneas.

Una vez que hayas determinado las bibliotecas que tu app no necesita, puedes excluirlas. Para ello, agrega líneas similares a las siguientes en tu archivo de compilación de Gradle:

<feature_module>/build.gradle

dependencies {
        implementation('some-important-but-large-library') {
            exclude group: 'com.example.imgtools', module: 'native'
        }
    }
    

Para obtener más información sobre cómo reducir el tamaño total de importación de las dependencias de la app, consulta la guía de Gradle sobre administración de dependencias.