Publication gérée Play

Ce document explique comment publier votre jeu sur Google Play Jeux sur PC à l'aide de l'installation gérée par Play.

Avec l'installation gérée par Play, Google Play gère l'installation, la mise à jour et la désinstallation du jeu à l'aide des fichiers et des métadonnées du jeu que vous fournissez dans un fichier Windows App Bundle (WAB).

Avant de commencer

Intégrez le SDK Google Play Jeux à votre jeu.

Empaqueter votre jeu sous forme de fichier WAB

Pour créer un fichier WAB d'installation gérée par Play, procédez comme suit :

  1. Téléchargez l'outil de publication Play. Vous pouvez exécuter cet outil sur la ligne de commande Windows ou PowerShell.

  2. Créez le fichier de configuration de publication Play, avec le nom de votre choix. Par exemple, play_publishing_config.xml avec le format suivant :

    <?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>

    Remplacez les éléments suivants :

    • PACKAGE_NAME : nom du package de votre jeu. Il s'agit de l'identifiant unique qui sera associé à votre jeu sur Google Play. Par exemple, com.yourcompany.yourgame. Le nom du package doit respecter les règles suivantes :
      • Il doit comporter au moins deux segments (un ou plusieurs points).
      • Chaque segment doit commencer par une lettre.
      • Tous les caractères doivent être alphanumériques ou un trait de soulignement ([a-zA-Z0-9_]).
    • VERSION_NAME : chaîne de version du jeu. Il peut s'agir d'une chaîne arbitraire, mais elle doit être unique pour tous les WAB importés pour votre jeu. Par exemple : 1.0, 1.0.1-beta, 2025.11.24, v1.rc1.
    • PATH_TO_ROOT_FOLDER : chemin d'accès au dossier racine contenant les fichiers de votre jeu. Tous les fichiers de ce dossier, à l'exception de ceux mentionnés dans les exclusions, sont ajoutés au bundle. Ce chemin d'accès peut être absolu ou relatif au répertoire contenant le fichier play_publishing_config.xml.

    • exclusions : (facultatif) spécifie les chemins d'accès aux fichiers ou les modèles de fichiers dans PATH_TO_ROOT_FOLDER à exclure du bundle. Vous pouvez inclure plusieurs éléments file-path dans l'élément exclusions. Un chemin peut être représenté de deux manières :

      • En tant que chemin d'accès au fichier : chemin d'accès au fichier à exclure.
      • En tant que chaîne d'expression régulière : tous les fichiers qui correspondent à la chaîne d'expression régulière sont exclus du bundle. Utilisez la syntaxe RE2.
    • file-attribute : (facultatif) définit les attributs de fichiers spécifiques ou de fichiers correspondant à un modèle d'expression régulière.

      • FILE_ATTRIBUTE_VALUE : peut être l'une des valeurs suivantes :
        • SKIP_UPDATE : lors d'une mise à jour, cet attribut indique au système de copier le fichier uniquement s'il n'est pas déjà présent, en conservant les modifications apportées à un fichier existant.
        • MODIFIED_ON_DEVICE : utilisez cette option pour les fichiers qui doivent être mis à jour, mais qui peuvent être modifiés sur l'appareil après l'installation. Lors d'une mise à jour, le système télécharge le nouveau fichier complet et remplace la version installée. Si ce fichier est différent de la version installée lors des vérifications de l'intégrité de l'installation, celle-ci n'est pas considérée comme corrompue.
      • file-path : identifie les fichiers pour cet attribut. Vous pouvez inclure plusieurs éléments file-path dans chaque élément file-attribute. Chaque chemin peut être représenté de deux manières :
        • En tant que chemin d'accès à un fichier : chemin d'accès au fichier auquel associer cet attribut.
        • En tant que chaîne d'expression régulière : tous les fichiers qui correspondent à la chaîne d'expression régulière sont associés à la valeur de l'attribut. Utilisez la syntaxe RE2.
    • PATH_TO_LAUNCH_FILE : chemin d'accès au fichier exécutable utilisé pour lancer le jeu.

    • ARGUMENTS : (facultatif) arguments de ligne de commande. L'élément <arguments> permet de transmettre des arguments à un fichier exécutable spécifié dans <launch-command>, <install-operation> ou <uninstall-operation>. Chaque utilisation de l'élément <arguments> ne s'applique qu'à l'exécutable à côté duquel il est défini, ce qui vous permet de spécifier différents arguments pour différents exécutables.

      • Si un exécutable comporte plusieurs arguments, séparez-les par un espace.
      • Ajoutez le préfixe -- ou - aux arguments si l'exécutable l'exige. Exemple :
        <arguments>--package_name --version_name</arguments>
    • lifecycle-operations : (facultatif) actions personnalisées à effectuer lors de l'installation ou de la désinstallation du jeu.

      • install-operation : action à exécuter lorsque le jeu est installé. Vous pouvez spécifier deux types d'opérations d'installation : execute-file et update-registry.
      • uninstall-operation : action à exécuter avant la désinstallation du jeu. Les opérations update-registry sont automatiquement annulées lors de la désinstallation.
      • INSTALL_OPERATION_REQUIRES_ELEVATION : indique si l'opération d'installation doit s'exécuter avec des droits d'administrateur.

        • "true" : exécutez en tant qu'administrateur.
        • "false" : exécutez en tant qu'utilisateur actuel. Il s'agit de la valeur par défaut si elle n'est pas spécifiée.
      • UNINSTALL_OPERATION_REQUIRES_ELEVATION : indique si l'opération de désinstallation doit être exécutée avec des droits d'administrateur.

        • "true" : exécutez en tant qu'administrateur.
        • "false" : exécutez en tant qu'utilisateur actuel. Il s'agit de la valeur par défaut si elle n'est pas spécifiée.
      • operation-identifier : chaîne unique permettant d'identifier un install-operation.

      • execute-file : exécute un fichier exécutable.

        • PATH_TO_INSTALL_EXECUTE_FILE : chemin d'accès à un exécutable à exécuter lors de l'installation.
        • PATH_TO_UNINSTALL_EXECUTE_FILE : chemin d'accès à un exécutable à exécuter avant la désinstallation.
      • update-registry : crée ou met à jour une entrée de registre Windows.

        • BASE_KEY : définit la clé racine à utiliser dans le registre Windows. Valeurs acceptées : HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA et HKEY_USERS. Lorsque vous effectuez une opération update-registry, définissez requiresElevation="true" sur le install-operation parent en fonction du baseKey utilisé :
          • HKEY_LOCAL_MACHINE ou HKEY_CURRENT_CONFIG : Définissez requiresElevation="true".
          • HKEY_CURRENT_USER : requiresElevation="true" n'est pas nécessaire.
          • HKEY_CLASSES_ROOT : Définissez requiresElevation="true" uniquement si vous écrivez dans des sections à l'échelle de la machine. Ce n'est pas nécessaire pour les sections spécifiques à l'utilisateur.
          • HKEY_USERS : contient les profils de tous les utilisateurs. Définissez requiresElevation="true" lorsque vous modifiez des profils autres que celui de l'utilisateur actuel (par exemple, d'autres utilisateurs ou .DEFAULT).
        • SUB_KEY_PATH : représente le chemin d'accès à une clé spécifique du registre Windows, imbriquée sous la clé principale baseKey.
        • VALUE_NAME : nom de l'entrée de données que vous souhaitez modifier dans la sous-clé désignée.
        • REGISTRY_VALUE_TYPE : cet attribut spécifie le type de données de la valeur écrite dans le registre. Les valeurs acceptées sont STRING pour une chaîne ou DWORD pour un nombre de 32 bits.
        • VALUE_TEXT : données à stocker dans la clé de registre.

    Utiliser des expressions régulières

    Vous pouvez utiliser des expressions régulières de syntaxe RE2 dans les balises file-path pour appliquer des exclusions ou des attributs de fichier à un groupe de fichiers. N'oubliez pas d'utiliser des barres obliques / comme séparateurs de répertoire et d'échapper les caractères spéciaux des expressions régulières avec une barre oblique inverse \. Par exemple, utilisez \. pour correspondre à un point littéral . ou \d pour correspondre à un chiffre.

    Voici quelques exemples courants :

    • Faire correspondre tous les fichiers avec une extension spécifique (par exemple, .log) dans n'importe quel répertoire

      Utilisez .*\.log pour faire correspondre n'importe quel chemin se terminant par .log, comme game.log ou logs/errors.log.

      <file-path>.*\.log</file-path>
    • Correspond à tous les fichiers et sous-répertoires d'un dossier spécifique (par exemple, "temp")

      Utilisez temp/.* pour faire correspondre tous les chemins commençant par temp/, comme temp/data.txt ou temp/saves/file.sav.

      <file-path>temp/.*</file-path>
    • Faire correspondre les fichiers correspondant à un modèle dans un dossier spécifique

      Utilisez assets/level\d\.dat pour faire correspondre assets/level1.dat et assets/level2.dat, mais pas assets/other.dat.

      <file-path>assets/level\d\.dat</file-path>
    • Faire correspondre un nom de dossier lorsqu'il apparaît n'importe où dans le chemin d'accès

      Utilisez .*/cache/.* pour faire correspondre les fichiers de n'importe quel répertoire nommé cache, comme game/cache/file.txt ou temp/cache/other.log.

      <file-path>.*/cache/.*</file-path>
    • Faire correspondre des fichiers avec l'une des nombreuses extensions (par exemple, .ini, .cfg, .sav)

      Utilisez .*\.(ini|cfg|sav) pour faire correspondre n'importe quel fichier se terminant par .ini, .cfg ou .sav, comme settings.ini, config.cfg ou saves/slot1.sav.

      <file-path>.*\.(ini|cfg|sav)</file-path>
    • Faire correspondre les fichiers avec une extension spécifique dans des répertoires spécifiques (par exemple, .ogg dans music/ ou sfx/)

      Utilisez (music|sfx)/.*\.ogg pour faire correspondre tous les fichiers .ogg situés dans les répertoires music/ ou sfx/, mais pas ailleurs. Correspond à music/level1.ogg ou sfx/explosion.ogg, mais pas à voice/intro.ogg.

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

    Exemple de fichier de configuration de publication Play

    Voici un exemple de play_publishing_config.xml pour un jeu appelé 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. Exécutez l'outil de publication Play sur la ligne de commande Windows ou PowerShell à l'aide de la commande build-bundle :

    playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH
    

    Pour écraser un fichier WAB existant portant le même nom, utilisez l'argument --force.

    playpublishingtool.exe build-bundle --input=PLAY_PUBLISHING_CONFIG_PATH --output=WAB_OUTPUT_PATH --force
    

    Remplacez les éléments suivants :

    • PLAY_PUBLISHING_CONFIG_PATH : chemin d'accès à la configuration de publication Play. Par exemple, path\to\play_publishing_config.xml.
    • WAB_OUTPUT_PATH : chemin d'accès au fichier WAB. Par exemple, path\to\output_bundle.wab.

    Utiliser l'outil de publication Play

    Si vous avez playpublishingtool.exe, play_publishing_config.xml et vos fichiers de jeu dans game_files/ dans le répertoire de travail actuel :

    .\
    ├── game_files/
    ├── play_publishing_config.xml
    ├── playpublishingtool.exe
    

    Pour créer pmi_bundle.wab dans le même répertoire, exécutez la commande suivante :

    playpublishingtool.exe build-bundle --input=play_publishing_config.xml --output=pmi_bundle.wab
    

    Pendant que l'outil crée le bundle, une barre de progression s'affiche dans le terminal :

    Building bundle: [====       ] 40%
    

    Si l'opération réussit, un résultat semblable aux lignes suivantes s'affiche :

    Building bundle: [===========] 100%
    Successfully built the managed install bundle at pmi_bundle.wab
    

    Recherchez le fichier WAB dans le dossier :

      .\
      ├── game_files/
      ├── pmi_bundle.wab
      ├── play_publishing_config.xml
      ├── playpublishingtool.exe