Publicação gerenciada do Google Play

Este documento mostra como publicar seu jogo no Google Play Games no PC usando a instalação gerenciada pelo Google Play.

Com a instalação gerenciada pelo Google Play, o Google Play gerencia a instalação, a atualização e a desinstalação do jogo usando os arquivos e metadados que você fornece em um arquivo de pacote de app do Windows (WAB).

Antes de começar

Integre o SDK do Google Play Games ao seu jogo.

Empacotar o jogo como um arquivo WAB

Para criar um arquivo WAB de instalação gerenciada pelo Google Play, siga estas etapas:

  1. Baixe a ferramenta de publicação do Google Play. É possível executar essa ferramenta na linha de comando do Windows ou no PowerShell.

  2. Crie o arquivo de configuração de publicação do Google Play com qualquer nome. Por exemplo, play_publishing_config.xml com o seguinte formato:

    <?xml version="1.0" encoding="UTF-8"?>
    <play-publishing-config version="1.0">
      <!-- Application metadata: This section contains basic information about your game. -->
      <application>
        <package-name>PACKAGE_NAME</package-name>
        <version-name>VERSION_NAME</version-name>
      </application>
    
      <!-- Game files: This section specifies which game files to include in the bundle and how to treat them. -->
      <game-files>
        <file-set>
          <root-folder-path>PATH_TO_ROOT_FOLDER</root-folder-path>
          <!-- absolute or relative to the parent directory of the config xml -->
          <!-- Exclusions: A list of files or folders to exclude from the bundle.
               This is useful for removing development files, temporary data, or redundant assets. -->
          <exclusions>
            <file-path>REGEX_PATTERN_OF_EXCLUDED_FILES</file-path>
            <file-path>PATH_TO_BE_EXCLUDED</file-path>
          </exclusions>
    
          <!-- File attributes: Define special handling for certain files during installation and updates. -->
          <file-attribute value=FILE_ATTRIBUTE_VALUE>
            <file-path>PATH_TO_FILE</file-path>
            <file-path>REGEX_PATTERN_OF_FILE_ATTRIBUTE_FILES</file-path>
          </file-attribute>
        </file-set>
      </game-files>
    
      <!-- This file represents the startup process for this game. Google Play Games for PC should start
          this process when user clicks on "Play" on this game. -->
      <launch-command>
        <path>PATH_TO_LAUNCH_FILE</path>
        <arguments>ARGUMENTS</arguments>
      </launch-command>
    
      <!-- Lifecycle operations: Custom actions to be performed during the game's installation and uninstallation. -->
      <lifecycle-operations>
        <!-- Install operations: These actions run when the game is installed. 'requiresElevation="true"'
            will trigger a UAC prompt for administrator rights. There are three types of install
            operations that can be specified. An instance of each is listed below. -->
        <install-operation requiresElevation=INSTALL_OPERATION_REQUIRES_ELEVATION>
          <operation-identifier>OPERATION_IDENTIFIER_STRING</operation-identifier>
          <execute-file>
            <path>PATH_TO_INSTALL_EXECUTE_FILE</path>
            <arguments>ARGUMENTS</arguments>
          </execute-file>
        </install-operation>
    
        <install-operation requiresElevation=INSTALL_OPERATION_REQUIRES_ELEVATION>
          <operation-identifier>OPERATION_IDENTIFIER_STRING</operation-identifier>
          <update-registry baseKey=BASE_KEY>
            <sub-key>SUB_KEY_PATH</sub-key>
            <value-name>VALUE_NAME</value-name>
            <value type=REGISTRY_VALUE_TYPE>VALUE_TEXT</value>
          </update-registry>
        </install-operation>
    
        <!-- Uninstall operations: These actions run before the game is uninstalled. -->
        <uninstall-operation requiresElevation=UNINSTALL_OPERATION_REQUIRES_ELEVATION>
          <execute-file>
            <path>PATH_TO_UNINSTALL_EXECUTE_FILE</path>
            <arguments>ARGUMENTS</arguments>
          </execute-file>
        </uninstall-operation>
      </lifecycle-operations>
    </play-publishing-config>

    Substitua o seguinte:

    • PACKAGE_NAME: o nome do pacote do jogo. Esse é o identificador exclusivo associado ao seu jogo no Google Play. Por exemplo, com.yourcompany.yourgame. O nome do pacote precisa seguir estas regras:
      • Ele precisa ter pelo menos dois segmentos (um ou mais pontos).
      • Cada segmento precisa começar com uma letra.
      • Todos os caracteres precisam ser alfanuméricos ou um sublinhado ([a-zA-Z0-9_]).
    • VERSION_NAME: a string da versão do jogo. Ela pode ser uma string arbitrária, mas precisa ser exclusiva em todos os WABs enviados para seu jogo. Por exemplo: 1.0, 1.0.1-beta, 2025.11.24, v1.rc1.
    • PATH_TO_ROOT_FOLDER: o caminho para a pasta raiz que contém os arquivos do jogo. Todos os arquivos nessa pasta, exceto os mencionados nas exclusões, são adicionados ao pacote. Esse caminho pode ser absoluto ou relativo ao diretório que contém o arquivo play_publishing_config.xml.

    • exclusions: (opcional) especifica caminhos ou padrões de arquivo para arquivos em PATH_TO_ROOT_FOLDER a serem excluídos do pacote. É possível incluir vários elementos file-path no elemento exclusions. Um caminho pode ser representado de duas maneiras:

      • Como um caminho de arquivo: caminho para o arquivo a ser excluído.
      • Como uma string de regex: todos os arquivos que correspondem à string de expressão regular são excluídos do pacote. Use a sintaxe RE2.
    • file-attribute: (opcional) define atributos para arquivos específicos ou que correspondem a um padrão de expressão regular.

      • FILE_ATTRIBUTE_VALUE: pode ser um dos seguintes:
        • SKIP_UPDATE: durante uma atualização, esse atributo informa ao sistema para copiar o arquivo somente se ele ainda não estiver presente, preservando as mudanças em um arquivo existente.
        • MODIFIED_ON_DEVICE: use isso para arquivos que precisam ser atualizados, mas podem ser modificados no dispositivo após a instalação. O sistema baixa o novo arquivo completo e substitui a versão instalada durante uma atualização. Se esse arquivo for diferente da versão instalada durante as verificações de integridade da instalação, ela não será considerada corrompida.
      • file-path: identifica os arquivos desse atributo. É possível incluir vários elementos file-path em cada elemento file-attribute. Cada caminho pode ser representado de duas maneiras:
        • Como um caminho de arquivo: caminho para o arquivo a ser associado a esse atributo.
        • Como uma string de regex: todos os arquivos que correspondem à string de expressão regular são associados ao valor do atributo. Use a sintaxe RE2.
    • PATH_TO_LAUNCH_FILE: caminho para o arquivo executável usado para iniciar o jogo.

    • ARGUMENTS: (opcional) argumentos da linha de comando. O elemento <arguments> é usado para transmitir argumentos a um arquivo executável especificado em <launch-command>, <install-operation> ou <uninstall-operation>. Cada uso do elemento <arguments> se aplica apenas ao executável em que ele é definido, permitindo especificar argumentos diferentes para executáveis diferentes.

      • Se um executável tiver vários argumentos, separe-os com um espaço.
      • Adicione -- ou - aos argumentos se o executável exigir isso. Exemplo:
        <arguments>--package_name --version_name</arguments>
    • lifecycle-operations: (opcional) ações personalizadas a serem realizadas durante a instalação ou desinstalação do jogo.

      • install-operation: uma ação a ser executada quando o jogo for instalado. É possível especificar dois tipos de operações de instalação: execute-file e update-registry.
      • uninstall-operation: uma ação a ser executada antes da desinstalação do jogo. As operações update-registry são revertidas automaticamente durante a desinstalação.
      • INSTALL_OPERATION_REQUIRES_ELEVATION: indica se a operação de instalação precisa ser executada com privilégios de administrador.

        • "true": execute como administrador.
        • "false": executa como o usuário atual. Esse é o padrão se não for especificado.
      • UNINSTALL_OPERATION_REQUIRES_ELEVATION: indica se a operação de desinstalação precisa ser executada com privilégios de administrador.

        • "true": execute como administrador.
        • "false": executa como o usuário atual. Esse é o padrão se não for especificado.
      • operation-identifier: uma string exclusiva para identificar um install-operation.

      • execute-file: executa um arquivo executável.

        • PATH_TO_INSTALL_EXECUTE_FILE: caminho para um executável a ser executado durante a instalação.
        • PATH_TO_UNINSTALL_EXECUTE_FILE: caminho para um executável a ser executado antes da desinstalação.
      • update-registry: cria ou atualiza uma entrada do registro do Windows.

        • BASE_KEY: define a chave raiz a ser usada no registro do Windows. Valores aceitos: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA e HKEY_USERS. Ao executar uma operação update-registry, defina requiresElevation="true" no install-operation pai com base no baseKey usado:
          • HKEY_LOCAL_MACHINE ou HKEY_CURRENT_CONFIG: defina requiresElevation="true".
          • HKEY_CURRENT_USER: requiresElevation="true" não é necessário.
          • HKEY_CLASSES_ROOT: defina requiresElevation="true" somente se estiver gravando em seções de toda a máquina. Não é necessário para seções específicas do usuário.
          • HKEY_USERS: contém perfis de todos os usuários. Defina requiresElevation="true" ao modificar perfis que não sejam do usuário atual (por exemplo, outros usuários ou .DEFAULT).
        • SUB_KEY_PATH: representa o caminho para uma chave específica no Registro do Windows, aninhada em baseKey principal.
        • VALUE_NAME: especifica o nome da entrada de dados que você quer modificar na subchave designada.
        • REGISTRY_VALUE_TYPE: especifica o tipo de dados do valor que está sendo gravado no registro. Os valores aceitos são STRING para uma string ou DWORD para um número de 32 bits.
        • VALUE_TEXT: dados a serem armazenados na chave do registro.

    Como usar expressões regulares

    É possível usar expressões regulares de sintaxe RE2 em tags file-path para aplicar exclusões ou atributos de arquivo a um grupo de arquivos. Use barras / como separadores de diretório e barras invertidas \ para fazer o escape de caracteres especiais de expressão regular. Por exemplo, use \. para corresponder a um ponto literal . ou \d para corresponder a um dígito.

    Confira alguns exemplos comuns:

    • Corresponder a todos os arquivos com uma extensão específica (por exemplo, .log) em qualquer diretório

      Use .*\.log para corresponder a qualquer caminho que termine com .log, como game.log ou logs/errors.log.

      <file-path>.*\.log</file-path>
    • Corresponder a todos os arquivos e subdiretórios em uma pasta específica (por exemplo, "temp")

      Use temp/.* para corresponder a todos os caminhos que começam com temp/, como temp/data.txt ou temp/saves/file.sav.

      <file-path>temp/.*</file-path>
    • Encontrar arquivos que correspondem a um padrão em uma pasta específica

      Use assets/level\d\.dat para corresponder a assets/level1.dat, assets/level2.dat, mas não assets/other.dat.

      <file-path>assets/level\d\.dat</file-path>
    • Corresponder a um nome de pasta quando ele aparece em qualquer lugar no caminho

      Use .*/cache/.* para corresponder a arquivos em qualquer diretório chamado cache, como game/cache/file.txt ou temp/cache/other.log.

      <file-path>.*/cache/.*</file-path>
    • Corresponder arquivos com uma de várias extensões (por exemplo, .ini, .cfg, .sav)

      Use .*\.(ini|cfg|sav) para corresponder a qualquer arquivo que termine em .ini, .cfg ou .sav, como settings.ini, config.cfg ou saves/slot1.sav.

      <file-path>.*\.(ini|cfg|sav)</file-path>
    • Corresponder arquivos com uma extensão específica em diretórios específicos (por exemplo, .ogg em music/ ou sfx/)

      Use (music|sfx)/.*\.ogg para corresponder a qualquer arquivo .ogg localizado nos diretórios music/ ou sfx/, mas não em outros lugares. Corresponde a music/level1.ogg ou sfx/explosion.ogg, mas não a voice/intro.ogg.

      <file-path>(music|sfx)/.*\.ogg</file-path>

    Exemplo de arquivo de configuração de publicação do Google Play

    Confira um exemplo de play_publishing_config.xml para um jogo chamado TestGame:

    <?xml version="1.0" encoding="UTF-8"?>
    <play-publishing-config version="1.0">
      <application>
        <package-name>com.test.package</package-name>
        <version-name>1.0</version-name>
      </application>
    
      <game-files>
        <file-set>
          <root-folder-path>C:\Users\Username\game-files</root-folder-path>
          <exclusions>
            <file-path>mock_game\d\.exe</file-path> <!-- exclude files using a regex -->
            <file-path>deprecated_graphics</file-path> <!-- exclude a folder -->
            <file-path>.*\.log</file-path> <!-- recursively exclude all files with .log extension -->
          </exclusions>
    
          <file-attribute value="SKIP_UPDATE">
            <file-path>settings.ini</file-path>
          </file-attribute>
    
          <file-attribute value="MODIFIED_ON_DEVICE">
            <file-path>game_assets\d\.zip</file-path> <!-- define the path using regex -->
          </file-attribute>
        </file-set>
      </game-files>
    
      <launch-command>
        <path>launcher_test_game.exe</path>
        <arguments>--launch-arg</arguments> <!-- optional -->
      </launch-command>
    
      <lifecycle-operations>
        <install-operation requiresElevation="true">
          <operation-identifier>elevated-execute-file</operation-identifier>
          <execute-file>
            <path>install_file.exe</path>
            <arguments>--arg</arguments> <!-- optional -->
          </execute-file>
        </install-operation>
    
        <install-operation requiresElevation="true">
          <operation-identifier>elevated-update-registry</operation-identifier>
          <update-registry baseKey="HKEY_LOCAL_MACHINE">
            <sub-key>SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\TestGame</sub-key>
            <value-name>InstallLocation</value-name>
            <value type="STRING">C:\Program Files\TestGame</value>
          </update-registry>
        </install-operation>
    
        <uninstall-operation requiresElevation="true">
          <execute-file>
            <path>uninstall.exe</path>
            <arguments>--test-arg</arguments> <!-- optional -->
          </execute-file>
        </uninstall-operation>
      </lifecycle-operations>
    </play-publishing-config>
  3. Execute a ferramenta de publicação do Google Play na linha de comando do Windows ou no PowerShell usando o comando build-bundle:

    playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH
    

    Para substituir um arquivo WAB com o mesmo nome, use o argumento --force.

    playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH --force
    

    Substitua o seguinte:

    • PLAY_PUBLISHING_CONFIG_PATH: o caminho para a configuração de publicação do Play. Por exemplo, path\to\play_publishing_config.xml.
    • WAB_OUTPUT_PATH: o caminho para o arquivo WAB. Por exemplo, path\to\output_bundle.wab.

    Como usar a ferramenta de publicação do Google Play

    Se você tiver playpublishingtool.exe, play_publishing_config.xml e os arquivos do jogo em game_files/ no diretório de trabalho atual:

    .\
    ├── game_files/
    ├── play_publishing_config.xml
    ├── playpublishingtool.exe
    

    Para criar pmi_bundle.wab no mesmo diretório, execute:

    playpublishingtool.exe build-bundle --input=play_publishing_config.xml --output=pmi_bundle.wab
    

    Enquanto a ferramenta cria o pacote, uma barra de progresso aparece no terminal:

    Building bundle: [====       ] 40%
    

    Em caso de êxito, você vai ver uma saída semelhante a esta:

    Building bundle: [===========] 100%
    Successfully built the managed install bundle at pmi_bundle.wab
    

    Encontre o arquivo WAB na pasta:

      .\
      ├── game_files/
      ├── pmi_bundle.wab
      ├── play_publishing_config.xml
      ├── playpublishingtool.exe