Verwaltete Veröffentlichung bei Google Play

In diesem Dokument erfahren Sie, wie Sie Ihr Spiel mit der verwalteten Installation von Play auf Google Play Games auf dem PC veröffentlichen.

Bei der verwalteten Installation von Play verwaltet Google Play die Installation, Aktualisierung und Deinstallation des Spiels mithilfe der Spieldateien und Metadaten, die Sie in einer Windows App Bundle-Datei (WAB) bereitstellen.

Hinweis

Integrieren Sie das Google Play Games SDK in Ihr Spiel.

Spiel als WAB-Datei verpacken

So erstellen Sie eine WAB-Datei für die verwaltete Installation von Play:

  1. Laden Sie das Play-Veröffentlichungstool herunter. Sie können dieses Tool in der Windows-Befehlszeile oder in PowerShell ausführen.

  2. Erstellen Sie die Konfigurationsdatei für die Play-Veröffentlichung mit einem beliebigen Namen. Beispiel: play_publishing_config.xml mit folgendem Format:

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

    Ersetzen Sie Folgendes:

    • PACKAGE_NAME: Der Paketname für Ihr Spiel. Dies ist die eindeutige ID, die Ihrem Spiel bei Google Play zugewiesen wird. Beispiel: com.yourcompany.yourgame. Der Paketname muss die folgenden Regeln erfüllen:
      • Er muss mindestens zwei Segmente haben (ein oder mehrere Punkte).
      • Jedes Segment muss mit einem Buchstaben beginnen.
      • Alle Zeichen müssen alphanumerisch oder ein Unterstrich ([a-zA-Z0-9_]) sein.
    • VERSION_NAME: Der Versionsstring des Spiels. Dies kann ein beliebiger String sein, muss aber für alle hochgeladenen WAB-Dateien für Ihr Spiel eindeutig sein. Beispiel: 1.0, 1.0.1-beta, 2025.11.24, v1.rc1.
    • PATH_TO_ROOT_FOLDER: Der Pfad zum Stammordner mit Ihren Spieldateien. Alle Dateien in diesem Ordner, mit Ausnahme der in den Ausschlüssen genannten, werden dem Bundle hinzugefügt. Dieser Pfad kann absolut oder relativ zum Verzeichnis mit der Datei play_publishing_config.xml sein.

    • exclusions: (Optional) Gibt Dateipfade oder Muster für Dateien in PATH_TO_ROOT_FOLDER an, die aus dem Bundle ausgeschlossen werden sollen. Sie können mehrere file-path-Elemente in das exclusions-Element einfügen. Ein Pfad kann auf zwei Arten dargestellt werden:

      • Als Dateipfad: Pfad zur auszuschließenden Datei.
      • Als regulärer Ausdruck: Alle Dateien, die mit dem regulären Ausdruck übereinstimmen, werden aus dem Bundle ausgeschlossen. Verwenden Sie die RE2-Syntax.
    • file-attribute: (Optional) Definiert Attribute für bestimmte Dateien oder Dateien, die einem regulären Ausdruck entsprechen.

      • FILE_ATTRIBUTE_VALUE: Kann einer der folgenden Werte sein:
        • SKIP_UPDATE: Bei einer Aktualisierung weist dieses Attribut das System an, die Datei nur zu kopieren, wenn sie noch nicht vorhanden ist. Änderungen an einer vorhandenen Datei bleiben erhalten.
        • MODIFIED_ON_DEVICE: Verwenden Sie dieses Attribut für Dateien, die aktualisiert werden müssen, aber nach der Installation auf dem Gerät geändert werden können. Das System lädt die vollständige neue Datei herunter und überschreibt die installierte Version bei einer Aktualisierung. Wenn sich diese Datei bei der Überprüfung der Installationsintegrität von der installierten Version unterscheidet, gilt die Installation nicht als beschädigt.
      • file-path: Gibt Dateien für dieses Attribut an. Sie können mehrere file-path-Elemente in jedes file-attribute-Element einfügen. Jeder Pfad kann auf zwei Arten dargestellt werden:
        • Als Dateipfad: Pfad zur Datei, mit der dieses Attribut verknüpft werden soll.
        • Als regulärer Ausdruck: Alle Dateien, die mit dem regulären Ausdruck übereinstimmen, werden mit dem Attributwert verknüpft. Verwenden Sie die RE2-Syntax.
    • PATH_TO_LAUNCH_FILE: Pfad zur ausführbaren Datei, mit der das Spiel gestartet wird.

    • ARGUMENTS: (Optional) Befehlszeilenargumente. Das <arguments> Element wird verwendet, um Argumente an eine ausführbare Datei zu übergeben, die in <launch-command>, <install-operation> oder <uninstall-operation> angegeben ist. Jede Verwendung des Elements <arguments> gilt nur für die ausführbare Datei, neben der es definiert ist. So können Sie verschiedene Argumente für verschiedene ausführbare Dateien angeben.

      • Wenn eine ausführbare Datei mehrere Argumente hat, trennen Sie sie durch ein Leerzeichen.
      • Stellen Sie Argumenten -- oder - voran, wenn dies für die ausführbare Datei erforderlich ist. Beispiel:
        <arguments>--package_name --version_name</arguments>
    • lifecycle-operations: (Optional) Benutzerdefinierte Aktionen, die während der Installation oder Deinstallation des Spiels ausgeführt werden sollen.

      • install-operation: Eine Aktion, die ausgeführt wird, wenn das Spiel installiert wird. Sie können zwei Arten von Installationsvorgängen angeben: execute-file und update-registry.
      • uninstall-operation: Eine Aktion, die ausgeführt wird, bevor das Spiel deinstalliert wird. update-registry-Vorgänge werden während der Deinstallation automatisch rückgängig gemacht.
      • INSTALL_OPERATION_REQUIRES_ELEVATION: Gibt an, ob der Installationsvorgang mit Administratorrechten ausgeführt werden muss.

        • "true": Als Administrator ausführen.
        • "false": Als aktueller Nutzer ausführen. Dies ist die Standardeinstellung, wenn nichts angegeben ist.
      • UNINSTALL_OPERATION_REQUIRES_ELEVATION: Gibt an, ob der Deinstallationsvorgang mit Administratorrechten ausgeführt werden muss.

        • "true": Als Administrator ausführen.
        • "false": Als aktueller Nutzer ausführen. Dies ist die Standardeinstellung, wenn nichts angegeben ist.
      • operation-identifier: Ein eindeutiger String zur Identifizierung eines install-operation-Elements.

      • execute-file: Führt eine ausführbare Datei aus.

        • PATH_TO_INSTALL_EXECUTE_FILE: Pfad zu einer ausführbaren Datei, die während der Installation ausgeführt werden soll.
        • PATH_TO_UNINSTALL_EXECUTE_FILE: Pfad zu einer ausführbaren Datei, die vor der Deinstallation ausgeführt werden soll.
      • update-registry: Erstellt oder aktualisiert einen Windows-Registrierungseintrag.

        • BASE_KEY: Definiert den Stammschlüssel, der in der Windows-Registrierung verwendet werden soll. Zulässige Werte: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA und HKEY_USERS. Wenn Sie einen update-registry-Vorgang ausführen, legen Sie requiresElevation="true" für den übergeordneten install-operation basierend auf dem verwendeten baseKey fest:
          • HKEY_LOCAL_MACHINE oder HKEY_CURRENT_CONFIG: Legen Sie requiresElevation="true" fest.
          • HKEY_CURRENT_USER: requiresElevation="true" ist nicht erforderlich.
          • HKEY_CLASSES_ROOT: Legen Sie requiresElevation="true" nur fest, wenn Sie in maschinenweite Abschnitte schreiben. Für nutzerspezifische Abschnitte ist dies nicht erforderlich.
          • HKEY_USERS: Enthält Profile für alle Nutzer. Legen Sie requiresElevation="true" fest, wenn Sie andere Profile als das des aktuellen Nutzers ändern (z.B. andere Nutzer oder .DEFAULT).
        • SUB_KEY_PATH: Dies ist der Pfad zu einem bestimmten Schlüssel in der Windows-Registrierung, der unter dem Hauptschlüssel baseKey verschachtelt ist.
        • VALUE_NAME: Gibt den Namen des Dateneintrags an, den Sie im angegebenen Unterschlüssel ändern möchten.
        • REGISTRY_VALUE_TYPE: Dieses Attribut gibt den Datentyp des Werts an, der in die Registrierung geschrieben wird. Unterstützte Werte sind STRING für einen String oder DWORD für eine 32-Bit-Zahl.
        • VALUE_TEXT: Daten, die im Registrierungsschlüssel gespeichert werden sollen.

    Reguläre Ausdrücke verwenden

    Sie können reguläre Ausdrücke in der RE2-Syntax in file-path-Tags verwenden, um Ausschlüsse oder Dateiattribute auf eine Gruppe von Dateien anzuwenden. Verwenden Sie Schrägstriche / als Verzeichnistrennzeichen und escapen Sie Sonderzeichen für reguläre Ausdrücke mit einem Rückstrich \. Verwenden Sie beispielsweise \., um einen wörtlichen Punkt . zu finden, oder \d, um eine Ziffer zu finden.

    Hier einige häufige Beispiele:

    • Alle Dateien mit einer bestimmten Erweiterung (z. B. „.log“) in einem beliebigen Verzeichnis finden

      Verwenden Sie .*\.log, um alle Pfade zu finden, die mit .log enden, z. B. game.log oder logs/errors.log.

      <file-path>.*\.log</file-path>
    • Alle Dateien und Unterverzeichnisse in einem bestimmten Ordner finden (z. B. „temp“)

      Verwenden Sie temp/.*, um alle Pfade zu finden, die mit temp/ beginnen, z. B. temp/data.txt oder temp/saves/file.sav.

      <file-path>temp/.*</file-path>
    • Dateien finden, die einem Muster in einem bestimmten Ordner entsprechen

      Verwenden Sie assets/level\d\.dat, um assets/level1.dat, assets/level2.dat zu finden, aber nicht assets/other.dat.

      <file-path>assets/level\d\.dat</file-path>
    • Einen Ordnernamen finden, wenn er an einer beliebigen Stelle im Pfad vorkommt

      Verwenden Sie .*/cache/.*, um Dateien in einem beliebigen Verzeichnis mit dem Namen cache zu finden, z. B. game/cache/file.txt oder temp/cache/other.log.

      <file-path>.*/cache/.*</file-path>
    • Dateien mit einer von mehreren Erweiterungen finden (z. B. „.ini“, „.cfg“, „.sav“)

      Verwenden Sie .*\.(ini|cfg|sav), um alle Dateien zu finden, die mit .ini, .cfg, oder .sav enden, z. B. settings.ini, config.cfg, oder saves/slot1.sav.

      <file-path>.*\.(ini|cfg|sav)</file-path>
    • Dateien mit einer bestimmten Erweiterung in bestimmten Verzeichnissen finden (z. B. „.ogg“ in „music/“ oder „sfx/“)

      Verwenden Sie (music|sfx)/.*\.ogg, um alle .ogg Dateien zu finden, die sich im Verzeichnis music/ oder sfx/ befinden, aber nicht an anderer Stelle. Entspricht music/level1.ogg oder sfx/explosion.ogg, aber nicht voice/intro.ogg.

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

    Beispiel für eine Konfigurationsdatei für die Play-Veröffentlichung

    Hier ist ein Beispiel für eine play_publishing_config.xml-Datei für ein Spiel namens 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. Führen Sie das Play-Veröffentlichungstool in der Windows-Befehlszeile oder in PowerShell mit dem Befehl build-bundle aus:

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

    Verwenden Sie das Argument --force, um eine vorhandene WAB-Datei mit demselben Namen zu überschreiben.

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

    Ersetzen Sie Folgendes:

    • PLAY_PUBLISHING_CONFIG_PATH: Der Pfad zur Konfiguration für die Play-Veröffentlichung. Beispiel: path\to\play_publishing_config.xml.
    • WAB_OUTPUT_PATH: Der Pfad zur WAB-Datei. Beispiel: path\to\output_bundle.wab.

    Play-Veröffentlichungstool verwenden

    Wenn sich playpublishingtool.exe, play_publishing_config.xml und Ihre Spieldateien in game_files/ im aktuellen Arbeitsverzeichnis befinden:

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

    Führen Sie Folgendes aus, um pmi_bundle.wab im selben Verzeichnis zu erstellen:

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

    Während das Tool das Bundle erstellt, sehen Sie eine Fortschrittsanzeige im Terminal:

    Building bundle: [====       ] 40%
    

    Bei Erfolg sollte eine Ausgabe ähnlich der folgenden angezeigt werden:

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

    Die WAB-Datei finden Sie im Ordner:

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