$npx -y skills add hanamizuki/solopreneur --skill gplay-submission-checksPre-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.
| 1 | # Google Play Submission Checks |
| 2 | |
| 3 | Use this skill to validate everything before submitting a release to Google Play, reducing rejections and failed edits. |
| 4 | |
| 5 | ## Preconditions |
| 6 | - Auth configured (`gplay auth login` or `GPLAY_SERVICE_ACCOUNT` env var). |
| 7 | - Package name known (`--package` or `GPLAY_PACKAGE`). |
| 8 | - AAB/APK built and signed. |
| 9 | - Service account has at least "Release Manager" permission. |
| 10 | |
| 11 | ## Prefer the First-Class Commands |
| 12 | |
| 13 | The CLI has canonical, purpose-built commands. Reach for these before |
| 14 | hand-scripting individual validators: |
| 15 | |
| 16 | - **`gplay validate --package <pkg>`** — the canonical release-readiness report. |
| 17 | Combines local artifact/metadata/screenshot/release-note checks with remote |
| 18 | track and listing state and Console-only follow-up items. Use `--bundle`, |
| 19 | `--listings-dir`, `--screenshots-dir`, `--track`, and `--strict` (treat |
| 20 | warnings as failures) to scope it. |
| 21 | |
| 22 | ```bash |
| 23 | gplay validate \ |
| 24 | --package com.example.app \ |
| 25 | --bundle app-release.aab \ |
| 26 | --track production \ |
| 27 | --strict |
| 28 | ``` |
| 29 | |
| 30 | - **`gplay preflight --file <app.aab>`** — offline AAB/APK compliance and |
| 31 | hygiene: manifest presence, bundle/dex size, native-lib coverage, debuggable |
| 32 | and testOnly flags, cleartext traffic, dangerous permissions, and a secret |
| 33 | scan (API keys / private keys). No API calls. Exit codes: 0 clean, 1 findings |
| 34 | at/above `--fail-on`. |
| 35 | |
| 36 | ```bash |
| 37 | gplay preflight --file app-release.aab --max-size 150M --fail-on warning |
| 38 | ``` |
| 39 | |
| 40 | - **`gplay checks upload`** — Google Checks compliance analysis as a CI gate. |
| 41 | Use `--severity-threshold PRIORITY` to fail the pipeline on high-priority |
| 42 | failed checks before release. |
| 43 | |
| 44 | ```bash |
| 45 | gplay checks upload \ |
| 46 | --account "$CHECKS_ACCOUNT" \ |
| 47 | --app "$CHECKS_APP" \ |
| 48 | --binary app-release.aab \ |
| 49 | --binary-type ANDROID_AAB \ |
| 50 | --severity-threshold PRIORITY |
| 51 | ``` |
| 52 | |
| 53 | - **`gplay publish track --strict`** — preflight + publish in one step. Builds |
| 54 | the readiness report, stops on blocking issues (and warnings with `--strict`), |
| 55 | then runs the release workflow only if preflight passes. |
| 56 | |
| 57 | ```bash |
| 58 | gplay publish track \ |
| 59 | --package com.example.app \ |
| 60 | --track production \ |
| 61 | --bundle app-release.aab \ |
| 62 | --release-notes @release-notes.json \ |
| 63 | --strict |
| 64 | ``` |
| 65 | |
| 66 | The detailed per-artifact checks below remain useful for narrowing down a |
| 67 | failure or for CI steps that gate on one concern at a time. |
| 68 | |
| 69 | ## Pre-submission Checklist |
| 70 | |
| 71 | ### 1. Validate Bundle Integrity |
| 72 | |
| 73 | ```bash |
| 74 | gplay validate bundle --file app-release.aab |
| 75 | ``` |
| 76 | |
| 77 | Checks: |
| 78 | - File exists and is readable |
| 79 | - File has `.aab` extension |
| 80 | - Valid ZIP archive structure |
| 81 | - Contains required bundle components (manifest, resources, dex) |
| 82 | |
| 83 | If using APK instead: |
| 84 | ```bash |
| 85 | gplay validate bundle --file app-release.apk |
| 86 | ``` |
| 87 | |
| 88 | ### 2. Validate Store Listing Metadata |
| 89 | |
| 90 | ```bash |
| 91 | gplay validate listing --dir ./metadata |
| 92 | ``` |
| 93 | |
| 94 | Checks: |
| 95 | - **Title**: max 30 characters |
| 96 | - **Short description**: max 80 characters |
| 97 | - **Full description**: max 4000 characters |
| 98 | - Required fields present |
| 99 | - Valid UTF-8 encoding |
| 100 | |
| 101 | Validate a specific locale: |
| 102 | ```bash |
| 103 | gplay validate listing --dir ./metadata --locale en-US |
| 104 | ``` |
| 105 | |
| 106 | For JSON format metadata: |
| 107 | ```bash |
| 108 | gplay validate listing --dir ./metadata --format json |
| 109 | ``` |
| 110 | |
| 111 | ### 3. Validate Screenshots |
| 112 | |
| 113 | ```bash |
| 114 | gplay validate screenshots --dir ./metadata |
| 115 | ``` |
| 116 | |
| 117 | Checks: |
| 118 | - Minimum 2 screenshots per device type |
| 119 | - Maximum 8 screenshots per device type |
| 120 | - Valid image formats (PNG, JPEG) |
| 121 | - Files are readable |
| 122 | |
| 123 | Validate for a specific locale: |
| 124 | ```bash |
| 125 | gplay validate screenshots --dir ./metadata --locale en-US |
| 126 | ``` |
| 127 | |
| 128 | ### 4. Verify Existing Listings on Play Store |
| 129 | |
| 130 | Compare local metadata against what is live: |
| 131 | ```bash |
| 132 | gplay sync diff-listings \ |
| 133 | --package com.example.app \ |
| 134 | --dir ./metadata |
| 135 | ``` |
| 136 | |
| 137 | Check all configured locales: |
| 138 | ```bash |
| 139 | EDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id') |
| 140 | gplay listings list --package com.example.app --edit $EDIT_ID --output table |
| 141 | ``` |
| 142 | |
| 143 | ### 5. Data Safety Declaration |
| 144 | |
| 145 | Ensure the data safety form is complete. Missing or inaccurate data safety declarations are a common rejection reason. |
| 146 | |
| 147 | ```bash |
| 148 | gplay data-safety update \ |
| 149 | --package com.example.app \ |
| 150 | --json @data-safety.json |
| 151 | ``` |
| 152 | |
| 153 | ### 6. Version Code Check |
| 154 | |
| 155 | The version code must be strictly higher than all previous releases on every track. Check current track status: |
| 156 | |
| 157 | ```bash |
| 158 | gplay tracks list --package com.example.app --output table |
| 159 | ``` |
| 160 | |
| 161 | Get details for a specific track: |
| 162 | ```bash |
| 163 | EDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id') |
| 164 | gplay tracks get --package com.example.app --edit $EDIT_ID --track production --output table |
| 165 | ``` |
| 166 | |
| 167 | ### 7. Deobfuscation / Mapping File |
| 168 | |
| 169 | Upload ProGuard/R8 mapping files so crash reports in Play Console are readable. |
| 170 | This command is **edit-scoped** (needs `- |