Was macht google-play-cli?
gplay: Veröffentliche auf Google Play von CI oder einem Coding-Agenten. Ein einziges statisches Binary, JSON-Ausgabe, die die Play Developer API wortwörtlich abbildet, semantische Exit-Codes. Ersetzt Fastlane supply.
Installation
Lade das neueste Binary von den Releases herunter:
# macOS / Linux
curl -L -o gplay https://github.com/PollyGlot/google-play-cli/releases/latest/download/gplay-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)
chmod +x gplay
sudo mv gplay /usr/local/bin/
# Überprüfen
gplay --version
Voraussetzungen
- Google Play Console Konto mit Zugriff auf eine App.
- Google Cloud Service-Konto mit aktivierter Play Developer API.
- Service-Konto-Schlüssel (JSON-Datei) mit der Rolle "Editor" im Play Console.
Verwendung
# Basis-Befehl (alle Parameter erforderlich)
gplay upload \
--service-account service-account.json \
--package-name com.example.app \
--app-bundle app.aab \
--track production
# Mit JSON-Ausgabe für maschinelle Verarbeitung
gplay upload --json \
--service-account service-account.json \
--package-name com.example.app \
--app-bundle app.aab \
--track internal
Exit-Codes
| Code | Bedeutung |
|---|---|
| 0 | Erfolg |
| 1 | Allgemeiner Fehler |
| 2 | Service-Konto ungültig |
| 3 | Ungültige AAB/APK-Datei |
| 4 | App nicht gefunden |
| 5 | Berechtigungsfehler |
Beispiel mit KI-Agenten
Claude Code:
claude -- "Verwende das Google Play CLI, um die Datei app-release.aab auf den internen Testtrack hochzuladen"
Cursor:
@Agent Lade die AAB-Datei in Google Play hoch
API-Ausgabe
Jeder erfolgreiche Upload gibt ein JSON-Objekt zurück, das der Antwort der Play Developer API entspricht:
{
"versionCode": 42,
"status": "completed",
"track": "internal",
"releaseNotes": [{
"language": "de-DE",
"text": "Fehlerbehebungen"
}]
}
Umgebungsvariablen
PLAY_SERVICE_ACCOUNT_JSON– Pfad zur Service-Konto-JSON-Datei (ersetzt--service-account)PLAY_PACKAGE_NAME– App-Paketname (ersetzt--package-name)
Integration in CI
GitHub Actions:
- name: Upload to Google Play
run: |
gplay upload \
--service-account $PLAY_SERVICE_ACCOUNT_JSON \
--package-name com.example.app \
--app-bundle app-release.aab \
--track internal
GitLab CI:
variables:
PLAY_SERVICE_ACCOUNT_JSON: ${CI_PROJECT_DIR}/service-account.json
PLAY_PACKAGE_NAME: "com.example.app"
deploy:
script:
- gplay upload --app-bundle app-release.aab --track internal
Migration von Fastlane
Wenn du bisher Fastlane supply verwendet hast, ersetze deinen Fastfile-Eintrag:
# Altes Fastlane
gradle(task: 'assembleRelease')
supply(
track: 'internal',
aab: 'app/build/outputs/bundle/release/app-release.aab'
)
Durch:
# Neues Google Play CLI
gradle assembleRelease
gplay upload \
--service-account service-account.json \
--package-name com.example.app \
--app-bundle app/build/outputs/bundle/release/app-release.aab \
--track internal
Tipps für Agenten
- Zustandslos: Jeder Befehl ist unabhängig – keine Sitzung erforderlich.
- Semantische Fehler: Nutze Exit-Codes für Entscheidungslogik.
- JSON-Ausgabe: Verwende
--jsonfür strukturierte Antworten, die direkt von Agenten geparst werden können. - Schnelle Tests: Verwende den
--track draftfür schnelle Uploads ohne Zensur.
Lizenz
MIT