Loading...
Loading...
Pre-submission validation for Google Play releases covering metadata, screenshots, bundle integrity, data safety, and policy compliance. Use when preparing a release to avoid rejections and catch issues before submitting.
npx skill4agent add tamtom/gplay-cli-skills gplay-submission-checksgplay auth loginGPLAY_SERVICE_ACCOUNT--packageGPLAY_PACKAGEgplay validate bundle --file app-release.aab.aabgplay validate bundle --file app-release.apkgplay validate listing --dir ./metadatagplay validate listing --dir ./metadata --locale en-USgplay validate listing --dir ./metadata --format jsongplay validate screenshots --dir ./metadatagplay validate screenshots --dir ./metadata --locale en-USgplay sync diff-listings \
--package com.example.app \
--dir ./metadataEDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id')
gplay listings list --package com.example.app --edit $EDIT_ID --output tablegplay data-safety update \
--package com.example.app \
--json @data-safety.jsongplay tracks list --package com.example.app --output tableEDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id')
gplay tracks get --package com.example.app --edit $EDIT_ID --track production --output tablegplay deobfuscation upload \
--package com.example.app \
--version-code 42 \
--file mapping.txtgplay release \
--package com.example.app \
--track production \
--bundle app-release.aab \
--release-notes @release-notes.json \
--dry-runEDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id')
# ... upload bundle, update tracks, etc. ...
# Validate the edit (catches all server-side issues)
gplay edits validate --package com.example.app --edit $EDIT_ID
# Only commit if validation passes
gplay edits commit --package com.example.app --edit $EDIT_IDbuild.gradlebuild.gradle.ktsandroid {
defaultConfig {
targetSdkVersion 34 // or targetSdk = 34
}
}ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATIONREAD_CONTACTSREAD_CALL_LOGREAD_SMSCAMERARECORD_AUDIOREQUEST_INSTALL_PACKAGESQUERY_ALL_PACKAGES| Device Type | Image Type | Min | Max | Min Resolution |
|---|---|---|---|---|
| Phone | | 2 | 8 | 320px (min side) |
| 7-inch Tablet | | 0 | 8 | 320px (min side) |
| 10-inch Tablet | | 0 | 8 | 320px (min side) |
| Android TV | | 0 | 8 | 1280x720 |
| Wear OS | | 0 | 8 | 320px (min side) |
| Asset | Type | Required |
|---|---|---|
| Feature Graphic | | Yes (for featuring) |
| Promo Graphic | | No |
| Icon | | Set via Play Console |
| TV Banner | | Required for TV apps |
versionCodebuild.gradletargetSdkVersiontargetSdkVersiongplay data-safety update --package com.example.app --json @data-safety.jsonEDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id')
gplay images upload \
--package com.example.app \
--edit $EDIT_ID \
--locale en-US \
--type phoneScreenshots \
--file screenshot1.pnggplay release \
--package com.example.app \
--track production \
--bundle app.aab \
--release-notes '{"en-US": "Bug fixes and improvements"}'#!/bin/bash
# pre-submission-checks.sh
PACKAGE="com.example.app"
BUNDLE="app-release.aab"
METADATA_DIR="./metadata"
RELEASE_NOTES="release-notes.json"
MAPPING="app/build/outputs/mapping/release/mapping.txt"
echo "=== Step 1: Validate bundle ==="
gplay validate bundle --file "$BUNDLE" --output table
echo "=== Step 2: Validate listings ==="
gplay validate listing --dir "$METADATA_DIR" --output table
echo "=== Step 3: Validate screenshots ==="
gplay validate screenshots --dir "$METADATA_DIR" --output table
echo "=== Step 4: Diff listings against Play Store ==="
gplay sync diff-listings --package "$PACKAGE" --dir "$METADATA_DIR" --output table
echo "=== Step 5: Dry run release ==="
gplay release \
--package "$PACKAGE" \
--track production \
--bundle "$BUNDLE" \
--release-notes "@$RELEASE_NOTES" \
--listings-dir "$METADATA_DIR" \
--screenshots-dir "$METADATA_DIR" \
--dry-run \
--output table
echo "=== Step 6: Upload mapping file ==="
gplay deobfuscation upload \
--package "$PACKAGE" \
--version-code 42 \
--file "$MAPPING"
echo "=== All checks passed. Ready to release. ==="# GitHub Actions example
- name: Validate bundle
run: gplay validate bundle --file app/build/outputs/bundle/release/app-release.aab
- name: Validate metadata
run: gplay validate listing --dir metadata/
- name: Validate screenshots
run: gplay validate screenshots --dir metadata/
- name: Dry run release
run: |
gplay release \
--package ${{ secrets.PACKAGE_NAME }} \
--track internal \
--bundle app/build/outputs/bundle/release/app-release.aab \
--dry-run
env:
GPLAY_SERVICE_ACCOUNT: ${{ secrets.GPLAY_SERVICE_ACCOUNT_PATH }}gplay validate--dry-run--help--output tablegplay validategplay release --dry-rungplay edits validate--help--output table