mcpField
A
android-playstore-scan

android-playstore-scan

github.com/hitoshura25開発353 回インストール41 週間前に更新
リポジトリ

android-playstore-scan について

Android Play Store Scanner は、Android 開発者向けの読み取り専用分析スキルで、プロジェクトのコードから Play Console の設定チェックリストを作成します。マニフェストや依存関係、一般的な SDK、プライバシーポリシーの有無を確認し、ファイルは変更しません。

主な機能

  1. 01AndroidManifest.xml の権限と機能をスキャン
  2. 02Gradle 設定と依存関係を分析
  3. 03Health Connect、広告、分析 SDK を検出
  4. 04プライバシーポリシーと URL を確認
  5. 05Play Console 設定チェックリストを生成

活用シーン

  1. 01アプリの Play Console 設定準備
  2. 02宣言済み権限と連携の確認
  3. 03プライバシーポリシーなど不足項目の特定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hitoshura25/claude-devtools --skill android-playstore-scan

インストール後、Claude Code で/android-playstore-scanを入力して読み込まれたか確認します。

詳細

Android Play Store スキャナー

分析のみ — Android プロジェクトをスキャンし、Play Console のセットアップに必要な包括的なチェックリストを生成します。ファイルは変更しません。

概要

目的:

  • プロジェクトを分析して、アプリの機能と要件を検出します
  • コード分析に基づいて、Play Console のセットアップ時の回答を事前入力します
  • 不足している設定(プライバシーポリシーなど)を特定します
  • Play Console のセットアップに役立つチェックリストを生成します

このスキルが行うこと:

  1. AndroidManifest.xml をスキャンして、権限と機能を確認します
  2. build.gradle を分析して、SDK と依存関係を確認します
  3. Health Connect、広告、分析機能を検出します
  4. プライバシーポリシーの URL を確認します
  5. 事前入力済みの回答を含む PLAY_CONSOLE_SETUP.md を生成します
  6. 不足項目について推奨事項を提示します

このスキルが行わないこと:

  • ❌ プロジェクトファイルの作成や変更は行いません
  • ❌ GitHub Actions やワークフローのセットアップは行いません
  • ❌ プライバシーポリシーの生成は行いません(/devtools:privacy-policy-generate を使用してください)
  • ❌ 署名やリリースビルドの設定は行いません

前提条件

  • AndroidManifest.xml を含む Android プロジェクト
  • ビルド設定ファイル(build.gradle.kts)

入力

入力必須デフォルト説明
project_pathはい.Android プロジェクトのルート

手順

ステップ 1:AndroidManifest.xml をスキャン
echo "📱 Scanning AndroidManifest.xml..."

# Get package name
PACKAGE_NAME=$(grep "package=" app/src/main/AndroidManifest.xml | head -1 | sed 's/.*package="\([^"]*\)".*/\1/')
echo "  Package: $PACKAGE_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"

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

# 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"
ステップ 2:依存関係を分析
echo "📦 Scanning build.gradle.kts..."

# 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"

# 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}"

# 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"

# 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}"
ステップ 3:プライバシーポリシーを確認
echo "🔒 Checking for privacy policy..."

PRIVACY_POLICY_URL=""
# 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
ステップ 4:Health Connect のデータ型を検出

Health Connect が検出された場合:

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
ステップ 5:コンテンツ レーティングを推定
echo "🎯 Estimating content rating..."

# 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"
ステップ 6:PLAY_CONSOLE_SETUP.md を生成

包括的なセットアップガイドを作成します:

# Play Console Setup Guide for: {APP_NAME}

Generated: {CURRENT_DATE}

---

## Summary

| Property | Value |
|----------|-------|
| **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

**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

**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

**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

**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

**Data Collection Detected:**

| Data Type | Collected | Purpose |
|-----------|-----------|---------|
{IF_HEALTH}
| Health & Fitness | Yes | Health Connect integration |
{END_IF}
{IF_LOCATION}
| Location | Yes | {LOCATION_PURPOSE} |
{END_IF}
{IF_ANALYTICS}
| App activity | Yes | Analytics ({ANALYTICS_SERVICES}) |
{END_IF}
| Device ID | {DEVICE_ID_COLLECTED} | {DEVICE_ID_PURPOSE} |

**Security Practices:**

| Practice | Status | Notes |
|----------|--------|-------|
| Data encrypted in transit | {HTTPS_DETECTED} | HTTPS detected in network config |
| Data encrypted at rest | ⚠️ User to confirm | Depends on implementation |
| Users can request deletion | ⚠️ User to confirm | Add 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

**⚠️ 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)

**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

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

### 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`

### 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

### 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

### 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.

---

## 9. Next Steps

After completing the checklist above:

```bash
# Setup automated Play Store publishing
/devtools:android-playstore-setup

これにより、以下が実行されます:

  • Gradle Play Publisher プラグインを設定します
  • GitHub Actions ワークフローを作成します
  • リリースの自動化をセットアップします

10. トラックの違い

Play Store のリリーストラックについて理解します:

トラック対象ユーザー用途審査時間
Internal最大 100 人のテスター迅速なテスト即時
Closed (Alpha)招待されたテスターベータテスト< 24h
Open (Beta)誰でも参加可能パブリックベータ< 24h
Productionすべてのユーザー正式リリース1-7 days

推奨される流れ:

  1. Internal → アプリが動作することを確認
  2. Beta → より広範なテスト(任意)
  3. Production → 正式リリース

検証

検証チェックを実行します:

# Validate Play Store API connection
python3 scripts/validate-playstore.py SERVICE_ACCOUNT.json {PACKAGE_NAME}

期待される結果:✅ すべての検証に合格


リソース


android-playstore-scan v1.0.0 によって生成


## Verification

**MANDATORY:** Run these commands:

```bash
# Verify setup guide created
test -f PLAY_CONSOLE_SETUP.md && echo "✓ Setup guide created"

# 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"

期待される出力:

  • ✓ セットアップガイドが作成されます
  • ✓ プライバシーポリシーのセクション
  • ✓ データ セーフティのセクション
  • ✓ 初回アップロードのチェックリスト

出力

出力場所説明
セットアップチェックリストPLAY_CONSOLE_SETUP.mdPlay Console の完全なセットアップガイド

次の手順

PLAY_CONSOLE_SETUP.md を確認した後:

  1. 対応項目に取り組む(プライバシーポリシー、不足している設定)
  2. セットアップスキルを実行:
    /devtools:android-playstore-setup
    
  3. これにより、チェックリストに基づいて実際のセットアップが実行されます

検出内容と実際の状況

このスキルで検出できる内容:

  • ✅ マニフェストで宣言された権限
  • ✅ build.gradle の依存関係
  • ✅ Health Connect の統合
  • ✅ 一般的な SDK(広告、分析機能)

このスキルでは検出できない内容:

  • ❌ 実行時の権限使用パターン
  • ❌ 実際のネットワーク呼び出しとエンドポイント
  • ❌ ユーザー生成コンテンツの取り扱い
  • ❌ コンテンツ レーティングの正確性

生成されたチェックリストは必ず確認し、実際の実装に合わせて調整してください。

トラブルシューティング

「Package name not found」

原因: AndroidManifest.xml の形式に問題があります 対処法: <manifest> タグに package 属性があることを確認してください

「権限が検出されません」

原因: マニフェストではなく、Gradle で権限が宣言されています
解決方法: build.gradle.kts で権限の宣言を確認してください

「プライバシーポリシーの検出に失敗しました」

原因: プライバシーポリシーが標準以外の場所にあります
解決方法: スキャンを更新するか、生成されたチェックリストで URL を手動で指定してください

完了条件

  • PLAY_CONSOLE_SETUP.md が作成されている
  • すべてのプロジェクト機能が正しく検出されている
  • プライバシーポリシーのステータスが特定されている
  • Health Connect の統合が検出されている(該当する場合)
  • 対応項目が明確に示されている
  • 実際のセットアップに進む準備ができている

コメント