Únete a ⁠ #Android11: The Beta Launch Show el 3 de junio.

Cómo crear un paquete de aplicación instantánea

Para crear una experiencia de Google Play Instant, debes incluirla como parte de un Android App Bundle. A ese tipo de paquetes se lo conoce como paquete de aplicación instantánea. En este documento, se muestra cómo configurar el entorno de desarrollo para paquetes de aplicación instantánea, además de cómo configurar, compilar, probar y publicar un paquete de aplicación instantánea.

Si tienes un proyecto de app instantánea que usa el complemento de funciones obsoleto (com.android.feature), obtén información sobre cómo migrar tu app instantánea para que sea compatible con Android App Bundles.

Cómo configurar el entorno de desarrollo

Para proporcionar una experiencia instantánea dentro de un paquete de aplicación, necesitas tener acceso al SDK de desarrollo de Google Play Instant. Puedes instalarlo utilizando uno de los siguientes métodos:

  • Instala Android Studio 3.6 o una versión posterior. Después de abrir Android Studio, descarga el SDK de desarrollo de Google Play Instant desde la pestaña SDK Tools de SDK Manager.
  • Realiza la instalación desde la línea de comandos:

        cd path/to/android/sdk/tools/bin && \
          ./sdkmanager 'extras;google;instantapps'
        

Además, si deseas realizar una prueba de tu experiencia instantánea de forma local, debes obtener acceso a un dispositivo físico o virtual.

Más información sobre las condiciones de ejecución obligatorias

Google Play Instant ejecuta paquetes de aplicaciones instantáneas en un tipo especial de zona de pruebas de SELinux con el objetivo de ofrecer mayor seguridad. Esta zona de pruebas permite un subconjunto de permisos, así como tipos limitados de interacciones con otras apps. En las siguientes secciones, se explican las características de esta zona de pruebas con más detalle.

Permisos y operaciones compatibles

Los paquetes de aplicación instantánea solo pueden usar permisos de la siguiente lista:

Cómo procesar permisos comunes no admitidos

La siguiente lista contiene permisos comunes no compatibles que debes quitar de tu aplicación y la ruta de migración recomendada para cada uno:

  • ACCESS_WIFI_STATE: Usa ACCESS_NETWORK_STATE, que debería proporcionar información similar a ACCESS_WIFI_STATE.
  • BILLING: Es un permiso obsoleto. Usa la Biblioteca de Facturación Google Play, que ya no requiere el permiso com.android.vending.BILLING.
  • READ/WRITE_EXTERNAL_STORAGE: Usa el almacenamiento interno. Si la app debe escribir contenido en el almacenamiento externo, usa directorios específicos de la aplicación en el almacenamiento externo. La app no necesita solicitar permiso para escribir contenido en esos directorios.
  • com.google.android.c2dm.permission.RECEIVE y permission.C2D_MESSAGE: C2DM es obsoleto. Migra a Firebase Cloud Messaging (FCM). FCM no necesita permisos adicionales para funcionar correctamente.

Además, los paquetes de aplicaciones instantáneas no pueden hacer lo siguiente:

Cómo acceder a aplicaciones instaladas

Cuando desarrolles una experiencia instantánea, ten en cuenta que no podrás interactuar con las apps instaladas en un dispositivo, a menos que uno de los siguientes puntos sea verdadero:

  • Una o más actividades de una aplicación instalada establecieron su elemento android:visibleToInstantApps en true. Este elemento está disponible para aplicaciones que ejecutan Android 8.0 (API nivel 26) o versiones posteriores.
  • Una app instalada contiene un filtro de intents que incluye CATEGORY_BROWSABLE.
  • La experiencia instantánea envía un intent utilizando la acción ACTION_SEND, ACTION_SENDTO o ACTION_SEND_MULTIPLE.

Cómo configurar un proyecto para experiencias instantáneas

Para que sea compatible con Google Play Instant, debes configurar atentamente varios aspectos del paquete de aplicación instantánea. En las siguientes secciones, se describen estas consideraciones.

Declara dependencias del proyecto

Para usar las API de Google Play Instant en tu app, incluye la siguiente declaración en el archivo de configuración build.gradle perteneciente el módulo de tu app:

    implementation "com.google.android.gms:play-services-instantapps:17.0.0"
    

Define los códigos de versión correctos

El código de versión de la experiencia instantánea de tu app debe ser inferior al de la app instalable. Se espera que los usuarios pasen de la experiencia de Google Play Instant a descargar e instalar la app en su dispositivo. El marco de trabajo de Android considera esta transición como una actualización de app.

Para asegurarte de seguir el esquema de versiones que esperan los usuarios, implementa una de estas estrategias:

  • Reinicia los códigos de versión para la experiencia en Google Play Instant en 1.
  • Aumenta el código de versión del APK instalable en un número grande, como 1,000, a fin de asegurarte de que haya suficiente espacio para que aumente el número de versión de tu experiencia instantánea.

Es posible desarrollar una app instantánea y una instalable en dos proyectos independientes de Android Studio. Sin embargo, si lo haces, debes hacer lo siguiente para publicar tu app en Google Play:

  1. Usa el mismo nombre de paquete en ambos proyectos de Android Studio.
  2. En Google Play Console, sube ambas variantes a la misma aplicación.

Para obtener más información sobre cómo configurar la versión de tu app, consulta Cómo establecer la versión de tu app.

Actualiza la versión de la zona de pruebas objetivo

Se debe actualizar el archivo AndroidManifest.xml de tu app instantánea para que se oriente al entorno de la zona de pruebas que admite Google Play Instant. Para completar esta actualización, agrega el atributo android:targetSandboxVersion al elemento <manifest> de tu app, como se muestra en el siguiente fragmento de código:

<manifest
       xmlns:android="http://schemas.android.com/apk/res/android"
      ...
       android:targetSandboxVersion="2" ...>
    

Para obtener más información, consulta la documentación sobre el atributo targetSandboxVersion.

Declara módulos de apps instantáneas

Puedes declarar que tu paquete de aplicación admite experiencias instantáneas utilizando uno de los siguientes métodos:

  • Si ya tienes un paquete de aplicación que contiene solo un módulo base, puedes habilitarlo de la siguiente manera:

    1. Abre el panel Project seleccionando View > Tool Windows > Project en la barra de menú.
    2. Haz clic con el botón derecho en el módulo base, que suele llamarse "app", y selecciona Refactor > Enable Instant Apps Support.
    3. En el cuadro de diálogo que aparece, selecciona el módulo base del menú desplegable.
    4. Haz clic en OK.

    Android Studio agrega la siguiente declaración al manifiesto del módulo:

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
            <dist:module dist:instant="true" />
            ...
        </manifest>
        
  • Si ya tienes un paquete de aplicación que contiene varios módulos, puedes crear un módulo de funciones dinámicas de aplicación instantánea. Este proceso también habilita el módulo base de tu app para apps instantáneas, lo que te brinda la opción de admitir varios puntos de entrada instantáneos.

Agrega compatibilidad con el acceso

Si tu experiencia instantánea permite que los usuarios accedan, tu paquete de aplicación instantánea debe ser compatible con Smart Lock para contraseñas en Android. Si estás compilando un juego instantáneo de Play, debes usar el acceso a los Servicios de juego de Google Play.

Admite el entorno de ejecución

Para admitir la zona de pruebas de SELinux en la que se ejecutan las experiencias instantáneas, ten en cuenta lo siguiente cuando crees tu app instantánea:

  • No compartas el valor de myUid(), que es el UID asignado por el kernel de tu app.
  • Si tu app está orientada a Android 8.1 (API nivel 27) o versiones anteriores, crea un archivo Network Security Config y configura cleartextTrafficPermitted como false. Las experiencias instantáneas no admiten el tráfico HTTP. En el caso de las apps orientadas a Android 9 o versiones posteriores, el tráfico de Cleartext está inhabilitado de forma predeterminada.
  • Tu experiencia instantánea permanece descargada en el dispositivo de un usuario hasta que se borra la caché de la experiencia instantánea, lo que puede suceder en una de las siguientes situaciones:

    • La memoria caché de la experiencia instantánea se recolecta como elemento no utilizado porque el dispositivo tiene poca memoria disponible.
    • El usuario reinicia su dispositivo.

    Ante alguna de esas situaciones, el usuario deberá volver a descargar tu experiencia instantánea para interactuar con ella.

  • Si el sistema tiene muy poco espacio de almacenamiento, es posible que se quiten del almacenamiento interno los datos de usuario de tu experiencia instantánea. Por lo tanto, se recomienda sincronizar periódicamente los datos del usuario con el servidor de tu app para preservar el progreso del usuario.

Cómo agregar lógica para flujos de trabajo de experiencia instantánea

Después de configurar tu paquete de aplicación para que admita experiencias instantáneas, agrega la lógica que se muestra en las siguientes secciones.

Comprueba si la app ofrece una experiencia instantánea

Si parte de la lógica de tu app depende de si el usuario participa en tu experiencia instantánea, llama al método isInstantApp(). Este método muestra true si el proceso actual es una experiencia instantánea.

Muestra un mensaje de instalación

Si estás compilando una versión de prueba de tu app o juego, Google Play Instant te permite mostrar un mensaje en la experiencia instantánea para invitar a los usuarios a instalar la versión completa en su dispositivo. Para mostrar esa solicitud, usa el método InstantApps.showInstallPrompt(), como se muestra en el siguiente fragmento de código:

Kotlin

    class MyInstantExperienceActivity : AppCompatActivity {
        // ...
        private fun showInstallPrompt() {
            val postInstall = Intent(Intent.ACTION_MAIN)
                    .addCategory(Intent.CATEGORY_DEFAULT)
                    .setPackage(your-installed-experience-package-name)

            // The request code is passed to startActivityForResult().
            InstantApps.showInstallPrompt(this@MyInstantExperienceActivity,
                    postInstall, request-code, /* referrer= */ null)
        }
    }
    

Java

    public class MyInstantExperienceActivity extends AppCompatActivity {
        // ...
        private void showInstallPrompt() {
            Intent postInstall = new Intent(Intent.ACTION_MAIN)
                    .addCategory(Intent.CATEGORY_DEFAULT)
                    .setPackage(your-installed-experience-package-name);

            // The request code is passed to startActivityForResult().
            InstantApps.showInstallPrompt(MyInstantExperienceActivity.this,
                    postInstall, request-code, /* referrer= */ null);
        }
    }
    

Transfiere datos a una experiencia instalada

Si el usuario disfruta de tu experiencia instantánea, es posible que decida instalar la app. Para proporcionar una buena experiencia del usuario, es importante que se transfieran los datos de la experiencia instantánea a la versión completa de tu app.

Si el usuario utiliza un dispositivo que ejecuta Android 8.0 (API nivel 26) o una versión posterior, y si tu app especifica un targetSandboxVersion de 2, se transferirán automáticamente los datos del usuario a la versión completa de tu app. De lo contrario, deberás transferir los datos de forma manual. Para hacerlo, usa una de las siguientes API:

  • Para los usuarios que usan dispositivos que ejecutan Android 8.0 (API nivel 26) y versiones posteriores, usa la API de Cookie: app de ejemplo
  • Si los usuarios pueden interactuar con tu experiencia en dispositivos que ejecutan Android 7.1 (API nivel 25) y versiones anteriores, agrega compatibilidad con la API de Storage: app de muestra

Cómo compilar el paquete de aplicación

Puedes usar Android Studio o la interfaz de línea de comandos para compilar tu app instantánea.

Android Studio

En Android Studio, puedes compilar tu paquete de aplicación seleccionando Build > Build Bundle(s) / APK(s) > Build Bundle(s). Para obtener más información sobre cómo compilar tu proyecto, consulta Cómo compilar un proyecto.

Interfaz de línea de comandos

También puedes compilar el paquete de aplicación desde la línea de comandos utilizando Gradle. Después de realizar esta compilación, ejecuta el siguiente comando para realizar un control de funcionalidad de la experiencia instantánea:

    ia check app-artifact
    

El artefacto de la app puede ser un archivo ZIP, un paquete de aplicación o una lista de APK que contenga al menos una experiencia instantánea.

Cómo poner a prueba la experiencia instantánea

Antes de publicar tu paquete de aplicación instantánea, prueba la experiencia desde una de las siguientes ubicaciones a fin de comprobar la funcionalidad:

Android Studio

Para probar la experiencia instantánea de tu app en una máquina local con Android Studio, sigue estos pasos:

  1. Si tienes una versión instalada de tu app en el dispositivo de prueba, desinstálala.
  2. En Android Studio, en las opciones de instalación que aparecen en la pestaña General del diálogo Run/Debug Configurations, habilita la casilla de verificación Deploy as instant app.
  3. Selecciona Run > Run en la barra de menú o haz clic en Run , en la barra de herramientas. Luego, elige el dispositivo en el que quieras probar las experiencias instantáneas de tu app. Se cargará en el dispositivo de prueba que hayas elegido.

Interfaz de línea de comandos

Para probar la experiencia instantánea de tu app en una máquina local con la línea de comandos, completa los siguientes pasos:

  1. Si tienes una versión instalada de tu app en el dispositivo de prueba, desinstálala.
  2. Ingresa el siguiente comando para transferir y ejecutar tu app instantánea:
    ia run output-from-build-command
    

Segmento de prueba interna

Para probar la experiencia instantánea de tu app desde Play Store o un banner de sitio web, publica la app en el segmento de prueba interna de Play Console.

Para publicar tu app en el segmento de prueba interna, completa los siguientes pasos:

  1. Para subir tu paquete de aplicación, sigue los pasos que se indican en la guía Cómo subir tu paquete de aplicación a Play Console.
  2. Prepara el paquete que subiste para iniciarlo en el segmento de prueba interna. Para obtener más información, consulta el artículo de asistencia sobre cómo preparar e implementar versiones.
  3. Accede a una cuenta de verificador interno en un dispositivo y, luego, inicia tu experiencia instantánea desde una de las siguientes opciones:

    • El botón Probar ahora de la ficha de Play Store de tu app
    • Un vínculo de un banner del sitio web de tu app

Cómo publicar el paquete de aplicación en el segmento de producción

Para publicar tu paquete de aplicación instantánea, sigue estos pasos:

  1. Si aún no lo hiciste, firma el paquete de tu aplicación con una clave de lanzamiento y súbelo a Play Console.
  2. En Play Console, abre Administración de lanzamientos > Apps instantáneas Android y ve hasta el segmento de producción de apps instantáneas.
  3. Selecciona Actualizar desde la biblioteca y, luego, elige el paquete de aplicación instantánea que subiste.

Elige dónde publicar tu experiencia instantánea

Se puede iniciar una experiencia instantánea de tu app en un subconjunto de países y regiones donde los usuarios pueden instalarla. Esta función es útil si deseas promocionar la experiencia instantánea de tu app para usuarios que residen en un conjunto específico de países y regiones.

Recursos adicionales

Para obtener más información sobre cómo crear experiencias instantáneas y Android App Bundles, consulta los siguientes recursos:

Video: Cómo compilar una app instantáneamente
Obtén información sobre cómo agregar una experiencia instantánea a un Android App Bundle en esta sesión de Android Dev Summit 2018.
Video: Cómo publicar apps más pequeñas con Android App Bundle
Obtén información sobre cómo los paquetes de aplicación te ayudan a desarrollar tu app con mayor rapidez y a compilar APK más pequeños para los usuarios.
Codelab: Tu primer Android App Bundle
Consulta esta guía paso a paso para compilar un Android App Bundle y agregarle funciones.
El formato de Android App Bundle
Obtén más información sobre cómo el programa de línea de comandos de bundletool organiza un paquete de aplicación a partir del código y los recursos de tu app.