Community编程与开发github.com

BaronCyrus/ship-google-play

Google Play 发布:把 Unity 游戏打成签名 AAB,从注册 Play 开发者账号、创建应用、填应用内容和商品详情、封闭测试送审、凑满 12 名测试者连续 14 天,一直推进到申请正式版并提审。用户要发布、上架、提审到 Google Play;要接 Play 游戏服务(登录、成就、排行榜、云存档)、AdMob 广告、应用内评价或更新、内购;Play 审核被拒、送审被拦、测试人数不够;或者问 AdMob、Play 的钱怎么收(PIN 码、银行账户、税务信息)时使用。

ship-google-play 是什么?

ship-google-play is a Claude Code agent skill that google Play 发布:把 Unity 游戏打成签名 AAB,从注册 Play 开发者账号、创建应用、填应用内容和商品详情、封闭测试送审、凑满 12 名测试者连续 14 天,一直推进到申请正式版并提审。用户要发布、上架、提审到 Google Play;要接 Play 游戏服务(登录、成就、排行榜、云存档)、AdMob 广告、应用内评价或更新、内购;Play 审核被拒、送审被拦、测试人数不够;或者问 AdMob、Play 的钱怎么收(PIN 码、银行账户、税务信息)时使用。.

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/BaronCyrus/ShipMyGame/tree/HEAD/skills/ship-google-play

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Google Play: From Developer Account Registration to Release Submission

Goal: First push the closed test version to "Under review" (in practice, it can pass review on the same day), then meet the testing requirements for personal accounts by gathering enough testers, and finally push the production version to "Under review."

First: Confirm that steps 1–4 of ship-my-game are complete (progress file, channels, health checks, browser). If not, read it first. This channel's progress is recorded in the ## google-play section of the progress file.

Start by asking the user these five things, write the answers into the progress file under [Checklist: Diagnostic Questions]:

  1. Do you have a Play Developer account? Personal or organization? Approximately when was it registered?
  2. Which country or region are you in? This determines whether the merchant account can receive payments Official.
  3. How do you plan to monetize: ads, in-app purchases, paid downloads, or not monetize? This affects which personal information is made public and how trader status is declared.
  4. What is the public HTTPS URL for your privacy policy? What is the public contact email for the store listing?
  5. Do you have an AdMob account? It is recommended to use the same Google account as the Play Developer account.

Then tell the user three things:

  1. Testing Requirement: For personal accounts registered after 2023-11-13, you need at least 12 real testers continuously participating for 14 days in a closed test before going to production, then apply for production access (review usually within 7 days) Official. So from closed test approval to production launch, it takes at least two weeks.

  2. Information made public:

    • Personal accounts will display full legal name, country, and developer email;
    • After monetizing on Google Play (paid apps, in-app purchases), full address is displayed;
    • Personal accounts declared as "trader" will also display phone number and address.

    Clarify this before registration using onboarding.md Section 1.

  3. AAB Upload: AABs are typically tens of MB, but the browser tool only allows single uploads of up to 10 MB. So the first AAB needs to be dragged into the webpage by the user. Subsequent uploads can use the Developer API (not tested in this repository), see automation.md.

User Tasks

TaskPhase
Register: Pay US$25, ID documents, email and phone verification codes, Android device verification (scan QR code using Play Console mobile app), trader status declarationP1
Accept agreements: Developer Distribution Agreement; "Developer Program Policies" and "U.S. Export Laws" statements when creating app; IARC Terms of Service; PGS and Google Cloud terms (when clicking "Use"); Google API Services: User Data PolicyP1, P3, P6
Drag AAB into the upload box on the webpageP4, and for each update (when not using API)
Click "Submit N changes for review": You click when user says "Submit"; if blocked by permission system, user clicksP4, P7
CAPTCHA when creating Google Group; post on Reddit and other communities for mutual testing; join the test with your own accountP5
Confirm sound, PGS login, and overall feel on a real deviceP2, P6
OAuth consent screen "Publish app", PGS "Publish game project"P6
Register AdMob: Country, terms, CAPTCHA, payment and tax informationP6
Agree to publish privacy policy and app-ads.txt on the user's website; user decides if hosting requires paymentP2, P6
Receive payments: AdMob ID verification, PIN code, payment method, U.S. tax information; Play merchant payment profile and bank accountAfter launch

Engineering Requirements

Step 3 of ship-my-game identifies gaps using this table. Details in references/build.md.

ItemRequirementSource
Unitytarget API 36 requires 6000.0.46f1+ or 2022.3.62f1+; 16 KB pages require 6000.0.38f1+ or 2022.3.56f1+, Burst 1.8.21+. Tested with 6000.6.5f1Official; [Tested]
ModulesAndroid Build Support (including OpenJDK, SDK, NDK)—
targetSdk36 (effective 2026-08-31; extended deadline 2026-11-01 has passed). minSdk no lower than 24, tested with 26Official; [Tested]
Architecture and FormatIL2CPP, ARM64 + ARMv7, AAB; include symbol table in AAB[Tested], set by scripts/ShipAndroidBuild.cs
16 KB Memory PagesPackages containing native libraries (all Unity packages include them) must be 16 KB aligned; check after buildOfficial
SigningUpload keystore generated by scripts/make_upload_keystore.sh, stored outside the project; app signing key managed by Google[Tested]
SoundEach scene that starts must have exactly one AudioListener[Tested-Failure] Two games launched without sound due to this issue
AdsUse Google test ad IDs during closed testing; hide ad entry points if ads are not available[Tested]
In-App PurchasesUnity IAP ≥ 4.14.0 or 5.x (Play Billing Library ≥ 8)Official
Privacy PolicyPublic HTTPS page, linked in Play Console and in-game; template templates/privacy-policy.en.htmlOfficial; [Tested]
Sensitive PermissionsMerged manifest should not include unused permissions like photos, videos, contacts, location, etc.Official

Phases

Commands and relative paths (scripts/…, ../ship-my-game/…) are relative to this skill's directory. Console paths use the original English names from the Play Console interface.

P1 Account (if already exists, skip to completion criteria and check each item)

  1. Open https://play.google.com/console , read the page to determine if a developer account exists, and whether it is personal or organization.
  2. If no account: First explain onboarding.md Section 1 "What information will be made public". After user agrees, guide them through registration. Payment, documents, verification codes, and device verification are done by the user Official.
  3. Trader status: Must be declared when creating a new account ("Manage account → Account details → About you"). Existing accounts must do so by 2027-02-01. User decides honestly; you explain the criteria and consequences Official.
  4. On the "Home" page, clear any verification-related tasks, and confirm the "Android developer verification" status (package name is automatically registered when creating a new app) Official.

Completion criteria:

  • No pending verification tasks on the Home page.
  • Progress file records account type, registration time (to determine if the 12-person × 14-day rule applies), and trader status.

P2 Project, Upload Keystore, First AAB

  1. Modify the project per "Engineering Requirements": Copy scripts/ShipAndroidBuild.cs to Assets/Editor/, check AudioListener in every scene.
  2. Generate upload keystore: bash scripts/make_upload_keystore.sh <package_name>, then remind user to back up ~/.shipmygame/keys/<package_name>/ [Tested].
  3. Build: ../ship-my-game/scripts/unity_build.sh <project_directory> Android ShipAndroidBuild.Aab release -shipVersion 1.0.0 -shipVersionCode 1.
    • [Tested]: This script has produced a debug APK on an empty project; similarly configured build scripts have produced signed AABs for two games.
  4. Self-check: Use bundletool to inspect the manifest (targetSdk 36, test ad App ID), confirm symbols are in the AAB, and check 16 KB alignment. Commands in build.md Section 4.
  5. Build a debug APK using ShipAndroidBuild.Apk, ask user to install on their phone, and confirm sound works [Tested: Emulator cannot test sound].
  6. Generate privacy policy using templates/privacy-policy.en.html: Replace all {{placeholders}}, remove AdMob, PGS, and IAP sections not used by the game. After user agrees, publish to a public HTTPS URL and confirm it returns 200 using curl [Tested].

Completion criteria:

  • A signed AAB exists, with versionCode and self-check results recorded in the progress file.
  • User confirmed sound works on a real device.
  • Privacy policy URL returns 200.

P3 Create App, App Content, Store Listing

  1. "Home → Create app": Fill in name, package name (click "Check availability" first), default language, game, free or paid; user checks two statements. Field-by-field details in console.md Section 1 [Tested].
  2. Complete all 11 items in the "Complete game setup" task list on the Dashboard: Privacy Policy, Login Details, Ads, Content Rating, Target Audience, Data Safety, Government Apps, Financial Products and Services, Health, Category and Contact Information, Store Listing. Answers in console.md Section 2 [Tested].
  3. "Monitor and improve → Policies and programs → App content": Clear all "Start declaration" items, especially "Advertising ID". It is not among the 11 items; if not filled, submission will be blocked [Tested-Failure → Fixed].
  4. "Store release → Store settings": Category, up to 5 tags, contact information (website must use the domain where app-ads.txt is located) [Tested].
  5. "Store release → Store listing": Text, icon, feature graphic, screenshots, AI-generated content disclosure. For multiple languages, use "Import translation using AI", then verify per language. See listing.md [Tested].

Completion criteria:

  • The "Complete game setup" block on the Dashboard disappears entirely.
  • No pending items in "App content".
  • Store listing status is "Ready for submission", and all source assets are in publish/google-play/.

P4 Closed Test First Release (Review Gate)

  1. "Test and release → Testing → Closed testing" (default track "Closed testing - Alpha"):

    • Countries/regions: Select "Select all";
    • Testers: Choose Google Groups (recommended) or email list; you can only choose one type;
    • Fill in feedback email.

    See console.md Section 5 [Tested].

  2. "Create new release": First fill in release name and multilingual release notes, click "Save as draft". Then ask user to drag the AAB into the upload box. Poll the page, wait for an entry like "1 (1.0.0)" to appear [Tested].

  3. "Next" → Read "Expand verification details" → "Save" → "Release overview", wait for the quick checks to finish (up to about 14 minutes). Report any issues and fix them first [Tested].

  4. Following the Review Gate, list the content to the user. When user says "Submit", click "Submit N changes for review" → "Submit changes for review"; if blocked by permission system, ask user to click. See review.md Section 1 [Tested].

Completion criteria:

  • Release overview shows "Changes pending review".
  • Progress file records submission time and estimated duration (actual: 10–42 minutes, official: typically within 7 days), and where to check results (release overview).

P5 Recruit Testers, Wait 14 Days (Personal Accounts; Can Run in Parallel with P6)

  1. After approval, go to the "Testers" tab, get two join links from the aria-label of the copy buttons [Tested].
  2. Write recruitment post using templates/testers-recruitment.md. User must complete the final CAPTCHA when creating a Google Group; user posts community posts [Tested]. See review.md Section 2.
  3. Daily, read the "Request production access" card on the Dashboard: "Currently N testers have been participating for M days" [Tested: Card wording].
  4. Release updates based on feedback: Increment versionCode by 1, follow P4 steps 2–4, or use the API in automation.md. Batch changes together for one submission, as resubmitting cancels the ongoing review [Tested].
  5. Record feedback from "Monitor and improve → Ratings and reviews → Test feedback" and corresponding fixes in the progress file for the P7 questionnaire Official.

Completion criteria: Both "At least 12 testers" and "At least 14 days" are checked on the card; progress file contains feedback and fix records.

P6 Platform Capabilities (Parallel with P5)

  1. Play Games Services:

    • Console: Configuration, OAuth consent screen, credentials (create SHA-1 for all signing certificates), achievements (at least 10), leaderboards, testers;
    • Unity: scripts/ShipPgsSetup.cs and scripts/ShipPlayGames.cs;
    • User clicks "Publish app" and "Publish game project".

    See capabilities.md Section 1 [Tested: Console configuration].

  2. AdMob:

    • Create app and ad units, scripts/ShipAds.cs (UMP consent → initialization → rewarded, interstitial, banner);
    • Publish GDPR message, prepare app-ads.txt;
    • Use test IDs during testing, link store after production launch.

    See capabilities.md Section 2 [Tested: Console configuration].

  3. In-App Review, In-App Updates: scripts/ShipPlayReview.cs; In-App Purchases: Unity IAP. See capabilities.md Sections 3 and 4 [Official].

  4. For every capability integrated, update the Data Safety section and privacy policy, and submit together with the next version (P4 steps 2–4) [Tested].

Completion criteria:

  • Each integrated capability has been verified by the user on a real device, installed from the testing track.
  • PGS configuration is published; Data Safety and privacy policy are consistent with the features.
  • Production ad IDs are only recorded in the progress file, not included in test builds.

P7 Apply for Production Access and Release Production Version (Review Gate)

  1. After all three conditions on the card are met, first visit the listed pages to review test data, then draft the three-part questionnaire (9 questions total, each text question max 300 characters) using templates/production-access-answers.md, and have the user confirm each [Tested].
  2. List to the user via the Review Gate: Questionnaire answers, tester count and days, estimated results within 7 days. When user says "Submit", go to "Dashboard → Request production access", click "Request production access", click "Next" for the first two steps, and click "Apply" for the last step. The page must show "We have received your production access request" for it to be submitted [Tested]. Record submission time in the progress file; results will be in the email and the card on the Dashboard.
  3. After approval (email notification to account owner), prepare the production version following review.md Section 6:
    • Switch to production ad IDs and App ID, increment versionCode by 1 (you can build the package while waiting, this package is for production only);
    • Publish PGS configuration first, wait at least 2 hours before releasing the game;
    • "Test and release → Production → 'Create new release'".
  4. Go through the Review Gate again, submit the production version for review, and confirm the page shows "Under review".

Completion criteria:

  • On the release overview, the production version entry appears under "Changes pending review".
  • Progress file records submission time, estimated duration, and where to check (release overview, email).

Waiting Period and Post-Launch

  • Wait for closed test review (actual: tens of minutes): Work on store assets, PGS and AdMob console configuration.
  • Wait 14 days: Daily check the card for tester count and days; release 1–2 updates based on feedback; integrate capabilities during this time.
  • Wait for production access review (about 7 days): Build the production ad package and verify checklist (review.md Section 6); prepare store promotion assets.
  • Post-launch: Link the store in AdMob and complete app-ads.txt verification (capabilities.md Section 2.7); closed test testers will also receive the production version with real ads; pausing the testing track does not block this (review.md Section 6). Monitor crash rate and ANR in Android vitals. From 2027-02, memory metrics will be evaluated; games with DEX exceeding 50 MB must also optimize code (Official). Increment versionCode with every update, batch changes for one submission.
  • Receive payments: When AdMob balance reaches $10, verify identity and address (PIN code sent by postal mail, about 3 weeks). When balance reaches $100, payments are sent around the 21st of each month. For in-app purchases, first create a merchant payment profile, add a bank account, and payments for the previous month are made starting on the 15th of each month. See payouts.md.
  • Rejection or blocking: See review.md Section 4 and troubleshooting.md.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能