Pubblicazione gestita di Google Play

Questo documento mostra come pubblicare il tuo gioco su Google Play Games su PC utilizzando l'installazione gestita di Play.

Con l'installazione gestita di Play, Google Play gestisce l'installazione, l'aggiornamento e la disinstallazione del gioco utilizzando i file e i metadati del gioco che fornisci in un file Windows App Bundle (WAB).

Prima di iniziare

Integra l'SDK Google Play Giochi nel tuo gioco.

Pacchettizzare il gioco come file WAB

Per creare un file WAB di installazione gestita di Google Play:

  1. Scarica lo strumento di pubblicazione di Google Play. Puoi eseguire questo strumento sulla riga di comando di Windows o su PowerShell.

  2. Crea il file di configurazione di pubblicazione di Google Play con un nome qualsiasi. Ad esempio, play_publishing_config.xml con il seguente 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>

    Sostituisci quanto segue:

    • PACKAGE_NAME: Il nome del pacchetto del tuo gioco. Si tratta dell'identificatore univoco che verrà associato al tuo gioco su Google Play. Ad esempio, com.yourcompany.yourgame. Il nome del pacchetto deve rispettare le seguenti regole:
      • Deve avere almeno due segmenti (uno o più punti).
      • Ogni segmento deve iniziare con una lettera.
      • Tutti i caratteri devono essere alfanumerici o un trattino basso ([a-zA-Z0-9_]).
    • VERSION_NAME: La stringa della versione del gioco. Può essere una stringa arbitraria, ma deve essere univoca in tutti i WAB caricati per il tuo gioco. Ad esempio: 1.0, 1.0.1-beta, 2025.11.24, v1.rc1.
    • PATH_TO_ROOT_FOLDER: il percorso della cartella principale contenente i file di gioco. Tutti i file in questa cartella, ad eccezione di quelli menzionati nelle esclusioni, vengono aggiunti al bundle. Questo percorso può essere assoluto o relativo alla directory contenente il file play_publishing_config.xml.

    • exclusions: (facoltativo) specifica i percorsi o i pattern dei file per i file all'interno di PATH_TO_ROOT_FOLDER da escludere dal bundle. Puoi includere più elementi file-path all'interno dell'elemento exclusions. Un percorso può essere rappresentato in due modi:

      • Come percorso file: percorso del file da escludere.
      • Come stringa regex: tutti i file che corrispondono alla stringa dell'espressione regolare vengono esclusi dal bundle. Utilizza la sintassi RE2.
    • file-attribute (facoltativo) definisce gli attributi per file specifici o file che corrispondono a un pattern di espressione regolare.

      • FILE_ATTRIBUTE_VALUE: può corrispondere a uno dei seguenti:
        • SKIP_UPDATE: durante un aggiornamento, questo attributo indica al sistema di copiare il file solo se non è già presente, conservando le modifiche a un file esistente.
        • MODIFIED_ON_DEVICE: utilizzalo per i file che devono essere aggiornati, ma che potrebbero essere modificati sul dispositivo dopo l'installazione. Durante un aggiornamento, il sistema scarica il nuovo file completo e sovrascrive la versione installata. Se questo file è diverso dalla versione installata durante i controlli di integrità dell'installazione, l'installazione non viene considerata danneggiata.
      • file-path: identifica i file per questo attributo. Puoi includere più elementi file-path all'interno di ogni elemento file-attribute. Ogni percorso può essere rappresentato in due modi:
        • Come percorso file: percorso del file a cui associare questo attributo.
        • Come stringa regex: tutti i file che corrispondono alla stringa di espressione regolare sono associati al valore dell'attributo. Utilizza la sintassi RE2.
    • PATH_TO_LAUNCH_FILE: il percorso del file eseguibile utilizzato per avviare il gioco.

    • ARGUMENTS: (Facoltativo) Argomenti della riga di comando. L'elemento <arguments> viene utilizzato per passare argomenti a un file eseguibile specificato in <launch-command>, <install-operation> o <uninstall-operation>. Ogni utilizzo dell'elemento <arguments> si applica solo all'eseguibile per cui è definito, consentendoti di specificare argomenti diversi per eseguibili diversi.

      • Se un eseguibile ha più argomenti, separali con uno spazio.
      • Anteponi gli argomenti con -- o - se l'eseguibile lo richiede. Esempio:
        <arguments>--package_name --version_name</arguments>
    • (Facoltativo) lifecycle-operations: azioni personalizzate da eseguire durante l'installazione o la disinstallazione del gioco.

      • install-operation: un'azione da eseguire quando il gioco viene installato. Puoi specificare due tipi di operazioni di installazione: execute-file e update-registry.
      • uninstall-operation: Un'azione da eseguire prima della disinstallazione del gioco. Le operazioni update-registry vengono ripristinate automaticamente durante la disinstallazione.
      • INSTALL_OPERATION_REQUIRES_ELEVATION: indica se l'operazione di installazione deve essere eseguita con privilegi amministrativi.

        • "true": esegui come amministratore.
        • "false": esegui come utente corrente. Questa è l'impostazione predefinita se non specificata.
      • UNINSTALL_OPERATION_REQUIRES_ELEVATION: indica se l'operazione di disinstallazione deve essere eseguita con privilegi amministrativi.

        • "true": esegui come amministratore.
        • "false": esegui come utente corrente. Questa è l'impostazione predefinita se non specificata.
      • operation-identifier: una stringa univoca per identificare un install-operation.

      • execute-file: esegue un file eseguibile.

        • PATH_TO_INSTALL_EXECUTE_FILE: percorso di un eseguibile da eseguire durante l'installazione.
        • PATH_TO_UNINSTALL_EXECUTE_FILE: percorso di un eseguibile da eseguire prima della disinstallazione.
      • update-registry: crea o aggiorna una voce del registro di Windows.

        • BASE_KEY: definisce la chiave root da utilizzare nel registro di Windows. Valori accettati: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA e HKEY_USERS. Quando esegui un'operazione update-registry, imposta requiresElevation="true" sull'elemento principale install-operation in base a baseKey utilizzato:
          • HKEY_LOCAL_MACHINE o HKEY_CURRENT_CONFIG: imposta requiresElevation="true".
          • HKEY_CURRENT_USER: requiresElevation="true" non è necessario.
          • HKEY_CLASSES_ROOT: imposta requiresElevation="true" solo se scrivi in sezioni a livello di computer; non è necessario per le sezioni specifiche dell'utente.
          • HKEY_USERS: Contiene i profili di tutti gli utenti. Imposta requiresElevation="true" quando modifichi profili diversi da quello dell'utente corrente (ad es. altri utenti o .DEFAULT).
        • SUB_KEY_PATH: rappresenta il percorso di una chiave specifica all'interno del Registro di Windows, nidificata sotto la chiave principale baseKey.
        • VALUE_NAME: specifica il nome della voce di dati che vuoi modificare all'interno della sottochiave designata.
        • REGISTRY_VALUE_TYPE: questo attributo specifica il tipo di dati del valore scritto nel registro. I valori supportati sono STRING per una stringa o DWORD per un numero a 32 bit.
        • VALUE_TEXT: i dati da archiviare nella chiave del registro.

    Come utilizzare le espressioni regolari

    Puoi utilizzare le espressioni regolari della sintassi RE2 nei tag file-path per applicare esclusioni o attributi di file a un gruppo di file. Ricorda di utilizzare le barre / come separatori di directory e di eseguire l'escape dei caratteri speciali delle espressioni regolari con una barra rovesciata \. Ad esempio, utilizza \. per trovare la corrispondenza con un punto letterale . o \d per trovare la corrispondenza con una cifra.

    Ecco alcuni esempi comuni:

    • Trova tutti i file con un'estensione specifica (ad esempio .log) in qualsiasi directory

      Utilizza .*\.log per trovare una corrispondenza con qualsiasi percorso che termina con .log, ad esempio game.log o logs/errors.log.

      <file-path>.*\.log</file-path>
    • Corrispondenza di tutti i file e le sottodirectory all'interno di una cartella specifica (ad esempio "temp")

      Utilizza temp/.* per trovare una corrispondenza con tutti i percorsi che iniziano con temp/, ad esempio temp/data.txt o temp/saves/file.sav.

      <file-path>temp/.*</file-path>
    • Trovare i file che corrispondono a un pattern in una cartella specifica

      Utilizza assets/level\d\.dat per trovare assets/level1.dat, assets/level2.dat ma non assets/other.dat.

      <file-path>assets/level\d\.dat</file-path>
    • Corrispondenza con il nome di una cartella quando viene visualizzato in qualsiasi punto del percorso

      Utilizza .*/cache/.* per trovare una corrispondenza con i file in qualsiasi directory denominata cache, ad esempio game/cache/file.txt o temp/cache/other.log.

      <file-path>.*/cache/.*</file-path>
    • Corrispondenza dei file con una delle diverse estensioni (ad esempio .ini, .cfg, .sav)

      Utilizza .*\.(ini|cfg|sav) per trovare qualsiasi file che termina con .ini, .cfg o .sav, ad esempio settings.ini, config.cfg o saves/slot1.sav.

      <file-path>.*\.(ini|cfg|sav)</file-path>
    • Corrispondenza dei file con un'estensione specifica in directory specifiche (ad esempio, .ogg in music/ o sfx/)

      Utilizza (music|sfx)/.*\.ogg per trovare una corrispondenza con qualsiasi file .ogg che si trova nelle directory music/ o sfx/, ma non altrove. Corrisponde a music/level1.ogg o sfx/explosion.ogg, ma non a voice/intro.ogg.

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

    Esempio di file di configurazione della pubblicazione su Google Play

    Ecco un esempio di play_publishing_config.xml per un gioco chiamato 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. Esegui lo strumento di pubblicazione Play sulla riga di comando di Windows o Powershell, utilizzando il comando build-bundle:

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

    Per sovrascrivere un file WAB esistente con lo stesso nome, utilizza l'argomento --force.

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

    Sostituisci quanto segue:

    • PLAY_PUBLISHING_CONFIG_PATH: il percorso della configurazione di pubblicazione di Play. Ad esempio, path\to\play_publishing_config.xml.
    • WAB_OUTPUT_PATH: il percorso del file WAB. Ad esempio, path\to\output_bundle.wab.

    Come utilizzare lo strumento di pubblicazione di Play

    Se hai playpublishingtool.exe, play_publishing_config.xml e i file di gioco in game_files/ nella directory di lavoro corrente:

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

    Per creare pmi_bundle.wab nella stessa directory, esegui:

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

    Mentre lo strumento crea il bundle, vedrai una barra di avanzamento sul terminale:

    Building bundle: [====       ] 40%
    

    In caso di esito positivo, dovresti vedere un output simile al seguente:

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

    Trova il file WAB nella cartella:

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