android-playstore-scan

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Android Play Store Scanner

Android Play Store 扫描器

ANALYSIS ONLY - Scans your Android project and generates a comprehensive Play Console setup checklist. Does NOT modify any files.
仅分析 - 扫描你的 Android 项目并生成一份全面的 Play Console 配置清单。不会修改任何文件。

Overview

概述

Purpose:
  • Analyze project to detect app features and requirements
  • Pre-fill Play Console setup answers based on code analysis
  • Identify missing configurations (privacy policy, etc.)
  • Generate actionable checklist for Play Console setup
What this skill does:
  1. Scans AndroidManifest.xml for permissions and features
  2. Analyzes build.gradle for SDKs and dependencies
  3. Detects Health Connect, ads, analytics
  4. Checks for privacy policy URL
  5. Generates
    PLAY_CONSOLE_SETUP.md
    with pre-filled answers
  6. Provides recommendations for missing items
What this skill does NOT do:
  • ❌ Does not create or modify any project files
  • ❌ Does not setup GitHub Actions or workflows
  • ❌ Does not generate privacy policies (use
    /devtools:privacy-policy-generate
    )
  • ❌ Does not configure signing or release builds
目的:
  • 分析项目,检测应用功能和需求
  • 根据代码分析结果预填 Play Console 配置答案
  • 识别缺失的配置(隐私政策等)
  • 生成可执行的 Play Console 配置清单
此 skill 的作用:
  1. 扫描 AndroidManifest.xml,检测权限和功能
  2. 分析 build.gradle,检测 SDK 和依赖项
  3. 检测 Health Connect、广告和分析功能
  4. 检查隐私政策 URL
  5. 生成
    PLAY_CONSOLE_SETUP.md
    ,其中包含预填答案
  6. 针对缺失项提供建议
此 skill 不执行:
  • ❌ 不创建或修改任何项目文件
  • ❌ 不设置 GitHub Actions 或工作流
  • ❌ 不生成隐私政策(使用
    /devtools:privacy-policy-generate
    )
  • ❌ 不配置签名或发布构建

Prerequisites

前置条件

  • Android project with AndroidManifest.xml
  • Build configuration files (build.gradle.kts)
  • 包含 AndroidManifest.xml 的 Android 项目
  • 构建配置文件(build.gradle.kts)

Inputs

输入

InputRequiredDefaultDescription
project_pathYes.Android project root
输入必填默认值描述
project_path是.Android 项目根目录

Process

流程

Step 1: Scan AndroidManifest.xml

第 1 步:扫描 AndroidManifest.xml

bash
echo "📱 Scanning AndroidManifest.xml..."
bash
echo "📱 Scanning AndroidManifest.xml..."

Get package name

Get package name

PACKAGE_NAME=$(grep "package=" app/src/main/AndroidManifest.xml | head -1 | sed 's/.package="([^"])".*/\1/') echo " Package: $PACKAGE_NAME"
PACKAGE_NAME=$(grep "package=" app/src/main/AndroidManifest.xml | head -1 | sed 's/.package="([^"])".*/\1/') echo " Package: $PACKAGE_NAME"

Get app name

Get app name

APP_NAME=$(grep 'name="app_name"' app/src/main/res/values/strings.xml 2>/dev/null | sed 's/.>([^<])<.*/\1/' || echo "Unknown") echo " App name: $APP_NAME"
APP_NAME=$(grep 'name="app_name"' app/src/main/res/values/strings.xml 2>/dev/null | sed 's/.>([^<])<.*/\1/' || echo "Unknown") echo " App name: $APP_NAME"

Check permissions

Check permissions

echo " Scanning permissions..." PERMISSIONS=$(grep "<uses-permission" app/src/main/AndroidManifest.xml | sed 's/.android:name="([^"])".*/\1/')
echo " Scanning permissions..." PERMISSIONS=$(grep "<uses-permission" app/src/main/AndroidManifest.xml | sed 's/.android:name="([^"])".*/\1/')

Detect features

Detect features

INTERNET=$(echo "$PERMISSIONS" | grep -q "INTERNET" && echo "Yes" || echo "No") LOCATION=$(echo "$PERMISSIONS" | grep -q "LOCATION" && echo "Yes" || echo "No") CAMERA=$(echo "$PERMISSIONS" | grep -q "CAMERA" && echo "Yes" || echo "No") HEALTH=$(echo "$PERMISSIONS" | grep -q "health.permission" && echo "Yes" || echo "No")
echo " Internet: $INTERNET" echo " Location: $LOCATION" echo " Camera: $CAMERA" echo " Health Connect: $HEALTH"
undefined
INTERNET=$(echo "$PERMISSIONS" | grep -q "INTERNET" && echo "Yes" || echo "No") LOCATION=$(echo "$PERMISSIONS" | grep -q "LOCATION" && echo "Yes" || echo "No") CAMERA=$(echo "$PERMISSIONS" | grep -q "CAMERA" && echo "Yes" || echo "No") HEALTH=$(echo "$PERMISSIONS" | grep -q "health.permission" && echo "Yes" || echo "No")
echo " Internet: $INTERNET" echo " Location: $LOCATION" echo " Camera: $CAMERA" echo " Health Connect: $HEALTH"
undefined

Step 2: Analyze Dependencies

第 2 步:分析依赖项

bash
echo "📦 Scanning build.gradle.kts..."
bash
echo "📦 Scanning build.gradle.kts..."

Check for ads

Check for ads

ADS_DETECTED="No" if grep -q "admob" app/build.gradle.kts 2>/dev/null; then ADS_DETECTED="Yes (AdMob)" elif grep -q "facebook-ads" app/build.gradle.kts 2>/dev/null; then ADS_DETECTED="Yes (Facebook Audience Network)" fi echo " Ads: $ADS_DETECTED"
ADS_DETECTED="No" if grep -q "admob" app/build.gradle.kts 2>/dev/null; then ADS_DETECTED="Yes (AdMob)" elif grep -q "facebook-ads" app/build.gradle.kts 2>/dev/null; then ADS_DETECTED="Yes (Facebook Audience Network)" fi echo " Ads: $ADS_DETECTED"

Check for analytics

Check for analytics

ANALYTICS_DETECTED="" grep -q "firebase-analytics" app/build.gradle.kts 2>/dev/null && ANALYTICS_DETECTED="Firebase Analytics" grep -q "google-analytics" app/build.gradle.kts 2>/dev/null && ANALYTICS_DETECTED="${ANALYTICS_DETECTED} Google Analytics" echo " Analytics: ${ANALYTICS_DETECTED:-None}"
ANALYTICS_DETECTED="" grep -q "firebase-analytics" app/build.gradle.kts 2>/dev/null && ANALYTICS_DETECTED="Firebase Analytics" grep -q "google-analytics" app/build.gradle.kts 2>/dev/null && ANALYTICS_DETECTED="${ANALYTICS_DETECTED} Google Analytics" echo " Analytics: ${ANALYTICS_DETECTED:-None}"

Check for payments

Check for payments

PAYMENTS="No" grep -q "billing" app/build.gradle.kts 2>/dev/null && PAYMENTS="Yes (Google Play Billing)" echo " In-app purchases: $PAYMENTS"
PAYMENTS="No" grep -q "billing" app/build.gradle.kts 2>/dev/null && PAYMENTS="Yes (Google Play Billing)" echo " In-app purchases: $PAYMENTS"

Check for auth

Check for auth

AUTH_DETECTED="" grep -q "firebase-auth" app/build.gradle.kts 2>/dev/null && AUTH_DETECTED="Firebase Auth" grep -q "play-services-auth" app/build.gradle.kts 2>/dev/null && AUTH_DETECTED="${AUTH_DETECTED} Google Sign-In" echo " Authentication: ${AUTH_DETECTED:-None detected}"
undefined
AUTH_DETECTED="" grep -q "firebase-auth" app/build.gradle.kts 2>/dev/null && AUTH_DETECTED="Firebase Auth" grep -q "play-services-auth" app/build.gradle.kts 2>/dev/null && AUTH_DETECTED="${AUTH_DETECTED} Google Sign-In" echo " Authentication: ${AUTH_DETECTED:-None detected}"
undefined

Step 3: Check Privacy Policy

第 3 步:检查隐私政策

bash
echo "🔒 Checking for privacy policy..."

PRIVACY_POLICY_URL=""
bash
echo "🔒 Checking for privacy policy..."

PRIVACY_POLICY_URL=""

Check common locations

Check common locations

if [ -f docs/privacy-policy.md ]; then PRIVACY_POLICY_URL="https://$(git config remote.origin.url | sed 's/.github.com[:/](.).git/\1/')/privacy-policy" echo " ✓ Found: docs/privacy-policy.md" echo " Suggested URL: $PRIVACY_POLICY_URL" elif grep -q "privacy" README.md 2>/dev/null; then echo " ⚠️ Privacy policy mentioned in README but not found in docs/" else echo " ❌ Privacy policy not found" PRIVACY_POLICY_URL="⚠️ ACTION REQUIRED" fi
undefined
if [ -f docs/privacy-policy.md ]; then PRIVACY_POLICY_URL="https://$(git config remote.origin.url | sed 's/.github.com[:/](.).git/\1/')/privacy-policy" echo " ✓ Found: docs/privacy-policy.md" echo " Suggested URL: $PRIVACY_POLICY_URL" elif grep -q "privacy" README.md 2>/dev/null; then echo " ⚠️ Privacy policy mentioned in README but not found in docs/" else echo " ❌ Privacy policy not found" PRIVACY_POLICY_URL="⚠️ ACTION REQUIRED" fi
undefined

Step 4: Detect Health Connect Data Types

第 4 步:检测 Health Connect 数据类型

If Health Connect is detected:
bash
if [ "$HEALTH" = "Yes" ]; then
    echo "💚 Analyzing Health Connect integration..."

    HEALTH_DATA_TYPES=""
    grep -q "STEPS" app/src/main/AndroidManifest.xml && HEALTH_DATA_TYPES="${HEALTH_DATA_TYPES}- Steps (read/write)\n"
    grep -q "HEART_RATE" app/src/main/AndroidManifest.xml && HEALTH_DATA_TYPES="${HEALTH_DATA_TYPES}- Heart rate (read)\n"
    grep -q "SLEEP" app/src/main/AndroidManifest.xml && HEALTH_DATA_TYPES="${HEALTH_DATA_TYPES}- Sleep sessions (read)\n"
    grep -q "EXERCISE" app/src/main/AndroidManifest.xml && HEALTH_DATA_TYPES="${HEALTH_DATA_TYPES}- Exercise sessions (read/write)\n"

    echo -e "  Health data types:\n$HEALTH_DATA_TYPES"
fi
如果检测到 Health Connect:
bash
if [ "$HEALTH" = "Yes" ]; then
    echo "💚 Analyzing Health Connect integration..."

    HEALTH_DATA_TYPES=""
    grep -q "STEPS" app/src/main/AndroidManifest.xml && HEALTH_DATA_TYPES="${HEALTH_DATA_TYPES}- Steps (read/write)\n"
    grep -q "HEART_RATE" app/src/main/AndroidManifest.xml && HEALTH_DATA_TYPES="${HEALTH_DATA_TYPES}- Heart rate (read)\n"
    grep -q "SLEEP" app/src/main/AndroidManifest.xml && HEALTH_DATA_TYPES="${HEALTH_DATA_TYPES}- Sleep sessions (read)\n"
    grep -q "EXERCISE" app/src/main/AndroidManifest.xml && HEALTH_DATA_TYPES="${HEALTH_DATA_TYPES}- Exercise sessions (read/write)\n"

    echo -e "  Health data types:\n$HEALTH_DATA_TYPES"
fi

Step 5: Estimate Content Rating

第 5 步:估算内容分级

bash
echo "🎯 Estimating content rating..."
bash
echo "🎯 Estimating content rating..."

Simple heuristic - actual rating requires IARC questionnaire

Simple heuristic - actual rating requires IARC questionnaire

ESTIMATED_RATING="Everyone (E)"
if grep -qi "violence|weapon|blood" app/src/main/res/values/strings.xml 2>/dev/null; then ESTIMATED_RATING="Teen (T) - Violence detected" elif grep -qi "gambling|casino|lottery" app/src/main/res/values/strings.xml 2>/dev/null; then ESTIMATED_RATING="Mature (M) - Gambling detected" fi
echo " Estimated: $ESTIMATED_RATING" echo " Note: Complete official IARC questionnaire in Play Console"
undefined
ESTIMATED_RATING="Everyone (E)"
if grep -qi "violence|weapon|blood" app/src/main/res/values/strings.xml 2>/dev/null; then ESTIMATED_RATING="Teen (T) - Violence detected" elif grep -qi "gambling|casino|lottery" app/src/main/res/values/strings.xml 2>/dev/null; then ESTIMATED_RATING="Mature (M) - Gambling detected" fi
echo " Estimated: $ESTIMATED_RATING" echo " Note: Complete official IARC questionnaire in Play Console"
undefined

Step 6: Generate PLAY_CONSOLE_SETUP.md

第 6 步:生成 PLAY_CONSOLE_SETUP.md

Create comprehensive setup guide:
markdown
undefined
创建全面的配置指南:
markdown
undefined

Play Console Setup Guide for: {APP_NAME}

Play Console Setup Guide for: {APP_NAME}

Generated: {CURRENT_DATE}

Generated: {CURRENT_DATE}

Summary

Summary

PropertyValue
Package Name{PACKAGE_NAME}
App Name{APP_NAME}
Privacy Policy{PRIVACY_POLICY_STATUS}
Uses Health Connect{HEALTH_DETECTED}
Contains Ads{ADS_DETECTED}
In-App Purchases{IAP_DETECTED}

PropertyValue
Package Name{PACKAGE_NAME}
App Name{APP_NAME}
Privacy Policy{PRIVACY_POLICY_STATUS}
Uses Health Connect{HEALTH_DETECTED}
Contains Ads{ADS_DETECTED}
In-App Purchases{IAP_DETECTED}

1. Privacy Policy

1. Privacy Policy

Status: {PRIVACY_STATUS}
{IF_NOT_FOUND} ⚠️ ACTION REQUIRED: No privacy policy found
Recommended action:
/devtools:privacy-policy-generate
This will create a privacy policy at
docs/privacy-policy.md
ready for GitHub Pages. {ELSE} ✓ Privacy policy found:
docs/privacy-policy.md
Suggested URL:
{PRIVACY_URL}
Next steps:
  1. Enable GitHub Pages (Settings → Pages → Source: docs/)
  2. Wait 1-2 minutes for deployment
  3. Verify URL is accessible
  4. Add URL to Play Console {END_IF}

Status: {PRIVACY_STATUS}
{IF_NOT_FOUND} ⚠️ ACTION REQUIRED: No privacy policy found
Recommended action:
/devtools:privacy-policy-generate
This will create a privacy policy at
docs/privacy-policy.md
ready for GitHub Pages. {ELSE} ✓ Privacy policy found:
docs/privacy-policy.md
Suggested URL:
{PRIVACY_URL}
Next steps:
  1. Enable GitHub Pages (Settings → Pages → Source: docs/)
  2. Wait 1-2 minutes for deployment
  3. Verify URL is accessible
  4. Add URL to Play Console {END_IF}

2. App Access

2. App Access

Detected: {ACCESS_ANALYSIS}
{IF_AUTH_DETECTED} Answer: "Yes, some functionality requires special access"
Instructions to provide:
  • Test account credentials (if applicable)
  • How to access restricted features {ELSE} Answer: "All functionality available without special access" {END_IF}

Detected: {ACCESS_ANALYSIS}
{IF_AUTH_DETECTED} Answer: "Yes, some functionality requires special access"
Instructions to provide:
  • Test account credentials (if applicable)
  • How to access restricted features {ELSE} Answer: "All functionality available without special access" {END_IF}

3. Ads Declaration

3. Ads Declaration

Detected SDKs: {ADS_DETECTED}
{IF_ADS} Answer: "Yes, my app contains ads"
Ad networks: {AD_NETWORKS_LIST} {ELSE} Answer: "No, my app does not contain ads" {END_IF}

Detected SDKs: {ADS_DETECTED}
{IF_ADS} Answer: "Yes, my app contains ads"
Ad networks: {AD_NETWORKS_LIST} {ELSE} Answer: "No, my app does not contain ads" {END_IF}

4. Content Rating

4. Content Rating

Estimated Rating: {ESTIMATED_RATING}
Action Required:
  1. Go to Play Console → App content → Content rating
  2. Complete IARC questionnaire
  3. Answer questions about:
    • Violence
    • Sexual content
    • Profanity
    • Controlled substances
    • Gambling
    • User-generated content

Estimated Rating: {ESTIMATED_RATING}
Action Required:
  1. Go to Play Console → App content → Content rating
  2. Complete IARC questionnaire
  3. Answer questions about:
    • Violence
    • Sexual content
    • Profanity
    • Controlled substances
    • Gambling
    • User-generated content

5. Data Safety Form

5. Data Safety Form

Data Collection Detected:
Data TypeCollectedPurpose
{IF_HEALTH}
Health & FitnessYesHealth Connect integration
{END_IF}
{IF_LOCATION}
LocationYes{LOCATION_PURPOSE}
{END_IF}
{IF_ANALYTICS}
App activityYesAnalytics ({ANALYTICS_SERVICES})
{END_IF}
Device ID{DEVICE_ID_COLLECTED}{DEVICE_ID_PURPOSE}
Security Practices:
PracticeStatusNotes
Data encrypted in transit{HTTPS_DETECTED}HTTPS detected in network config
Data encrypted at rest⚠️ User to confirmDepends on implementation
Users can request deletion⚠️ User to confirmAdd if applicable
Recommended answers:
  • Data is collected: {DATA_COLLECTED}
  • Data is shared: {DATA_SHARED}
  • Data collection is optional: {DATA_OPTIONAL}

{IF_HEALTH}
Data Collection Detected:
Data TypeCollectedPurpose
{IF_HEALTH}
Health & FitnessYesHealth Connect integration
{END_IF}
{IF_LOCATION}
LocationYes{LOCATION_PURPOSE}
{END_IF}
{IF_ANALYTICS}
App activityYesAnalytics ({ANALYTICS_SERVICES})
{END_IF}
Device ID{DEVICE_ID_COLLECTED}{DEVICE_ID_PURPOSE}
Security Practices:
PracticeStatusNotes
Data encrypted in transit{HTTPS_DETECTED}HTTPS detected in network config
Data encrypted at rest⚠️ User to confirmDepends on implementation
Users can request deletion⚠️ User to confirmAdd if applicable
Recommended answers:
  • Data is collected: {DATA_COLLECTED}
  • Data is shared: {DATA_SHARED}
  • Data collection is optional: {DATA_OPTIONAL}

{IF_HEALTH}

6. Health App Declaration

6. Health App Declaration

⚠️ REQUIRED: Your app uses Health Connect
Health Data Types Detected: {HEALTH_DATA_TYPES_LIST}
Action Required:
  1. Go to Play Console → App content → Health
  2. Select "Yes, my app accesses health data"
  3. List all health data types your app accesses
  4. Explain how each data type is used
  5. Confirm privacy policy includes health data disclosure
Privacy Policy Requirements:
  • ✅ Must explain what health data is accessed
  • ✅ Must explain why it's accessed
  • ✅ Must explain how it's stored
  • ✅ Must explain if it's shared with third parties
Verify privacy policy includes Health Data section {END_IF}

⚠️ REQUIRED: Your app uses Health Connect
Health Data Types Detected: {HEALTH_DATA_TYPES_LIST}
Action Required:
  1. Go to Play Console → App content → Health
  2. Select "Yes, my app accesses health data"
  3. List all health data types your app accesses
  4. Explain how each data type is used
  5. Confirm privacy policy includes health data disclosure
Privacy Policy Requirements:
  • ✅ Must explain what health data is accessed
  • ✅ Must explain why it's accessed
  • ✅ Must explain how it's stored
  • ✅ Must explain if it's shared with third parties
Verify privacy policy includes Health Data section {END_IF}

7. Store Listing (Draft)

7. Store Listing (Draft)

Title: {APP_NAME}
Short Description (80 chars): {GENERATED_SHORT_DESC}
Full Description: {GENERATED_FULL_DESC}
⚠️ Review and customize these descriptions before submitting

Title: {APP_NAME}
Short Description (80 chars): {GENERATED_SHORT_DESC}
Full Description: {GENERATED_FULL_DESC}
⚠️ Review and customize these descriptions before submitting

8. First Upload Checklist

8. First Upload Checklist

Before you can use automated deployments, you must manually upload your first release:
Before you can use automated deployments, you must manually upload your first release:

Preparation

Preparation

  • Run
    /devtools:android-keystore-generation
    (if not done)
  • Run
    /devtools:android-signing-config
  • Build release AAB:
    ./gradlew bundleRelease
  • Verify AAB is signed:
    jarsigner -verify -verbose app/build/outputs/bundle/release/app-release.aab
  • Run
    /devtools:android-keystore-generation
    (if not done)
  • Run
    /devtools:android-signing-config
  • Build release AAB:
    ./gradlew bundleRelease
  • Verify AAB is signed:
    jarsigner -verify -verbose app/build/outputs/bundle/release/app-release.aab

Play Console First Upload

Play Console First Upload

  • Go to Play Console → Release → Internal testing
  • Click Create new release
  • Upload
    app-release.aab
  • Complete store listing (title, description, screenshots)
  • Complete all required declarations above
  • Review and publish to internal testing
  • Go to Play Console → Release → Internal testing
  • Click Create new release
  • Upload
    app-release.aab
  • Complete store listing (title, description, screenshots)
  • Complete all required declarations above
  • Review and publish to internal testing

Important Notes

Important Notes

⚠️ First Upload Keystore = CI Keystore
The keystore you use for the first upload becomes your upload key. You must use the same keystore in CI/CD.
After first upload:
  • Note the SHA-1 fingerprint from Play Console
  • Use the same production keystore for GitHub Actions
  • Do NOT generate a different keystore for CI
⚠️ First Upload Keystore = CI Keystore
The keystore you use for the first upload becomes your upload key. You must use the same keystore in CI/CD.
After first upload:
  • Note the SHA-1 fingerprint from Play Console
  • Use the same production keystore for GitHub Actions
  • Do NOT generate a different keystore for CI

Play App Signing

Play App Signing

How it works:
  1. First upload: Google creates the app signing key (permanent)
  2. Your keystore becomes the upload key (can be reset if lost)
  3. Google re-signs your AAB with the app signing key before distribution
No action needed - Play App Signing is automatic for new apps.

How it works:
  1. First upload: Google creates the app signing key (permanent)
  2. Your keystore becomes the upload key (can be reset if lost)
  3. Google re-signs your AAB with the app signing key before distribution
No action needed - Play App Signing is automatic for new apps.

9. Next Steps

9. Next Steps

After completing the checklist above:
bash
undefined
After completing the checklist above:
bash
undefined

Setup automated Play Store publishing

Setup automated Play Store publishing

/devtools:android-playstore-setup

This will:
- Configure Gradle Play Publisher plugin
- Create GitHub Actions workflows
- Setup release automation

---
/devtools:android-playstore-setup

This will:
- Configure Gradle Play Publisher plugin
- Create GitHub Actions workflows
- Setup release automation

---

10. Track Differences

10. Track Differences

Understanding Play Store release tracks:
TrackAudienceUse CaseReview Time
InternalUp to 100 testersQuick testingInstant
Closed (Alpha)Invited testersBeta testing< 24h
Open (Beta)Anyone can joinPublic beta< 24h
ProductionAll usersFull release1-7 days
Recommended flow:
  1. Internal → Verify app works
  2. Beta → Wider testing (optional)
  3. Production → Full release

Understanding Play Store release tracks:
TrackAudienceUse CaseReview Time
InternalUp to 100 testersQuick testingInstant
Closed (Alpha)Invited testersBeta testing< 24h
Open (Beta)Anyone can joinPublic beta< 24h
ProductionAll usersFull release1-7 days
Recommended flow:
  1. Internal → Verify app works
  2. Beta → Wider testing (optional)
  3. Production → Full release

Validation

Validation

Run validation checks:
bash
undefined
Run validation checks:
bash
undefined

Validate Play Store API connection

Validate Play Store API connection

python3 scripts/validate-playstore.py SERVICE_ACCOUNT.json {PACKAGE_NAME}

Expected: ✅ All validations passed

---
python3 scripts/validate-playstore.py SERVICE_ACCOUNT.json {PACKAGE_NAME}

Expected: ✅ All validations passed

---

Resources

Resources

Verification

验证

MANDATORY: Run these commands:
bash
undefined
必须执行: 运行以下命令:
bash
undefined

Verify setup guide created

Verify setup guide created

test -f PLAY_CONSOLE_SETUP.md && echo "✓ Setup guide created"
test -f PLAY_CONSOLE_SETUP.md && echo "✓ Setup guide created"

Verify key sections present

Verify key sections present

grep -q "Privacy Policy" PLAY_CONSOLE_SETUP.md && echo "✓ Privacy policy section" grep -q "Data Safety" PLAY_CONSOLE_SETUP.md && echo "✓ Data safety section" grep -q "First Upload" PLAY_CONSOLE_SETUP.md && echo "✓ First upload checklist"

**Expected output:**
- ✓ Setup guide created
- ✓ Privacy policy section
- ✓ Data safety section
- ✓ First upload checklist
grep -q "Privacy Policy" PLAY_CONSOLE_SETUP.md && echo "✓ Privacy policy section" grep -q "Data Safety" PLAY_CONSOLE_SETUP.md && echo "✓ Data safety section" grep -q "First Upload" PLAY_CONSOLE_SETUP.md && echo "✓ First upload checklist"

**预期输出:**
- ✓ 配置指南已创建
- ✓ 隐私政策部分
- ✓ 数据安全部分
- ✓ 首次上传清单

Outputs

输出

OutputLocationDescription
Setup checklistPLAY_CONSOLE_SETUP.mdComplete Play Console setup guide
输出位置描述
配置清单PLAY_CONSOLE_SETUP.md完整的 Play Console 配置指南

What Happens Next

接下来会发生什么

After reviewing
PLAY_CONSOLE_SETUP.md
:
  1. Address action items (privacy policy, missing configs)
  2. Run setup skill:
    /devtools:android-playstore-setup
  3. This will execute the actual setup based on the checklist
审阅
PLAY_CONSOLE_SETUP.md
后:
  1. 处理待办事项(隐私政策、缺失配置等)
  2. 运行配置 skill:
    /devtools:android-playstore-setup
  3. 这会根据清单执行实际配置

Detected vs. Actual

检测结果与实际情况

This skill detects:
  • ✅ Declared permissions in manifest
  • ✅ Dependencies in build.gradle
  • ✅ Health Connect integration
  • ✅ Common SDKs (ads, analytics)
This skill cannot detect:
  • ❌ Runtime permission usage patterns
  • ❌ Actual network calls and endpoints
  • ❌ User-generated content handling
  • ❌ Content rating accuracy
Always review the generated checklist and adjust based on your actual implementation.
此 skill 可检测:
  • ✅ manifest 中声明的权限
  • ✅ build.gradle 中的依赖项
  • ✅ Health Connect 集成
  • ✅ 常见 SDK(广告、分析)
此 skill 无法检测:
  • ❌ 运行时权限使用模式
  • ❌ 实际网络调用和端点
  • ❌ 用户生成内容的处理方式
  • ❌ 内容分级的准确性
务必审阅生成的清单,并根据实际实现进行调整。

Troubleshooting

故障排除

"Package name not found"

“找不到包名”

Cause: AndroidManifest.xml format issue Fix: Verify
package
attribute exists in
<manifest>
tag
原因: AndroidManifest.xml 格式问题 修复方法: 确认
<manifest>
标签中存在
package
属性

"No permissions detected"

“未检测到权限”

Cause: Permissions declared in Gradle instead of manifest Fix: Check build.gradle.kts for permission declarations
原因: 权限在 Gradle 而非 manifest 中声明 修复方法: 检查 build.gradle.kts 中是否有权限声明

"Privacy policy detection failed"

“隐私政策检测失败”

Cause: Privacy policy in non-standard location Fix: Update scan or manually specify URL in generated checklist
原因: 隐私政策位于非标准位置 修复方法: 更新扫描逻辑,或在生成的清单中手动指定 URL

Completion Criteria

完成标准

  • PLAY_CONSOLE_SETUP.md
    created
  • All project features detected correctly
  • Privacy policy status identified
  • Health Connect integration detected (if applicable)
  • Action items clearly marked
  • Ready to proceed with actual setup
  • 已创建
    PLAY_CONSOLE_SETUP.md
  • 已正确检测所有项目功能
  • 已确定隐私政策状态
  • 已检测 Health Connect 集成(如适用)
  • 已清晰标记待办事项
  • 已准备好进行实际配置