Convierte un juego en una app instantánea

Los pasos para configurar apps a fin de que se ejecuten en Google Play Instant, como se explicó en Cómo crear tu primera app instantánea, también se aplican a los juegos. En esta guía, se hace énfasis en algunos pasos de configuración específicos de ese tipo de contenido.

Puedes desarrollar juegos para Google Play Instant con Unity (con o sin el complemento de Unity de Google Play Instant), Cocos2D, Android Studio o tu propio motor personalizado.

En esta guía, se asume que ya sabes qué tipo de experiencia de juego quieres brindar. Si deseas ver ideas y prácticas recomendadas para crear juegos de alta calidad, lee Prácticas recomendadas de UX para juegos en Google Play Instant.

Además, antes de publicar un juego que pueda ejecutarse en Google Play Instant, deberías revisar la Lista de verificación de requisitos técnicos para juegos.

Una actividad que incluye el siguiente filtro de intents se convierte en el punto de entrada para la experiencia de Google Play Instant:

<activity android:name=".GameActivity">
       <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
    </activity>
    

Esta actividad se inicia cuando un usuario presiona el botón Probar ahora en la app de Play Store o Play Juegos. También puedes iniciar la actividad directamente con la API de vínculo directo.

Si quieres que los usuarios puedan acceder a tu juego mediante una URL propia, también puedes agregar vínculos de apps. Sin embargo, si agregas estos vínculos de apps, también tienes que agregar una URL predeterminada que coincida exactamente con una de las URL del vínculo de la app.

En el siguiente fragmento de código, se muestra un ejemplo de combinación de vínculos de apps y URL predeterminadas:

<activity
       android:name=".GameActivity" ... >

       <!-- App links (HTTP and HTTPS) -->
       <intent-filter android:autoVerify="true">
           <action android:name="android.intent.action.VIEW" />

           <category android:name="android.intent.category.BROWSABLE" />
           <category android:name="android.intent.category.DEFAULT" />

           <data android:scheme="http" />
           <data android:scheme="https" />
           <data android:host="example.com" />
           <data android:pathPrefix="/instant" />
       </intent-filter>

       <!-- Default URL -->
       <meta-data
           android:name="default-url"
           android:value="https://example.com/instant" />
    </activity>
    

Códigos de versión

El código de versión de la app instantánea de tu juego debe ser inferior al del juego instalable. Se espera que los usuarios pasen de la experiencia en Google Play Instant a la descarga y posterior instalación del juego en sus dispositivos. El marco de trabajo de Android considera esta transición como una actualización de app.

Puedes usar una de las siguientes estrategias a fin de asegurarte de seguir el esquema de versiones:

  • 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 por 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 app instantánea.

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.

Versión de la zona de pruebas de destino

Al igual que otras apps, los juegos de Google Play Instant se ejecutan dentro de una zona de pruebas limitada en el dispositivo. El archivo AndroidManifest.xml de la app instantánea debe estar actualizado para orientarse a esta zona de pruebas. Puedes completar esta actualización agregando el atributo android:targetSandboxVersion al elemento <manifest>, como se muestra en el siguiente fragmento de código:

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

Si usas Gradle 3.0 o una versión posterior para compilar la versión de Android de tu juego, puedes aplicar los complementos com.android.feature y com.android.instantapps a los módulos de funciones. Estos complementos agregan automáticamente el atributo necesario al archivo de manifiesto del módulo.

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

Reducción del tamaño del APK

A diferencia de otros tipos de apps, los juegos de Google Play Instant tienen un límite de tamaño de descarga de 10 MB. Para crear un juego de este tamaño, es posible que debas volver a factorizar la lógica de tu juego. En esta sección, se describen algunas herramientas y técnicas que te ayudarán a optimizar el tamaño de tu contenido.

Herramientas

La siguiente lista de herramientas puede ayudarte a determinar qué está contribuyendo al tamaño de tu juego:

  • Analizador de APK: Proporciona una vista integral del contenido de un APK compilado. Con esta vista, puedes determinar la cantidad de bytes que cada elemento contribuye al tamaño general. Usa esta herramienta para comprobar rápidamente el tamaño de los recursos, los elementos, la lógica y las bibliotecas nativas que usa tu juego.
  • Bloaty McBloatface: Muestra el perfil de tamaño de los archivos binarios.
  • GAPID: Te permite ver el efecto del tamaño del archivo cuando reduces el tamaño de la textura sin tener que volver a compilar tu juego.

Técnicas

En la siguiente lista, se enumeran las técnicas que puedes usar para reducir el tamaño de tu juego:

  • Reduce la resolución de las texturas de tu juego.
  • Considera usar el formato WebP, en especial, si usas texturas sin comprimir en la GPU. El formato WebP crea imágenes que tienen la misma calidad que las JPEG, pero son entre un 15% y un 30% más chicas. Si bien lleva más tiempo descomprimir imágenes de WebP, ese tiempo de descompresión sigue siendo significativamente más breve que el tiempo de descarga de las texturas de tu juego.

    Google también integró el formato a un motor de juegos de código abierto.

  • Usa solo un subconjunto de sonidos que esté disponible en el juego instalable.

  • Usa diferentes marcas de compilación para reducir el tamaño de tu archivo binario:

    • -fvisibility=hidden: Es el más importante. En cmake, puedes especificarlo de la siguiente manera:
      $ set_target_properties(your-target PROPERTIES CXX_VISIBILITY_PRESET hidden)
          
    • -Oz: También es importante para reducir el tamaño. Si compilas con gcc, usa -Os.
    • -flto: A veces, disminuye el tamaño.
    • Marcas del vinculador: Usa --gc-sections junto con marcas del compilador, como -ffunction-sections y -fdata-sections.
  • Usa Proguard para reducir tu código y recursos.

  • Usa Gradle 4.4 o versiones posteriores para generar archivos DEX más pequeños.

API de instalación dividida de Play Core

Puede resultar difícil optimizar la experiencia de Google Play Instant para que tu juego se ajuste a un solo APK de 10 MB, incluso después de aplicar las recomendaciones sobre cómo reducir el tamaño del APK. Para enfrentar este desafío, puedes dividir tu juego en varios APK. Los jugadores comienzan por descargar el APK base principal y, mientras juegan, se van agregando los demás APK divididos en segundo plano.

Por ejemplo, el APK base puede contener el motor de juego principal y los elementos necesarios para que aparezca la pantalla de carga. Mientras se inicia el APK base, la pantalla de carga inmediatamente solicita un APK dividido adicional que contiene los datos del juego y los niveles. Una vez que el APK dividido está disponible, puede cargar sus elementos en el motor de juego y ofrecerle al usuario el contenido necesario para comenzar a jugar.

Solicitud de instalación

En algún punto de la experiencia de Google Play Instant, el juego debería solicitarle al usuario que instale la versión completa en su dispositivo. Para ello, usa el método showInstallPrompt() en las API de Google para Android.

Para obtener más información sobre cómo y cuándo deberías solicitarle al usuario que realice la instalación, consulta Prácticas recomendadas de UX para juegos en Google Play Instant.

Recursos adicionales

Obtén más información sobre Google Play Instant en estos recursos adicionales:

Codelab: Compila tu primera app instantánea
Agrega compatibilidad para Google Play Instant a una app existente.
Codelab: Compila una app con múltiples funciones
Modulariza una app con múltiples funciones.