Converter um jogo existente em um app instantâneo

As etapas para configuração de apps para execução no Google Play Instant, explicadas em Criar seu primeiro app instantâneo também se aplicam a jogos. Este guia destaca algumas etapas de configuração específicas para jogos.

Você pode desenvolver jogos para o Google Play Instant usando Unity (link em inglês) (com ou sem o plug-in do Unity para o Google Play Instant), Cocos2D, Android Studio ou seu próprio mecanismo personalizado.

Este guia presume que você já sabe o tipo de experiência de jogo que você quer oferecer. Se quiser ver algumas ideias e as práticas recomendadas para criar jogos de alta qualidade, leia Práticas recomendadas da UX para jogos no Google Play Instant.

Além disso, antes de publicar um jogo que pode ser executado no Google Play Instant, é importante analisar a Lista de verificação de requisitos técnicos.

Uma atividade que inclui o seguinte filtro de intent se torna o ponto de entrada para a experiência do 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>
    

Essa atividade é iniciada quando o usuário toca no botão Testar agora na Play Store ou no app Play Games. Você também pode iniciar essa atividade diretamente usando a API de link direto.

Se quiser que os jogadores acessem seu jogo usando um URL seu, você também pode adicionar links de app. Contudo, se você adicionar links de app, também precisará adicionar um URL padrão que corresponda exatamente a um dos URLs de link do app.

O snippet de código a seguir mostra um exemplo de combinação de links de app e URL padrão:

<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 versão

O código de versão do app instantâneo do seu jogo precisa ser inferior ao código de versão do jogo instalável. Espera-se que os jogadores passem da experiência no Google Play Instant para o download e a instalação do jogo nos dispositivos deles. O framework do Android considera essa transição como uma atualização de app.

Para garantir que você siga esse esquema de controle de versões, use uma das estratégias a seguir:

  • Reinicie os códigos de versão para a experiência no Google Play Instant em 1.
  • Aumente o código de versão do APK instalável para um número alto, como 1.000, para garantir que exista espaço suficiente para aumentar o número da versão do seu app instantâneo.

Para ver mais detalhes sobre como configurar a versão do seu app, consulte Controlar versões do app.

Versão do sandbox de destino

Como outros apps, os jogos no Google Play Instant são executados em um sandbox limitado no dispositivo. O arquivo AndroidManifest.xml do app instantâneo precisa ser atualizado para ser destinado a esse sandbox. Você pode realizar essa atualização adicionando o atributo android:targetSandboxVersion ao elemento <manifest>, conforme mostrado no snippet de código a seguir:

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

Se você estiver usando o Gradle 3.0 ou versão posterior para criar a versão para Android do seu jogo, é possível aplicar os plug-ins com.android.feature e com.android.instantapps para os módulos de recursos. Esses plug-ins adicionam automaticamente os atributos necessários ao arquivo de manifesto do módulo.

Para ver mais informações, consulte a documentação no atributo targetSandboxVersion.

Redução do tamanho do APK

Diferentemente de outros tipos de apps, os jogos no Google Play Instant têm um limite de tamanho de download de 10 MB. Para criar um jogo com esse tamanho, pode ser necessário refatorar a lógica do seu jogo. Essa seção descreve algumas ferramentas e técnicas para ajudar a otimizar o tamanho do seu jogo.

Ferramentas

A lista de ferramentas a seguir pode ajudar a determinar o que está contribuindo para o tamanho do seu jogo:

  • APK Analyzer: fornece uma visão holística do conteúdo de um APK compilado. Usando essa visão, é possível determinar o número de bytes de cada elemento contribuindo com o tamanho geral. Use essa ferramenta para verificar rapidamente o tamanho dos recursos, da lógica e das bibliotecas nativas usados pelo jogo.
  • Bloaty McBloatface (link em inglês): mostra o perfil de tamanho de arquivos binários.
  • GAPID (link em inglês): veja o efeito do tamanho do arquivo reduzindo o tamanho de textura sem ter que recompilar o jogo.

Técnicas

Veja a seguir uma lista de técnicas que podem ser usadas para reduzir o tamanho do seu jogo:

  • Reduza a resolução das texturas do jogo.
  • Considere o uso do formato WebP (link em inglês), principalmente caso você esteja usando texturas não compactadas na GPU. O formato WebP cria imagens que têm a mesma qualidade que imagens JPEG, mas são de 15% a 30% menores. Embora seja mais demorado descompactar imagens WebP, esse tempo de descompressão ainda é significativamente menor que o tempo de download das texturas do jogo.

    O Google também integrou o formato a um mecanismo de jogo de código aberto (link em inglês).

  • Use apenas um subconjunto de sons, disponíveis no jogo instalável.

  • Use diferentes sinalizações de compilação para ajudar a diminuir seu arquivo binário:

    • -fvisibility=hidden: o mais importante. Em cmake, você pode especificá-lo da seguinte maneira:
      $ set_target_properties(your-target PROPERTIES CXX_VISIBILITY_PRESET hidden)
          
    • -Oz: também é importante para a redução de tamanho. Se você usa gcc na compilação, use -Os.
    • -flto: às vezes reduz o tamanho do arquivo.
    • Sinalizações de vinculador: use --gc-sections com sinalizações do compilador, como -ffunction-sections e -fdata-sections.
  • Use o Proguard para reduzir o código e os recursos.

  • Use o Gradle 4.4 ou versões posteriores para gerar arquivos DEX menores.

API Play Core Split Install

Pode ser difícil otimizar a experiência no Google Play Instant para fazer com que seu jogo caiba em um único APK de 10 MB, mesmo depois de implementar as recomendações para reduzir o tamanho de APK. Para enfrentar esse desafio, você pode dividir seu jogo em diversos APKs. Os jogadores começam fazendo o download do APK de base principal. Ao longo do jogo, os outros APKs divididos são disponibilizados para o jogo em segundo plano.

Por exemplo, o APK de base pode conter o mecanismo principal do jogo e os recursos necessários para exibir uma tela de carregamento. Quando o APK de base é iniciado, ele exibe a tela de carregamento e chama imediatamente um outro APK dividido que contém os dados do jogo e da fase. Quando o APK dividido é disponibilizado, ele pode carregar recursos no mecanismo do jogo e fornecer ao jogador o conteúdo necessário para começar a jogar.

Solicitação de instalação

Em algum momento da experiência no Google Play Instant, o jogo solicitará que o jogador instale a versão completa no dispositivo. Para fazer isso, use o método showInstallPrompt() em APIs Google para Android.

Para saber mais sobre como e quando solicitar a instalação, consulte Práticas recomendadas da UX para jogos no Google Play Instant.

Outros recursos

Saiba mais sobre o Google Play Instant nestes recursos:

Codelab: como criar seu primeiro app instantâneo (link em inglês)
Acrescente compatibilidade com o Google Play Instant a um app existente.
Codelab: como criar um app instantâneo com vários recursos (link em inglês)
Modularize um app com vários recursos.