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 cual aumenta la calidad y el nivel 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 normal, debe 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 correctamente el flujo de trabajo del módulo.

A medida que crees 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 la 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 de función básica debe ser inferior a 15 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 de momento la app tiene solo un flujo de trabajo y requiere un único módulo de funciones, es 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 mediante el segmento de prueba interna, que impone un límite de 15 MB a los tamaños de los módulos de función. Solo se aplica el límite de 15 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 busques 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 los idiomas que no se usen

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 estos tal vez no sean compatibles con tu app.

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

Quita los 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 Unused resources 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 tu 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 esa sección, se incluyen todas las bibliotecas que utiliza tu app, incluidos el código nativo y todas las dependencias transitivas. En esa 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 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

Groovy

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

Kotlin

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.

Cómo implementar la entrega de recursos en la nube

Si necesitas reducir aún más el tamaño, es posible que debas implementar la entrega de elementos en la nube.