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

As etapas de configuração de 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 o Unity (com ou sem o plug-in do Unity para o Google Play Instant), o Cocos2D, o Android Studio ou seu próprio mecanismo personalizado.

Este guia presume que você já sabe o tipo de experiência de jogo que quer oferecer. Se você 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 possa 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 Quero testar 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 de versão da experiência instantânea do seu jogo precisa ser menor que o código de versão do jogo instalável. Com o controle de versões do seu app dessa forma, os jogadores podem migrar da experiência do Google Play Instant 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 seguir o esquema de controle de versões recomendado, adote 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 app instalável para um número alto, como 1.000. Isso garante que exista espaço suficiente para que o número da versão de experiência instantânea do seu app possa crescer.

Não há problema em desenvolver seu jogo instantâneo e seu jogo instalável em dois projetos do Android Studio separados. No entanto, se você fizer isso, precisará realizar as seguintes etapas para publicar seu jogo no Google Play:

  1. Use o mesmo nome de pacote nos dois projetos do Android Studio.
  2. No Google Play Console, faça 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 esse 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 mais recente, o Android desativará a compatibilidade com texto simples no jogo por padrão.

No entanto, se o 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 seguinte snippet de código:

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 seja destinado ao 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 seguinte snippet de código:

<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 do app

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 da experiência instantânea é coletado da lixeira 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 novamente o download da sua experiência instantânea para interagir com ela.

Caso o sistema esteja 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 seja preservado.

Reduzir o tamanho do app

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 dele. Esta 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. Com 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.
  • Android GPU Inspector (link em inglês): veja o efeito da redução da resolução da textura no tamanho do 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 do seu jogo e coloque-a em um ou mais módulos de recursos, 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 que têm a mesma qualidade de 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).
  • 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 tenha suporte a experiências instantâneas, adicione a lógica mostrada nas seções a seguir para proporcionar uma boa experiência ao usuário.

Suporte a arquiteturas de 64 bits

Os apps publicados no Google Play precisam ter suporte a arquiteturas de 64 bits. A adição de uma versão de 64 bits do seu app proporciona melhorias de desempenho e faz com que ele só possa ser executado em hardware com 64 bits. Saiba mais sobre o suporte a 64 bits.

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 pode 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 ao usuário, é importante que o progresso do jogador seja transferido da experiência instantânea para a versão completa do seu jogo.

Se o jogo especificar o valor 2 para uma targetSandboxVersion, o progresso do jogador será transferido automaticamente para a versão completa. Caso contrário, você precisará transferir os dados relacionados ao progresso do jogador manualmente. Para isso, use a API Cookie: app de amostra (link em inglês).

Outros recursos

Saiba mais sobre o Google Play Instant nestes recursos:

Codelab: como criar seu primeiro app instantâneo
Adicione compatibilidade com o Google Play Instant a um app existente.
Codelab: como criar um app instantâneo com vários recursos
Modularize um app com vários recursos.