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 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. Este 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 debe incluirse un guión bajo (
[a-zA-Z0-9_]).
VERSION_NAME: Es la cadena de versión del juego. Puede ser una 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.24,v1.rc1.PATH_TO_ROOT_FOLDER: Es la ruta de acceso a la carpeta raíz que contiene los archivos de tu 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 las rutas de acceso o los patrones de los archivos dentro dePATH_TO_ROOT_FOLDERpara excluir del paquete. Puedes incluir varios elementosfile-pathdentro del elementoexclusions. Una ruta de acceso se puede representar de dos maneras:- Como una ruta de acceso al archivo: Es la ruta de acceso al archivo que se excluirá.
- Como una cadena de expresión regular: Todos los archivos que coinciden con la cadena de expresión regular se excluyen del paquete. Usa la sintaxis de 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: Úsalo para los archivos que se deben actualizar, pero que se podrían modificar en el dispositivo después de la instalación. El sistema descarga el archivo nuevo completo y anula la versión instalada durante una actualización. Si este archivo es diferente de la versión instalada durante las verificaciones de integridad de la instalación, la instalación no se considera dañada.
file-path: Identifica los archivos para este atributo. Puedes incluir varios elementosfile-pathdentro de cada elementofile-attribute. Cada ruta de acceso se puede representar de dos maneras:- Como una ruta de acceso al archivo: Es la ruta de acceso al archivo con el que se asociará este atributo.
- Como una cadena de expresión regular: Todos los archivos que coinciden con la cadena de expresión regular se asocian con el valor del atributo. Usa la sintaxis de RE2.
PATH_TO_LAUNCH_FILE: Es la ruta de acceso al archivo ejecutable que se usa para iniciar el juego.ARGUMENTS: (Opcional) Son los 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 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 las acciones personalizadas que se realizarán 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 ejecuta antes de que se desinstale el juego. Las operacionesupdate-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": Se ejecuta 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": Se ejecuta 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 unainstall-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 lainstall-operationsegún labaseKeyque se use:HKEY_LOCAL_MACHINEoHKEY_CURRENT_CONFIG: EstablecerequiresElevation="true".HKEY_CURRENT_USER:requiresElevation="true"No se necesita.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 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 labaseKeyprincipal.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 escapar caracteres especiales de expresiones regulares con una barra invertida\. 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 con una extensión específica (por ejemplo, .log) en cualquier directorio
Usa
.*\.logpara que coincida con cualquier ruta de acceso 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 coincida con todas las rutas de acceso que comiencen contemp/, comotemp/data.txtotemp/saves/file.sav.<file-path>temp/.*</file-path>
- Coincide con los archivos que coinciden con un patrón en una carpeta específica
Usa
assets/level\d\.datpara que coincida conassets/level1.dat,assets/level2.datpero no conassets/other.dat.<file-path>assets/level\d\.dat</file-path>
- Coincide con un nombre de carpeta cuando aparece en cualquier lugar de la ruta de acceso
Usa
.*/cache/.*para que coincida con los archivos de cualquier directorio llamadocache, comogame/cache/file.txtotemp/cache/other.log.<file-path>.*/cache/.*</file-path>
- Coincide 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,.cfg, o.sav, comosettings.ini,config.cfg, osaves/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.oggarchivos que se encuentren en los directoriosmusic/osfx/, pero no en otro lugar. Coincide conmusic/level1.oggosfx/explosion.ogg, pero no convoice/intro.ogg.<file-path>(music|sfx)/.*\.ogg</file-path>
Archivo de configuración de publicación de Play de ejemplo
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 anular 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:.\ ├── 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 la operación se realiza correctamente, 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