Converter um jogo já existente em um jogo instantâneo

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

É possível 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 um usuário toca no botão Testar agora na Play Store ou no botão Jogue agora no app Google Play Games. Também é possível iniciar essa atividade diretamente usando a API de link direto.

Definir os códigos de versão corretos

O código da versão da experiência instantânea do seu jogo precisa ser menor do que o código da versão do jogo instalável. Com o controle de versão do seu app dessa forma, os jogadores podem migrar da experiência instantânea do Google Play para fazer o download e instalar o jogo no dispositivo. O framework do Android considera essa transição como uma atualização de app.

Para garantir que você siga o esquema de controle de versão recomendado, use uma destas estratégias:

  • 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 que o número da versão de experiência do seu app instantâneo possa crescer.

Não há problema em desenvolver seu jogo instantâneo e seu jogo instalável em dois projetos separados do Android Studio. No entanto, se você fizer isso, será necessário fazer o seguinte para publicar seu jogo no Google Play:

  1. Usar o mesmo nome de pacote nos dois projetos do Android Studio.
  2. No Google Play Console, faça o upload das duas variantes para o mesmo app.

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

Compatibilidade com o ambiente de execução

Como outros apps, os jogos no Google Play Instant são executados em um sandbox limitado no dispositivo. Para que este ambiente de execução seja compatível, conclua as etapas mostradas nas seções a seguir.

Cancelar uso de tráfego de texto simples

Os jogos no Google Play Instant não são compatíveis com o tráfego HTTP. Se o jogo for destinado ao Android 9 (API de nível 28) ou posterior, o Android desativará o suporte a texto simples no jogo por padrão.

No entanto, se seu jogo for destinado ao Android 8.1 (API de nível 27) ou versões anteriores, será necessário criar um arquivo de Configuração de segurança de rede. Nesse arquivo, defina cleartextTrafficPermitted como false, conforme mostrado no snippet de código a seguir.

res/xml/network_security_config.xml

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="false">
            <domain includeSubdomains="true">secure.example.com</domain>
        </domain-config>
    </network-security-config>
    

Atualizar a versão do sandbox de destino

Atualize o arquivo AndroidManifest.xml do seu jogo instantâneo para que ele segmente o ambiente do sandbox compatível com o Google Play Instant. É possível concluir essa atualização adicionando o atributo android:targetSandboxVersion ao elemento <manifest> do seu jogo, conforme mostrado no snippet de código a seguir.

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

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

Não depender da presença de um cache ou de dados de aplicativos

O download da experiência instantânea permanece no dispositivo do usuário até que o cache da experiência seja apagado, o que ocorre em uma das seguintes situações:

  • O cache de experiência instantânea é coletado como lixo porque o dispositivo está com pouca memória disponível.
  • O usuário reinicia o dispositivo.

Se um desses processos ocorrer, é necessário que o usuário faça o download da sua experiência instantânea novamente para interagir com ela.

Se o sistema estiver com pouco espaço de armazenamento, é possível que os dados do usuário da experiência instantânea sejam removidos do armazenamento interno. Portanto, é recomendável sincronizar periodicamente os dados do usuário com o servidor do jogo para que o progresso do usuário seja preservado.

Reduza o tamanho do APK

Diferentemente de outros tipos de apps, os jogos no Google Play Instant têm um limite de tamanho de download de 15 MB. Para criar um jogo desse tamanho, talvez seja necessário refatorar a lógica do 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 visualização, é possível determinar o número de bytes com que cada elemento está contribuindo para 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 da redução da resolução da textura no arquivo sem precisar recompilar seu jogo.

Técnicas

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

  • Extraia parte da lógica de seu jogo e coloque-a em um ou mais módulos de recursos dinâmicos, que não contam para o limite de tamanho.
  • Reduza a resolução das texturas do jogo.
  • Considere usar o formato WebP, especialmente se você estiver usando texturas não compactadas na GPU. O formato WebP cria imagens com a mesma qualidade das imagens JPEG, mas 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 (links em inglês).
  • Compacte ou reutilize sons e músicas.
  • Use diferentes sinalizações de compilação para ajudar a diminuir seu arquivo binário:
    • -fvisibility=hidden: o mais importante. Em cmake, é possível especificá-lo da seguinte maneira:
      $ set_target_properties(your-target PROPERTIES CXX_VISIBILITY_PRESET hidden)
          
    • -Oz: também importante para reduzir o tamanho. Se você compilar usando gcc, use -Os.
    • -flto: às vezes diminui o tamanho do arquivo.
    • Sinalizações do vinculador: use --gc-sections com sinalizações do compilador, como -ffunction-sections e -fdata-sections.
  • Use Proguard para reduzir o código e os recursos.
  • Use o Gradle 4.4 ou versões posteriores para gerar arquivos DEX menores.
  • Implemente a entrega de recursos na nuvem

Dividir um jogo grande em vários APKs

Pode ser difícil otimizar a experiência no Google Play Instant para fazer com que seu jogo caiba em um único APK de 15 MB, mesmo depois de implementar as recomendações de redução do tamanho do 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.

Adotar as práticas recomendadas de UX

Depois de configurar seu jogo para que ele seja compatível com experiências instantâneas, adicione a lógica mostrada nas seções a seguir para proporcionar uma boa experiência ao usuário.

Verificar se o jogo está executando a experiência instantânea

Se parte da lógica do seu jogo depender de o usuário estar envolvido na experiência instantânea, chame o método isInstantApp(). Esse método retornará true se o processo em execução no momento for uma experiência instantânea.

Ao fazer essa verificação, é possível determinar se o app precisa ser executado em um ambiente de execução limitado ou aproveitar os recursos da plataforma.

Exibir um aviso de instalação

Se você tiver criado uma experiência de teste do Google Play Instant, em algum momento o jogo solicitará que o jogador instale a versão completa no dispositivo. Para fazer isso, use o método showInstallPrompt() nas APIs do 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.

Transferir dados para uma experiência instalada

Se um jogador gostar da sua experiência de teste, ele poderá decidir instalar a versão completa do jogo. Para proporcionar uma boa experiência do usuário, é importante que o progresso do jogador seja transferido da sua experiência instantânea para a versão completa do seu jogo.

Se o jogador estiver usando um dispositivo que executa o Android 8.0 (API de nível 26) ou posterior e especificar um targetSandboxVersion de 2, o progresso do jogador será transferido automaticamente para a versão completa do seu jogo. Caso contrário, é necessário transferir os dados relacionados ao progresso do jogador manualmente. Para fazer isso, use uma das seguintes APIs:

  • Para jogadores que usam dispositivos que executam o Android 8.0 (API de nível 26) e versões posteriores, use a API de cookies - app de amostra
  • Se os players puderem interagir com sua experiência em dispositivos que executam o Android 7.1 (API de nível 25) ou inferior, adicione suporte à Storage API: app de amostra

Outros recursos

Saiba mais sobre o Google Play Instant nestes recursos:

Codelab: como criar seu primeiro app instantâneo (link em inglês)
Faça com que um app existente fique compatível com o Google Play Instant.
Codelab: como criar um app instantâneo com vários recursos (link em inglês)
Modularize um app com vários recursos.