Cómo configurar la entrega instantánea

Google Play Instant permite a los usuarios interactuar con tu app sin necesidad de instalar APK en sus dispositivos. No obstante, pueden usar tu app mediante el botón "Probar ahora" de Google Play Store o una URL que crees. Esta forma de entregar contenido hace que sea más fácil aumentar la interacción con tu app.

Puedes habilitar instantáneamente una función dinámica solo si también habilitas instantáneamente el módulo base de tu app. Esto se debe a que, si un usuario desea probar en tu app una de las funciones dinámicas compatibles con apps instantáneas, su dispositivo también debe descargar el módulo base de la app para obtener códigos y recursos comunes. Ten en cuenta que, para que sean compatibles con Google Play Instant, la descarga de tu módulo base y la función dinámica deben cumplir con estrictas restricciones de tamaño. Para obtener más información, lee Cómo habilitar experiencias instantáneas reduciendo el tamaño de la app o el juego.

Si creas un módulo de funciones dinámicas compatible con apps instantáneas con Android Studio 3.3 o superior, como se describe en esta sección, el IDE habilita de manera automática e instantánea tanto el módulo de funciones dinámico como el básico, e incluye lo siguiente en el manifiesto de cada módulo:

<manifest xmlns:dist="http://schemas.android.com/apk/distribution"
        ... >
        <dist:module dist:instant="true" />
        ...
    

Ten en cuenta que cuando configuras dist:instant="true", no puedes configurar dist:onDemand="true". Es decir, al descargar e instalar tu app, las funciones dinámicas habilitadas instantáneamente se descargan e instalan de manera automática con el APK base de la app. Sin embargo, puedes solicitar módulos on demand compatibles con apps instantáneas dentro de tu experiencia instantánea utilizando la biblioteca de Play Core.

Cómo configurar un módulo nuevo para entrega instantánea

Para agregar un módulo de funciones dinámicas compatible con apps instantáneas al proyecto de tu app con Android Studio, sigue estos pasos:

  1. Si aún no lo hiciste, abre el proyecto de tu app en el IDE.
  2. Selecciona File > New > New Module en la barra de menú.
  3. En el diálogo Create New Module, selecciona Instant Dynamic Feature Module y haz clic en Next.
  4. En la sección Configure your new module, completa lo siguiente:

    1. En el menú desplegable Base application module, selecciona el módulo base de tu app.
    2. En Module name, especifica el nombre del módulo. El IDE usa este nombre para identificar el módulo como un subproyecto de Gradle en tu archivo de configuración de Gradle. Cuando compilas tu paquete de aplicación, Gradle usa el último elemento del nombre del subproyecto para insertar el atributo <manifest split> en el manifiesto del módulo de funciones dinámicas.
    3. Especifica el nombre del paquete del módulo. De manera predeterminada, Android Studio sugiere un nombre de paquete que combina el nombre del paquete raíz del módulo base y el nombre del módulo que especificaste en el paso anterior.
    4. Selecciona el nivel de API mínimo que deseas que admita el módulo. Este valor debe coincidir con el del módulo base.
    5. Especifica el título del módulo con hasta 50 caracteres. La plataforma usa este título para identificar el módulo ante los usuarios. Por esta razón, el módulo base de la app debe incluir el título del módulo como un recurso de strings, que se puede traducir. Al crear el módulo con Android Studio, el IDE agrega el recurso de strings al módulo base e inserta la siguiente entrada en el manifiesto del módulo de funciones dinámicas:

      <dist:module
              ...
              dist:title="@string/title_dynamic_feature">
          </dist:module>
          
    6. Marca la casilla junto a Fusion si deseas que este módulo esté disponible para los dispositivos con Android 4.4 (nivel de API 20) y versiones anteriores y se lo incluya en APK múltiples. Android Studio inserta lo siguiente en el manifiesto del módulo para reflejar tu elección.

      <dist:module>
              <dist:fusing dist:include="true" />
          </dist:module>
          
  5. Haz clic en Finish.

Después de que Android Studio termine de crear tu módulo, inspecciona el contenido tú mismo desde el panel Project (selecciona View > Tool Windows > Project en la barra de menú). El código, los recursos y la organización predeterminados deben ser similares a los del módulo de app estándar.

Después de implementar una función para la descarga on demand, aprende cómo solicitarla usando la biblioteca de Play Core.

Cómo implementar la app

Mientras desarrollas tu app con compatibilidad con Dynamic Delivery, puedes implementarla en un dispositivo conectado como lo harías normalmente, es decir, seleccionando Run > Run en la barra de menú (o haciendo clic en Run en la barra de herramientas).

Si el proyecto de tu app incluye uno o más módulos de funciones dinámicas, puedes elegir qué funciones dinámicas incluir al implementar la app modificando la configuración de ejecución/depuración existente de la siguiente manera:

  1. Selecciona Run > Edit Configurations en la barra de menú.
  2. En el panel izquierdo del diálogo Run/Debug Configurations, selecciona la configuración de la app para Android que desees.
  3. En Dynamic features to deploy, en la pestaña General, marca la casilla junto a cada módulo de funciones dinámicas que deseas incluir al implementar la app.
  4. Haz clic en OK.

De manera predeterminada, Android Studio no implementa tus módulos compatibles con apps instantáneas ni usa paquetes de aplicación para implementar tu app. En cambio, el IDE crea e instala en tu dispositivo los APK optimizados para la velocidad de implementación, en lugar del tamaño del APK. Para configurar Android Studio para que compile e implemente APK y experiencias instantáneas desde un paquete de aplicación, modifica la configuración de ejecución/depuración.

Recursos adicionales

Para obtener más información sobre la compatibilidad con Dynamic Delivery, consulta el siguiente recurso.

Ejemplos

Entradas de blog (en inglés)

Videos (en inglés)