如何在 Google Play Console 中配置分发规则(如语言、设备筛选)?

解读

面试官问的是“配置分发规则”,而不是“上传 APK”。国内候选人常把“发版”等同于“点一下发布按钮”,但海外渠道的核心是“精准可达”。Google Play Console 的分发规则 = 语言 × 设备 × 国家/地区 × 纹理压缩格式 × 屏幕尺寸 × 权限要求 × 性能等级 × 用户属性(如儿童)。答这道题必须体现“最小可用矩阵”思维:让正确的人在正确的设备上看到正确的版本,同时避免因为一条不当规则把潜在用户挡在门外。国内面试场景下,还要顺带解释“为什么国内渠道不需要这么细”,以展示对两套生态差异的理解。

知识点

  1. 语言维度:Play Console → 商店设置 → 商品详情语言,与 res/values-×× 字符串资源无强制耦合,但商店页语言必须覆盖 APK 内所有受支持语言,否则会被标记为“缺失翻译”。
  2. 国家/地区维度:Release → Production → Countries / regions,支持灰度到城市级(通过 Google Play 沙盒测试账号+VPN 验证)。注意:一旦某个国家勾选,系统会自动把该地区对应的“内容分级问卷”结果作为强制门槛。
  3. 设备维度: a. 显式排除:Device catalog → 按 SoC、GL 版本、RAM、屏幕尺寸、可用存储、Play 系统更新版本号、Vulkan 版本、折叠姿态(铰链折叠角度传感器)进行勾选排除; b. 隐式排除:AndroidManifest 中声明的 uses-feature、uses-library、uses-permission(危险权限自动推导硬件特征)、android:required 属性; c. 性能等级:targetSdkVersion ≥ 33 时,可声明 android.performanceLevel 为 30、31、32、33,Play 会自动把性能等级低于该值的设备过滤掉,无需手动勾选。
  4. ABI/纹理过滤:上传 AAB 后,Play 会自动按 splits 规则生成 APK,但可以在“Advanced settings → Device exclusion rules”里手动把 ETC2 不支持或 ASTC 版本低于 0x02 的设备拉黑。
  5. 屏幕尺寸与兼容模式:如果声明了 android:resizeableActivity="false",Play 会把所有可折叠、大屏幕设备标为“不兼容”,需在“Device catalog”里手动把 Foldable 勾回。
  6. 权限与政策:若使用 SMS/Call log 权限,需在“App content”中填写“核心功能声明”,否则 Play 会直接隐藏该应用,属于“硬过滤”。
  7. 多 APK 场景(旧项目仍有):同一版本号下,按 versionCode 高→低优先级匹配,先匹配 ABI+屏幕+OpenGL,再匹配 API level;如仍需保留多 APK,需在“Release management → Artifact library”里为每个 APK 单独设置设备矩阵。
  8. 测试轨道:Internal testing → Closed → Open → Production,每一轨都可以单独配置国家与设备,用于验证过滤规则是否生效;国内常用 Internal testing 的“Email list”方式给QA发链接,但设备排除规则依然生效。
  9. 国内对比:国内渠道(OPPO/VIVO/小米/应用宝)普遍只支持“最低系统版本+屏幕尺寸”两项过滤,不支持 SoC 级黑名单,因此海外版本需单独维护 device_exclude_list.xml,通过 Gradle 脚本在 CI 中注入,避免人工在 Console 里点漏。

答案

第一步,在 Google Play Console 选择对应应用 → Release → Production → Create new release,上传 AAB 后,点击“Countries / regions”勾选目标市场;若只做内测,可在 Internal testing 轨道里先选菲律宾或加拿大作为试点。
第二步,进入 Device catalog → Manage exclusions,按“硬件特征”搜索,例如输入“Adreno 3xx”或“RAM < 3GB”,批量加入黑名单;若项目使用 Jetpack Compose 1.6 且依赖 Vulkan 1.1,可在“Vulkan version”过滤里把 0x00000000–0x003FFFF 全部排除。
第三步,处理权限带来的隐式过滤:在 App content → Permissions 声明 SMS 读取为“可选功能”,并在 Manifest 中将 android:required="false",否则所有无电话模块的平板会被自动隐藏。
第四步,语言与商店页:Store presence → Main store listing → Add language,确保列表页语言与 AAB 内 strings.xml 语言一致;若仅上架英文详情页,而 APK 内含中文资源,Play 会提示“Translation missing”,影响搜索权重。
第五步,验证:在 Device catalog → See affected devices 输入版本号,可实时看到“剩余可用设备数”;同时用 Internal testing 链接+VPN 切换目标国家账号,查看 Play 商店是否显示“您的设备不兼容”,确保规则生效。
第六步,自动化备份:在 build.gradle 中通过 play { deviceSpecExcludeFile = file("device_exclude_list.pb") } 把黑名单序列化写入 Protocol Buffer,CI 自动上传,防止人工误操作。
第七步,记录与回滚:每次发布前用“Download device exclusion list”导出 CSV,存到 Git LFS;若发现误杀主流机型,可在 Console 一键回滚到上一版过滤规则,无需重新上传 AAB。

拓展思考

  1. 折叠屏与平板大潮:Google 从 2023 年起把“大屏幕适配”作为搜索排名因子,如果仅用手机截图,会被降权。如何在分发规则里“只让大屏幕用户看到大屏优化版本”?——答案是使用“Device exclusion + 同版本号下上传定向 AAB(通过 screenWidthDp 配置)”,但 Google 官方更推荐“单一 AAB + 响应式布局”,因此过滤思维要从“排除”转向“鼓励”。
  2. 性能等级与 Android 14:从 2024 年起,targetSdkVersion 34 的 App 若声明 performanceLevel=34,Play 会把 CPU 性能低于 Pixel 6 的设备全部隐藏,相当于“硬件软淘汰”。面试中可以反问:“如果业务方要求覆盖印度低端机,如何权衡?”——可答“降级到 performanceLevel=30,同时在代码里用 Profile Installer 推送 Baseline Profile,保证低端机跑在 AOT 路径,减少过滤带来的收入损失”。
  3. 国内出海双包体:国内渠道包通常带 SDK 权限臃肿,若直接上传 Play 会被“重复权限”拒审。正确做法是在 Gradle 用 productFlavors 隔离,Play 专属 flavor 把敏感权限 android:required="false",并通过 Console 的“App content”声明用途;同时利用 Device catalog 把国内定制 ROM(如某些无 GMS 的海外版系统)拉黑,防止用户刷机后安装崩溃。
  4. 合规沙盒:2025 年 Google 强制启用 Privacy Sandbox for Android,广告 ID 受限。面试可延伸:“如何在分发规则里提前排除‘儿童用户’?”——需在 App content → Target audience 勾选“13+”,系统会自动把账号年龄低于 13 岁的设备隐藏,同时广告 ID 返回全 0,避免违规罚款。