Publicação gerenciada do Google Play

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

Com a instalação gerenciada do 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 do pacote de apps do Windows (WAB).

Antes de começar

Integre o SDK do Google Play Games ao seu jogo.

Empacote seu jogo como um arquivo WAB

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

  1. Faça o download da ferramenta de publicação do 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 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 seu jogo. Esse é o identificador exclusivo que será 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 de versão do jogo. Ela pode ser uma string arbitrária, mas precisa ser exclusiva em todos os WABs enviados para o 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 de arquivo ou padrões 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 expressão regular: 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 arquivos 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 apenas se ele ainda não estiver presente, preservando as mudanças em um arquivo existente.
        • MODIFIED_ON_DEVICE: use esse atributo para arquivos que precisam ser atualizados, mas podem ser modificados no dispositivo após a instalação. O sistema faz o download do 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 arquivos para esse 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 expressão regular: 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 de 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 ao lado do qual ele está definido, permitindo que você especifique 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 é 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": executar como administrador.
        • "false": executar 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": executar como administrador.
        • "false": executar como o usuário atual. Esse é o padrão se não for especificado.
      • operation-identifier: uma string exclusiva para identificar uma 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 realizar uma operação update-registry, defina requiresElevation="true" na install-operation pai com base na baseKey usada:
          • 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 ao gravar 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 para todos os usuários. Defina requiresElevation="true" ao modificar perfis diferentes 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 na baseKey principal.
        • VALUE_NAME: especifica o nome da entrada de dados que você quer modificar na subchave designada.
        • REGISTRY_VALUE_TYPE: esse atributo 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. Lembre-se de usar barras / para separadores de diretório e de escapar caracteres especiais de expressão regular com uma barra invertida \. 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>
    • Corresponder a 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 do 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 a 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 a 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 todos os .ogg arquivos que estão localizados nos diretórios music/ ou sfx/, mas não em outros lugares. Corresponde a music/level1.ogg ou sfx/explosion.ogg, mas não voice/intro.ogg.

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

    Exemplo de arquivo de configuração de publicação do 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 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 existente 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 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 será exibida no terminal:

    Building bundle: [====       ] 40%
    

    Em caso de sucesso, você 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