En este documento, se muestra cómo publicar tu juego en Google Play Juegos para PC con la instalación administrada por Play.
Con la instalación administrada por Play, Google Play administra la instalación, la actualización y la desinstalación del juego con los archivos y los metadatos del juego que proporcionas en un archivo de paquete de aplicación para Windows (WAB).
Antes de comenzar
Integra el SDK de Google Play Juegos en tu juego.
Empaqueta tu juego como un archivo WAB
Para crear un archivo WAB de instalación administrada por Play, sigue estos pasos:
Descarga la herramienta de publicación de Play. Puedes ejecutar esta herramienta en la línea de comandos de Windows o en PowerShell.
Crea el archivo de configuración de publicación de Play con cualquier nombre. Por ejemplo,
play_publishing_config.xmlcon el siguiente 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>
Reemplaza lo siguiente:
PACKAGE_NAME: Es el nombre del paquete de tu juego. Es el identificador único que se asociará con tu juego en Google Play. Por ejemplo,com.yourcompany.yourgame. El nombre del paquete debe cumplir con las siguientes reglas:- Debe tener al menos dos segmentos (uno o más puntos).
- Cada segmento debe comenzar con una letra.
- Todos los caracteres deben ser alfanuméricos o un guion bajo (
[a-zA-Z0-9_]).
VERSION_NAME: Es la cadena de versión del juego. Puede ser cualquier cadena arbitraria, pero debe ser única en todos los archivos WAB subidos para tu juego. Por ejemplo:1.0,1.0.1-beta,2025.11.24yv1.rc1.PATH_TO_ROOT_FOLDER: Es la ruta de acceso a la carpeta raíz que contiene los archivos del juego. Todos los archivos de esta carpeta, excepto los que se mencionan en las exclusiones, se agregan al paquete. Esta ruta de acceso puede ser absoluta o relativa al directorio que contiene el archivoplay_publishing_config.xml.exclusions: (Opcional) Especifica rutas de acceso o patrones de archivos dentro dePATH_TO_ROOT_FOLDERpara excluir del paquete. Puedes incluir varios elementosfile-pathdentro del elementoexclusions. Una ruta se puede representar de dos maneras:- Como ruta de acceso a un archivo: Es la ruta de acceso al archivo que se excluirá.
- Como una cadena de regex: Todos los archivos que coincidan con la cadena de expresión regular se excluyen del paquete. Usa la sintaxis RE2.
file-attribute: (Opcional) Define atributos para archivos específicos o archivos que coinciden con un patrón de expresión regular.FILE_ATTRIBUTE_VALUE: Puede ser uno de los siguientes:SKIP_UPDATE: Durante una actualización, este atributo le indica al sistema que copie el archivo solo si aún no está presente, y que conserve los cambios en un archivo existente.MODIFIED_ON_DEVICE: Usa este valor para los archivos que se deben actualizar, pero que se podrían modificar en el dispositivo después de la instalación. Durante una actualización, el sistema descarga el archivo nuevo completo y reemplaza la versión instalada. Si este archivo es diferente de la versión instalada durante las verificaciones de integridad de la instalación, no se considera que la instalación esté dañada.
file-path: Identifica los archivos de este atributo. Puedes incluir varios elementosfile-pathdentro de cada elementofile-attribute. Cada ruta se puede representar de dos maneras:- Como ruta de acceso al archivo: Es la ruta de acceso al archivo con el que se asociará este atributo.
- Como una cadena de regex: Todos los archivos que coincidan con la cadena de expresión regular se asocian con el valor del atributo. Usa la sintaxis RE2.
PATH_TO_LAUNCH_FILE: Es la ruta de acceso al archivo ejecutable que se usa para iniciar el juego.ARGUMENTS: (Opcional) Argumentos de la línea de comandos. El elemento<arguments>se usa para pasar argumentos a un archivo ejecutable especificado en<launch-command>,<install-operation>o<uninstall-operation>. Cada uso del elemento<arguments>se aplica solo al ejecutable junto al que se define, lo que te permite especificar diferentes argumentos para diferentes ejecutables.- Si un archivo ejecutable tiene varios argumentos, sepáralos con un espacio.
- Antepón los argumentos con
--o-si el ejecutable lo requiere. Ejemplo:<arguments>--package_name --version_name</arguments>
lifecycle-operations: (Opcional) Son acciones personalizadas que se realizan durante la instalación o desinstalación del juego.install-operation: Es una acción que se ejecuta cuando se instala el juego. Puedes especificar dos tipos de operaciones de instalación:execute-fileyupdate-registry.uninstall-operation: Es una acción que se ejecutará antes de que se desinstale el juego. Las operaciones deupdate-registryse revierten automáticamente durante la desinstalación.INSTALL_OPERATION_REQUIRES_ELEVATION: Indica si la operación de instalación debe ejecutarse con privilegios de administrador.- "true": Ejecutar como administrador.
- "false": Se ejecuta como el usuario actual. Este es el valor predeterminado si no se especifica.
UNINSTALL_OPERATION_REQUIRES_ELEVATION: Indica si la operación de desinstalación debe ejecutarse con privilegios de administrador.- "true": Ejecutar como administrador.
- "false": Se ejecuta como el usuario actual. Este es el valor predeterminado si no se especifica.
operation-identifier: Es una cadena única para identificar uninstall-operation.execute-file: Ejecuta un archivo ejecutable.PATH_TO_INSTALL_EXECUTE_FILE: Es la ruta de acceso a un ejecutable que se ejecutará durante la instalación.PATH_TO_UNINSTALL_EXECUTE_FILE: Es la ruta de acceso a un ejecutable que se ejecutará antes de la desinstalación.
update-registry: Crea o actualiza una entrada del registro de Windows.BASE_KEY: Define la clave raíz que se usará en el registro de Windows. Valores aceptados:HKEY_CLASSES_ROOT,HKEY_CURRENT_CONFIG,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_PERFORMANCE_DATAyHKEY_USERS. Cuando realices una operaciónupdate-registry, establecerequiresElevation="true"en el elemento principalinstall-operationsegún elbaseKeyque se use:HKEY_LOCAL_MACHINEoHKEY_CURRENT_CONFIG: EstablecerequiresElevation="true".HKEY_CURRENT_USER: No se necesitarequiresElevation="true".HKEY_CLASSES_ROOT: EstablecerequiresElevation="true"solo si escribes en secciones de toda la máquina; no es necesario para las secciones específicas del usuario.HKEY_USERS: Contiene perfiles para todos los usuarios. EstablecerequiresElevation="true"cuando modifiques perfiles que no sean el del usuario actual (p.ej., otros usuarios o.DEFAULT).
SUB_KEY_PATH: Representa la ruta de acceso a una clave específica dentro del Registro de Windows, anidada en la clave principalbaseKey.VALUE_NAME: Especifica el nombre de la entrada de datos que deseas modificar dentro de la subclave designada.REGISTRY_VALUE_TYPE: Este atributo especifica el tipo de datos del valor que se escribe en el registro. Los valores admitidos sonSTRINGpara una cadena oDWORDpara un número de 32 bits.VALUE_TEXT: Son los datos que se almacenarán en la clave del registro.
Cómo usar expresiones regulares
Puedes usar expresiones regulares de sintaxis RE2 en etiquetas
file-pathpara aplicar exclusiones o atributos de archivo a un grupo de archivos. Recuerda usar barras diagonales/para los separadores de directorios y caracteres especiales de expresiones regulares con una barra inversa\. Por ejemplo, usa\.para que coincida con un punto literal.o\dpara que coincida con un dígito.Estos son algunos ejemplos comunes:
- Coincide con todos los archivos que tienen una extensión específica (por ejemplo, .log) en cualquier directorio
Usa
.*\.logpara que coincida con cualquier ruta que termine con.log, comogame.logologs/errors.log.<file-path>.*\.log</file-path>
- Coincide con todos los archivos y subdirectorios dentro de una carpeta específica (por ejemplo, "temp")
Usa
temp/.*para que coincidan todas las rutas que comienzan contemp/, comotemp/data.txtotemp/saves/file.sav.<file-path>temp/.*</file-path>
- Cómo hacer coincidir archivos que coinciden con un patrón en una carpeta específica
Usa
assets/level\d\.datpara que coincida conassets/level1.datyassets/level2.dat, pero no conassets/other.dat.<file-path>assets/level\d\.dat</file-path>
- Coincide con el nombre de una carpeta cuando aparece en cualquier parte de la ruta de acceso
Usa
.*/cache/.*para hacer coincidir archivos en cualquier directorio llamadocache, comogame/cache/file.txtotemp/cache/other.log.<file-path>.*/cache/.*</file-path>
- Coincidir con archivos con una de varias extensiones (por ejemplo, .ini, .cfg, .sav)
Usa
.*\.(ini|cfg|sav)para que coincida con cualquier archivo que termine en.ini,.cfgo.sav, comosettings.ini,config.cfgosaves/slot1.sav.<file-path>.*\.(ini|cfg|sav)</file-path>
- Coincide con archivos con una extensión específica en directorios específicos (por ejemplo, .ogg en music/ o sfx/)
Usa
(music|sfx)/.*\.oggpara que coincida con cualquier archivo.oggque se encuentre en los directoriosmusic/osfx/, pero no en otros lugares. Coincide conmusic/level1.oggosfx/explosion.ogg, pero no convoice/intro.ogg.<file-path>(music|sfx)/.*\.ogg</file-path>
Ejemplo de archivo de configuración de publicación de Play
Este es un ejemplo de
play_publishing_config.xmlpara un juego llamadoTestGame:<?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>
Ejecuta la herramienta de publicación de Play en la línea de comandos de Windows o en PowerShell con el comando
build-bundle:playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH
Para reemplazar un archivo .wab existente con el mismo nombre, usa el argumento
--force.playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH --force
Reemplaza lo siguiente:
PLAY_PUBLISHING_CONFIG_PATH: Es la ruta de acceso a la configuración de publicación de Play. Por ejemplo,path\to\play_publishing_config.xml.WAB_OUTPUT_PATH: Es la ruta de acceso al archivo WAB. Por ejemplo,path\to\output_bundle.wab.
Cómo usar la herramienta de publicación de Play
Si tienes
playpublishingtool.exe,play_publishing_config.xmly los archivos de tu juego engame_files/en el directorio de trabajo actual, haz lo siguiente:.\ ├── game_files/ ├── play_publishing_config.xml ├── playpublishingtool.exe
Para crear
pmi_bundle.waben el mismo directorio, ejecuta lo siguiente:playpublishingtool.exe build-bundle --input=play_publishing_config.xml --output=pmi_bundle.wab
Mientras la herramienta compila el paquete, verás una barra de progreso en la terminal:
Building bundle: [==== ] 40%
Si se ejecuta de forma correcta, deberías ver un resultado similar al siguiente:
Building bundle: [===========] 100% Successfully built the managed install bundle at pmi_bundle.wab
Busca el archivo WAB en la carpeta:
.\ ├── game_files/ ├── pmi_bundle.wab ├── play_publishing_config.xml ├── playpublishingtool.exe