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:
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.
Crie o arquivo de configuração de publicação do 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 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 arquivoplay_publishing_config.xml.exclusions: (opcional) especifica caminhos de arquivo ou padrões 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 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 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 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-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": 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 umainstall-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 realizar uma operaçãoupdate-registry, definarequiresElevation="true"nainstall-operationpai com base nabaseKeyusada:HKEY_LOCAL_MACHINEouHKEY_CURRENT_CONFIG: DefinarequiresElevation="true".HKEY_CURRENT_USER:requiresElevation="true"não é necessário.HKEY_CLASSES_ROOT: DefinarequiresElevation="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. DefinarequiresElevation="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 nabaseKeyprincipal.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ã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. 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\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>
- Corresponder a 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 do 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 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,.cfgou.sav, comosettings.ini,config.cfgousaves/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)/.*\.oggpara corresponder a todos os.oggarquivos que estão localizados nos diretóriosmusic/ousfx/, mas não em outros lugares. Corresponde amusic/level1.oggousfx/explosion.ogg, mas nãovoice/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.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 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.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 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