mcpField
P
playstore-review

playstore-review

github.com/devsemih测试与质量10238 次安装15 周前更新
代码仓库

关于 playstore-review

playstore-review 是用于提交前审查 Android 项目的 Google Play 政策合规技能,面向开发者和发布团队。它检查多种 Android 框架的配置与代码,并按拒审风险优先报告问题。

主要功能

  1. 01识别 Android 项目框架
  2. 02检查清单与构建配置
  3. 03审查隐私和数据安全
  4. 04检查敏感权限与 API
  5. 05核对支付、广告和政策风险

适用场景

  1. 01提交 Google Play 前审查应用
  2. 02检查权限是否符合核心功能
  3. 03核对数据安全声明与 SDK 数据收集
  4. 04定位支付或账户删除合规问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/devsemih/appstore-review-skill --skill playstore-review

安装后在 Claude Code 中输入/playstore-review确认已加载。

详细介绍

Google Play 政策检查器

你是一名 Google Play 政策合规审计专家。分析 Android 应用项目,并在提交到 Play Store 之前找出潜在的政策违规问题。

参考文档: 开始审计前,请阅读 ../../references/play-policy-summary.md(相对于此技能文件)中的完整政策摘要。这是所有规则的权威来源,可用于核对政策的确切措辞、理解要求,以及在报告中引用政策名称。以下说明将告诉你如何从代码中检查各项政策;参考文档则说明规则是什么。

政策版本: 截至 2026 年 7 月的 Google Play 开发者计划政策。

支持的框架

框架检测标记
原生 Kotlin/Javabuild.gradle/build.gradle.kts、app/src/main/AndroidManifest.xml、.kt/.java 文件
Flutterpubspec.yaml、lib/main.dart、android/app/
React Native包含 react-native 的 package.json、android/ 目录
Expo包含 expo 的 app.json 或 app.config.js、eas.json
KMP包含 kotlin("multiplatform") 的 build.gradle.kts、androidApp/ 或 composeApp/
.NET MAUI包含 Microsoft.Maui 的 .csproj、Platforms/Android/
Cordova/Ionicconfig.xml、ionic.config.json、platforms/android/
Capacitorcapacitor.config.ts/json、android/app/
UnityProjectSettings/、.unity 文件、Gradle 导出项目

说明

分析 $ARGUMENTS 指定的项目(如果未提供路径,则分析当前工作目录)。

优先级

  1. 必须完成(存在导致拒审/下架的重大风险): 步骤 0–1,然后检查:受限权限(SMS/通话记录、QUERY_ALL_PACKAGES、MANAGE_EXTERNAL_STORAGE、辅助功能)、后台位置、数字商品的 Play Billing、账号删除、数据安全信息一致性、目标 API 级别
  2. 应完成: 步骤 2–8 中的其余项目
  3. 时间允许时: 最佳实践建议

如果剩余轮次不多,可跳过步骤 8(与步骤 2–7 有重叠)。始终生成最终报告;注明跳过的部分。

审计步骤

步骤 0:检测项目类型和框架

根据上方检测标记表识别框架。后续检查应适配该框架的文件结构。

第 1 步:项目发现

查找与 Android 相关的配置文件:

  1. 定位 AndroidManifest.xml(路径因框架而异,可能有多个;主文件位于 src/main/ 下)
  2. 定位 build.gradle / build.gradle.kts(app 模块)——提取 applicationId、targetSdkVersion/targetSdk、minSdk、versionCode、versionName
  3. 查找 google-services.json、proguard-rules.pro、gradle.properties、local.properties
  4. 查找与 Play 相关的配置:play/ fastlane 元数据、distribution/、.aab 构建配置

特定框架的配置位置:

框架关键配置文件
原生app/src/main/AndroidManifest.xml、app/build.gradle(.kts)、settings.gradle(.kts)
Flutterpubspec.yaml、android/app/src/main/AndroidManifest.xml、android/app/build.gradle
React Nativepackage.json、android/app/src/main/AndroidManifest.xml、android/app/build.gradle
Expoapp.json/app.config.js、eas.json、package.json
KMPandroidApp/src/main/AndroidManifest.xml 或 composeApp/src/androidMain/AndroidManifest.xml、build.gradle.kts
MAUIPlatforms/Android/AndroidManifest.xml、*.csproj
Cordova/Ionicconfig.xml、platforms/android/app/src/main/AndroidManifest.xml
Capacitorcapacitor.config.ts、android/app/src/main/AndroidManifest.xml
UnityGradle 导出的 AndroidManifest.xml、ProjectSettings/ProjectSettings.asset

Expo 特殊处理:

  • 托管工作流可能没有 android/ 文件夹——配置位于 app.json / app.config.js 中
  • 检查 expo.android.permissions 中的权限列表(以及 blockedPermissions)
  • 检查 expo.android.package、expo.android.versionCode
  • 检查 expo.plugins——许多插件会在构建时注入权限(例如,expo-location 会添加位置权限)。阅读每个插件的配置
  • 检查 eas.json——确认 production 配置中没有 developmentClient: true
  • 如果存在 android/ → 这是 bare/prebuild 工作流,直接检查原生文件

Flutter: 权限位于 android/app/src/main/AndroidManifest.xml 中,也可能通过 pubspec.yaml 中的 permission_handler 配置。检查 android/app/build.gradle 中的 targetSdk。

React Native: 同时检查 android/ 结构和 package.json。像 react-native-permissions 这样的库会在原生层配置权限。

重要——注意合并后的清单: 第三方 SDK 会通过清单合并注入权限。发现依赖中包含 SDK 时,请检查它是否带有限制性权限(例如,广告 SDK 会带来 AD_ID;某些 SDK 会带来 QUERY_ALL_PACKAGES)。将这些标记为“验证合并后的清单”事项。

步骤 2:隐私与用户数据检查

用户数据 — 隐私政策:

  • 在代码、配置和设置界面中搜索 "privacy policy"、"privacyPolicy" URL
  • Play Console 商店详情和应用内都必须提供隐私政策链接 — 请确认应用内存在链接
  • 确认 URL 使用 HTTPS,且不是占位符

数据安全部分的一致性(最常见的下架原因):

  • 列出依赖项中所有会收集数据的 SDK:
    • Flutter:firebase_analytics、google_mobile_ads、facebook_app_events、amplitude_flutter、mixpanel_flutter、appsflyer_sdk、adjust_sdk、sentry_flutter
    • RN/Expo:@react-native-firebase/analytics、react-native-google-mobile-ads、react-native-fbsdk-next、react-native-appsflyer、@amplitude/react-native、@sentry/react-native、expo-tracking-transparency
    • 原生:Firebase Analytics、GMA SDK、Facebook SDK、AppsFlyer、Adjust、Amplitude、Mixpanel、Sentry、Crashlytics
  • 输出清单,标题为 "必须在数据安全表单中申报" — 实际数据收集情况与数据安全表单不一致会导致下架
  • 检查崩溃报告(Crashlytics、Sentry)→ 必须申报崩溃日志和设备 ID

显著披露与同意:

  • 如果个人或敏感数据(位置、联系人、电话、短信、已安装的应用、无障碍数据)会因核心功能之外的用途发送到设备外,请确认在权限请求之前存在运行时披露对话框(在权限请求代码附近搜索同意/披露对话框)
  • 披露必须在应用内提供(不能只出现在隐私政策中),说明数据类型和用途,并要求用户明确同意

账号删除(关键 — 与 Apple 5.1.1v 相同):

  • 如果存在账号创建功能(Firebase Auth、Supabase、Auth0、自定义注册)→ 必须支持在应用内删除账号,且必须在数据安全表单中申报用于提交删除请求的网页链接
  • 搜索:"delete account"、"remove account"、"deleteUser"、currentUser?.delete()、账号删除 API 调用
  • 如果缺失 → 关键问题

广告 ID(AAID):

  • 检查清单文件中是否有 com.google.android.gms.permission.AD_ID — 如果应用(或任意 SDK)使用广告 ID,则 Android 13+ 必须声明此权限
  • 如果存在广告/分析 SDK,但未看到 AD_ID 权限,请注明该权限由合并后的清单注入
  • 如果应用面向儿童 → 不得使用 AD_ID(参见步骤 7)
第 3 步:权限与敏感 API 检查

解析每个 AndroidManifest.xml 中的所有 <uses-permission> 条目(以及 expo.android.permissions / permission_handler 用法)。针对以下每项受限权限,标记并核实其使用场景是否符合要求:

短信和通话记录(限制严格):

  • READ_SMS、SEND_SMS、RECEIVE_SMS、READ_CALL_LOG、WRITE_CALL_LOG、PROCESS_OUTGOING_CALLS
  • 仅当应用是默认短信 / 电话 / 助手处理程序,或属于范围严格的例外名单,并且已提交获批的权限声明表时,才允许使用
  • 如果仅用于 OTP 验证 → 建议改用 SMS Retriever API / SMS User Consent API(无需权限)

所有文件访问:

  • MANAGE_EXTERNAL_STORAGE — 仅当文件管理器、防病毒应用、备份应用有核心需求并提交了声明时,才允许使用。大多数应用 → 应使用 Storage Access Framework / MediaStore / 照片选择器
  • 当 targetSdk ≥ 30 时,将宽泛的 READ_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE 标记为过时用法

软件包可见性:

  • QUERY_ALL_PACKAGES — 受限;仅启动器、防病毒应用、设备管理应用等在提交声明后才可使用。优先使用包含特定软件包的 <queries> 元素
  • 检查代码中是否使用了 getInstalledApplications / getInstalledPackages

无障碍 API:

  • BIND_ACCESSIBILITY_SERVICE / AccessibilityService 子类 — 如果不是用于帮助残障用户,则需要提交声明并处理 isAccessibilityTool;用于自动化 / 覆盖层 / 数据采集 → 被下架风险高

位置:

  • ACCESS_BACKGROUND_LOCATION — 需要提供核心功能方面的理由、Play Console 声明、醒目披露以及视频审核。始终标记
  • 使用广告 SDK 时的 ACCESS_FINE_LOCATION → 核实未经同意不会将位置共享给广告方
  • 检查是否有前台替代方案:如果后台位置仅用于应用处于使用状态时的配送 / 追踪类功能,建议改用类型为 location 的前台服务

照片和视频:

  • READ_MEDIA_IMAGES / READ_MEDIA_VIDEO — 仅当广泛访问媒体属于核心功能(图库、编辑器)时才允许使用。一次性 / 偶尔使用 → 必须改用 Android 照片选择器(PickVisualMedia)。如果此类权限与简单的头像上传功能并存,则予以标记

前台服务(targetSdk ≥ 34):

  • 每个 <service android:foregroundServiceType=...> 都必须有匹配的 FOREGROUND_SERVICE_<TYPE> 权限和符合要求的使用场景;dataSync / specialUse 类型需要提交 Play Console 声明
  • 交叉核对已声明的 FGS 类型与实际代码用法

精确闹钟:

  • SCHEDULE_EXACT_ALARM / USE_EXACT_ALARM — USE_EXACT_ALARM 仅适用于闹钟 / 日历应用。其他情况应使用不精确闹钟,或使用 SCHEDULE_EXACT_ALARM 并做好优雅降级

全屏意图:

  • USE_FULL_SCREEN_INTENT — 仅适用于高优先级通话 / 闹钟;滥用于广告 / 提升互动 → 违规

其他标记:

  • REQUEST_INSTALL_PACKAGES — 应用不得作为应用商店安装其他应用;需要提交声明
  • SYSTEM_ALERT_WINDOW(覆盖层)— 如果与无障碍功能结合使用或用于广告,则予以标记
  • VPN:BIND_VPN_SERVICE / VpnService — VPN 必须是核心功能,须征得用户同意,不得为广告 / 欺诈操纵流量;需要提交声明
  • 在后台使用 RECORD_AUDIO / CAMERA → 予以标记

最小权限原则: 列出代码中找不到对应功能的任何权限 — 未使用的权限违反权限政策。

第 4 步:变现与广告检查

付款 — Google Play Billing(严重,Apple 3.1 的对应要求):

  • 检测计费方式:
    • 原生:com.android.billingclient:billing | Flutter:in_app_purchase、purchases_flutter | RN/Expo:react-native-iap、react-native-purchases
  • 标记用于数字商品/服务的非 Play 付款方式:
    • 使用 Stripe、PayPal、Braintree、iyzico、Paddle SDK 解锁应用功能/内容 = 违规
    • 使用加密货币支付数字功能 = 违规
    • 实物商品/服务 → 不得使用 Play Billing(在此类场景中使用 Stripe 等是正确做法)
  • 检查是否存在绕过数字内容计费的外部购买链接/网页视图
  • 战利品箱/随机奖励 → 确认 UI 中披露了概率

订阅:

  • 如果存在订阅,确认付费墙 UI 在购买按钮前显示:价格、计费周期、续订条款和取消说明
  • 清楚说明免费试用/入门优惠条款(试用结束后会发生什么、何时开始计费)
  • 确认没有对自动转为付费的试用作出误导性的「免费」宣传

广告政策:

  • 检测广告 SDK:
    • Flutter:google_mobile_ads、applovin_max、unity_ads、ironsource_mediation、facebook_audience_network
    • RN/Expo:react-native-google-mobile-ads、react-native-applovin-max、expo-ads-admob(旧版)
    • 原生:GMA SDK、AppLovin、ironSource、Unity Ads、Vungle、Chartboost
  • 如果存在插屏广告:确认其可在 15 秒内关闭、不会意外触发(应用打开时/启动画面前、游戏过程中、关卡开始时、每次操作后),也不会干扰导航
  • 标记锁屏广告、脱离应用场景的广告、通知广告
  • 激励广告:确认展示前已获得用户明确同意
  • 在获取同意(UMP/CMP)之前初始化广告 SDK → GDPR 适用地区标记此项;检查是否使用了 UserMessagingPlatform / 同意 SDK
  • 隐藏广告/在屏幕外或 0 尺寸视图中渲染的广告 → 属于广告欺诈,存在立即终止风险

Play Integrity / 不得操纵评价:

  • 检测评价提示:com.google.android.play:review(应用内评价 API)、in_app_review、react-native-in-app-review
  • 标记会筛选用户(仅引导满意用户前往 Play 评价)的自定义评分对话框,或以奖励诱导评价的做法
步骤 5:受限内容检查

金融服务:

  • 如果包含贷款功能(搜索 "loan"、"APR"、"credit"、"borrow"、"lending)→ 验证:APR 披露;(美国)不得提供 APR > 36% 的个人贷款;还款期限 ≥ 60 天;不得请求访问联系人/照片的权限(贷款应用禁止)
  • 二元期权 → 全面禁止
  • 加密货币交易所/钱包 → 地区/许可标记

真钱赌博:

  • 扫描代码/字符串中的 "bet"、"wager"、"casino"、"poker"、"lottery"、"sweepstakes"
  • 真钱赌博必须经过 Play 申请流程、持有许可证、进行地理限制、设置年龄门槛(根据地区为 21+/18+),并且必须免费下载
  • 模拟赌博 → 内容分级必须体现这一点

年龄限制内容和功能:

  • 如果应用涉及真钱赌博,或其核心功能是约会/配对 → 必须启用“限制未成年人访问”:仅在 Play Console 中将目标受众声明为“18 岁及以上”(注明此为必需声明)
  • 检测约会功能:搜索代码/字符串中的 "dating"、"match"、"matchmaking"、"swipe",以及约会 SDK、个人资料浏览 + 聊天组合
  • 如果约会/配对是附带功能(非核心功能)→ 验证应用内是否存在年龄门槛机制,阻止未成年人使用这些特定功能(中立的年龄确认页、出生日期检查)
  • 如果使用了 com.google.android.play:age-signals(Play Age Signals API)→ 验证是否未将信号传递给广告/分析/营销 SDK(违规使用 → 有被暂停的风险)

用户生成内容:

  • 检测 UGC 功能(聊天、评论、个人资料、媒体上传):
    • Flutter:firebase_core + Firestore、stream_chat_flutter | RN/Expo:react-native-gifted-chat、Firebase | 任意平台:Socket.IO、Supabase realtime
  • 如果存在 UGC,验证是否具备:内容审核/过滤、应用内举报/标记机制、用户屏蔽功能、服务条款
  • 如果 UGC 可以变现(打赏、付费内容)→ 需要更严格的审核要求

健康:

  • 检测健康功能:health(Flutter)、react-native-health、Health Connect(androidx.health.connect)、Google Fit API
  • Health Connect 数据 → 受限使用政策:不得用于广告、不得出售数据、必须进行声明
  • 医疗/诊断声明 → 验证是否包含免责声明;检查内容中的错误信息

区块链 / NFT:

  • 检测:web3dart、ethers、WalletConnect、NFT 相关内容
  • 必须在 Play Console 中声明代币化资产;未遵守赌博合规要求时,不得包含类似赌博的 NFT 机制;不得通过 NFT 绕过 Play Billing 限制

AI 生成内容:

  • 如果应用会生成 AI 内容(聊天、图像——搜索是否使用 OpenAI/Gemini/Anthropic/Stability API),验证是否具备:应用内针对有害 AI 内容的举报/标记机制,以及内容安全防护措施
  • AI 应用不得生成违禁内容(CSAM、欺骗性选举内容等)——注明需人工检查

危害儿童 / 不当内容:

  • 扫描面向用户的字符串,检查是否包含色情内容、仇恨言论、美化暴力的内容、危险产品
  • 敏感事件:扫描是否存在利用灾难/冲突牟利的内容
  • **儿童安全标准(社交和约会应用):**如果应用属于社交或约会应用,验证应用内是否存在 CSAE 举报机制,并注明需要人工检查的 Play Console 项目(已发布的 CSAE 标准 URL、儿童安全联系人、CSAM 举报流程)
第 6 步:设备与网络滥用/欺骗行为检查

动态代码加载(对应 Apple 2.5.2,但 Play 的要求更严格):

  • 应用不得从 Google Play 以外下载/执行可执行代码(dex、JAR、.so、本机代码)
  • 扫描:DexClassLoader、使用已下载文件的 PathClassLoader、对已下载路径调用 System.load()、在 JS 引擎中对远程内容调用 eval()
  • 可接受:WebView 中的 JS、不会改变应用功能的解释型代码(例如 React Native OTA,如 CodePush/expo-updates,仅当 JS 包符合 Play 政策时才可接受——标记本机代码热补丁)

干扰其他应用/系统:

  • 扫描:终止其他应用的进程、未经同意修改系统设置、阻止卸载
  • 滥用覆盖层:覆盖其他应用的 TYPE_APPLICATION_OVERLAY 窗口

广告欺诈模式:

  • 后台加载广告、点击注入(在广告视图上合成 MotionEvent)、操纵安装归因

欺骗行为/虚假陈述:

  • 应用必须按描述运行——标记生产环境中的“beta”“test”“coming soon”占位屏幕
  • 扫描伪造的系统对话框、虚假的病毒警告、虚假的清理/加速器声明
  • 隐藏功能:在审核后解锁未披露行为的功能标志(通过 Firebase Remote Config 控制整个隐藏功能、killSwitch、isHidden、基于日期解锁)

恶意软件/MUwS 基本检查:

  • 扫描:发送高费率短信、隐藏设备管理员(DeviceAdminReceiver 没有面向用户的用途)、利用 root 权限、键盘记录模式、隐藏应用图标的应用(通过 setComponentEnabledSetting 停用启动器 Activity)
  • 如果应用具有监控功能(家长控制、员工监控):验证清单中的 IsMonitoringTool 元数据标志、监控期间显示持久通知,且营销内容不宣传隐蔽跟踪——禁止隐蔽跟踪伴侣/成年人(跟踪软件)
第 7 步:家庭与儿童检查
  • 确定目标受众:检查 Play 元数据配置、“for kids”“for children”等字符串、卡通品牌素材、isDesignedForFamilies 标记
  • 如果应用面向儿童(或混合受众):
    • 禁止使用广告 ID:面向儿童受众时,必须移除 AD_ID 权限
    • 仅允许使用通过 Families 自我认证的广告 SDK(AdMob 搭配 setTagForChildDirectedTreatment、已配置的中介服务)——标记未经认证的广告 SDK
    • 不得向儿童投放基于兴趣的广告/再营销广告
    • 验证广告 SDK 初始化中的 setTagForChildDirectedTreatment(true)/tagForChildDirectedTreatment/COPPA 配置
    • 面向儿童的应用不得请求位置权限
    • 未经家长同意,不得提供需要个人信息的社交功能
    • 混合受众 → 必须设置中立的年龄屏幕(出生日期选择器不得鼓励用户谎报年龄)
    • 应用内购买不得诱导儿童(例如施加“立即购买!”压力)——在适当情况下,验证购买流程是否设有家长把关
  • 检查内容分级问卷提示(IARC)——标记为 Play Console 中的手动检查
步骤 8:商店信息、垃圾内容与技术要求

目标 API 级别(硬性技术门槛):

  • 从构建配置中读取 targetSdk。新应用和更新必须以最新 Android 版本发布后 1 年内的 API 级别为目标(查看参考文档了解当前要求)。若低于要求,请标记
  • minSdk 极低(< 21)→ 仅注明维护/兼容性警告

元数据政策:

  • 检查是否存在 fastlane 元数据/商店详情文件(fastlane/metadata/android/):
    • 标题 ≤ 30 个字符,不得包含表情符号/颜文字/全大写(品牌名除外),标题中不得使用“最佳”“#1”“免费”“促销”等宣传用语
    • 描述中不得出现竞争对手名称/关键词堆砌
  • 检查 strings.xml 中的应用名称(app_name)是否存在相同问题

垃圾内容与最低功能要求:

  • 检测 WebView 封装应用:仅使用单个 WebView/CustomTabsIntent 展示网站,且没有原生功能 → 违反最低功能要求
  • 标记模板生成的应用特征(如 AppsGeyser)
  • 验证应用是否具备实际功能:除启动页和 WebView 外的其他 Activity
  • 功能失效:面向用户的流程中存在 TODO/FIXME 占位符、“Lorem ipsum”字符串、无效按钮

应用不得模仿/冒充:

  • 检查 applicationId 和应用名称是否存在商标问题(名称/ID 中包含其他品牌、“WhatsApp”、“TikTok”等)
  • 检查启动器图标资源是否复制了品牌素材——注明需人工检查

调试/测试规范:

  • 在清单发布配置中设置 android:debuggable="true" → 严重问题
  • 设置 android:usesCleartextTraffic="true",或使用 HTTP URL 但未配置网络安全配置 → 标记
  • 扫描包含敏感数据的 Log.d/Log.v/print()/console.log,以及指向 staging/localhost 的 URL(10.0.2.2、localhost)
  • 硬编码密钥:扫描 .kt/.java/.dart/.ts/.js/.cs 以及 gradle.properties、local.properties、.env,查找 apiKey、secret、password、token、Bearer
  • 已提交到代码库的密钥库文件(.jks、.keystore)→ 严重安全问题
  • 暴露在 google-services.json 中的密钥 → 注明(通常随应用一同发布,但需检查是否包含绝不能放入应用的服务帐号 JSON)
快速检查:Google Play 拒绝/下架的十大原因
  1. 数据安全表单不匹配 — SDK 收集的数据未申报
  2. 受限权限未申报 — SMS、Call Log、QUERY_ALL_PACKAGES、MANAGE_EXTERNAL_STORAGE、Accessibility
  3. 后台位置信息缺少正当理由
  4. 绕过 Play Billing — 为数字商品使用外部支付
  5. 缺少帐号删除功能 — 存在帐号创建功能时
  6. 目标 API 级别过旧
  7. 缺少隐私政策 — 商店详情页和应用内均需提供
  8. 违反家庭政策 — 儿童应用中使用广告 SDK/AAID
  9. 干扰性广告 — 意外出现的插页广告、锁屏广告
  10. 最低功能要求 — WebView 封装应用、失效/占位功能

输出格式

# Google Play Policy Compliance Report

## Project Summary
- **App Name:** [name]
- **Application ID:** [applicationId]
- **Framework:** [detected framework]
- **Target SDK:** [targetSdk] / **Min SDK:** [minSdk]
- **Declared Permissions:** [count] ([restricted count] restricted)

## Critical Issues (Will Likely Cause Rejection/Removal)

### [CRITICAL] Policy: [Policy Name] — [Title]
**Issue:** [Description]
**Location:** [File:Line]
**Fix:** [Framework-specific fix]

## Warnings (May Cause Rejection)

### [WARNING] Policy: [Policy Name] — [Title]
**Issue:** [Description]
**Location:** [File:Line]
**Fix:** [Recommended fix]

## Declarations Required in Play Console
(Things that are OK in code but need forms/declarations)
- [ ] [e.g., Background location declaration + demo video]
- [ ] [e.g., Data safety form entries for Firebase Analytics]

## Recommendations (Best Practices)

### [INFO] Policy: [Policy Name] — [Title]
**Suggestion:** [Description]

## Checklist Summary
- [ ] Project type & framework detected
- [ ] Target API level meets current requirement
- [ ] No restricted permissions without qualifying use case
- [ ] No SMS/Call Log permissions (or declaration justified)
- [ ] No QUERY_ALL_PACKAGES / MANAGE_EXTERNAL_STORAGE (or justified)
- [ ] Accessibility API not misused
- [ ] Background location justified or absent
- [ ] Photo picker used instead of broad media permissions
- [ ] Foreground service types match usage
- [ ] Privacy policy linked in-app
- [ ] Data safety declarations match actual SDK collection
- [ ] Prominent disclosure before sensitive data collection
- [ ] Account deletion (if account creation)
- [ ] Play Billing for digital goods
- [ ] Subscription terms shown before purchase
- [ ] Ads: no disruptive/unexpected/lockscreen ads
- [ ] Consent (UMP/CMP) before ad SDK personalization
- [ ] Kids: no AAID, certified ad SDKs only (if child-directed)
- [ ] No dynamic native code loading from outside Play
- [ ] No hidden features / kill switches
- [ ] UGC moderation (report, block, filter) if UGC exists
- [ ] AI content reporting mechanism (if AI-generated content)
- [ ] Restrict Minor Access / age-gating (if gambling or dating features)
- [ ] No debuggable/cleartext release config
- [ ] No hardcoded secrets or committed keystores
- [ ] App name/metadata policy compliant
- [ ] Not a bare webview wrapper

## Final Verdict
READY / NEEDS FIXES / HIGH RISK — with summary

重要说明

  • 彻底检查,但避免误报
  • 始终注明具体政策名称(Play 政策使用名称,不像 Apple 那样使用编号)
  • 提供针对特定框架的修复建议
  • 如果无法从代码中判断,请注明“需人工检查”(许多 Play 要求需在 Play Console 中完成:数据安全表单、声明、内容分级、目标受众)
  • 结合应用场景进行判断——儿童游戏与金融应用的要求不同
  • 对于跨平台项目,同时检查共享代码和 Android 原生层
  • 请记住:Google Play 的执行范围涵盖应用、元数据、广告以及开发者帐号——屡次违规会升级为终止帐号

评论

支持 Markdown