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:
Baixe a ferramenta de publicação do Google Play. É possível executar essa ferramenta na linha de comando do Windows ou no PowerShell.
Crie o arquivo de configuração de publicação do Google Play com qualquer nome. Por exemplo,
play_publishing_config.xmlcom 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 arquivoplay_publishing_config.xml.exclusions: (opcional) especifica caminhos ou padrões de arquivo para arquivos emPATH_TO_ROOT_FOLDERa serem excluídos do pacote. É possível incluir vários elementosfile-pathno elementoexclusions. 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 elementosfile-pathem cada elementofile-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-fileeupdate-registry.uninstall-operation: uma ação a ser executada antes da desinstalação do jogo. As operaçõesupdate-registrysã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 uminstall-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_DATAeHKEY_USERS. Ao executar uma operaçãoupdate-registry, definarequiresElevation="true"noinstall-operationpai com base nobaseKeyusado:HKEY_LOCAL_MACHINEouHKEY_CURRENT_CONFIG: definarequiresElevation="true".HKEY_CURRENT_USER:requiresElevation="true"não é necessário.HKEY_CLASSES_ROOT: definarequiresElevation="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. DefinarequiresElevation="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 embaseKeyprincipal.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ãoSTRINGpara uma string ouDWORDpara 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-pathpara 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\dpara 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
.*\.logpara corresponder a qualquer caminho que termine com.log, comogame.logoulogs/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 comtemp/, comotemp/data.txtoutemp/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\.datpara corresponder aassets/level1.dat,assets/level2.dat, mas nãoassets/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 chamadocache, comogame/cache/file.txtoutemp/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,.cfgou.sav, comosettings.ini,config.cfgousaves/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)/.*\.oggpara corresponder a qualquer arquivo.ogglocalizado nos diretóriosmusic/ousfx/, mas não em outros lugares. Corresponde amusic/level1.oggousfx/explosion.ogg, mas não avoice/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.xmlpara um jogo chamadoTestGame:<?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>
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.xmle os arquivos do jogo emgame_files/no diretório de trabalho atual:.\ ├── game_files/ ├── play_publishing_config.xml ├── playpublishingtool.exe
Para criar
pmi_bundle.wabno 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