夜雨聆风学习资料网

ARTICLE · 1144096

安卓侧载收紧,跨平台开发者的分发账要重算了

安卓侧载收紧,跨平台开发者的分发账要重算了

一个跨平台项目到了发版的时候,分发路径通常不止一条。Google Play 一条,官网直发一条,有时候还要给测试同学一个内测包。安卓这套开发者验证,把每条路的准入成本重新标了一次价,而这三笔账的算法完全不一样。

三条路,三笔账

先说走 Google Play 这条。对已经有 Play 开发者账号的团队,这笔账几乎是零。应用已经在验证流程里,用了 Play App Signing 的包名还会被自动认领,你要做的只是去开发者验证页确认状态。新增的成本是时间,审核周期照旧。

再说侧载这条。用户在浏览器里下你的 APK 直接装,2026 年 9 月 30 日之后在四个国家要过身份校验:包名必须注册过,而且这个包得由你的私钥签名。

官方留了出口,Android Debug Bridge 的开发安装不受影响,advanced flow 让用户可以一次性放行,免费的有限分发账号能覆盖 20 台设备。代价在于,advanced flow 一旦关掉,未注册应用的更新就会失败。留给测试同学的那些包,得算进这 20 台里。

然后是走企业内部分发这条。托管设备从组织商店安装应用,官方给了豁免,前提是设备真的被管着。如果同一个应用还会流到员工自己没托管的手机上,建议照样注册。这条对跨平台团队的意义在于,内部测试包和演示包也算包名和身份,不能靠「内部用」蒙过去。

跨平台团队的账为什么更复杂

第一是包名数量。KMP 和 Flutter 项目一个仓库常常出好几个产物,主包、各种 flavor、内测包,每个都有自己的包名。验证是按包名和签名密钥走的,所以清单要覆盖所有产物和所有密钥,而不是只覆盖上架那一个。

第二是密钥来源。同一个团队里可能同时存在 CI 机器上生成的 keystore、某位同学本地留着的 keystore、以及 Play App Signing 托管的那份。名字一多,就容易出现「发出去的包不是这把密钥签的」。

第三是提交物。这套验证最终要你提交的只有两样:包名,和用你私钥签名的 APK。前者要查重,后者要能自证。

顺便说清楚边界,这套验证只管 Android 认证设备上的包名。如果同一个项目还发鸿蒙或者 iOS,那两边的签名材料是另一套体系,不在这套规则里。但「归档密钥加能自查」这个动作,两边都该做。

第一件事:密钥归档,并且能自证

注册时要证明包名归你,官方给的凭据是「用你的私钥签名的 APK」。也就是说签名密钥从构建缓存里的东西,升格成了身份证。官方 FAQ 专门写了一条,密钥丢了就没法注册包名,建议用密钥管理方案。

光归档还不够,你得能随时自证。我写了一个 30 行的小脚本,跑一次就能看出一个 APK 的包名和证书指纹,还能跟归档的指纹清单对比。同一份代码、同一个包名,换一把密钥签,输出的结果就分叉了:

包名一模一样,指纹完全不同,这就是「用错了密钥」的样子。这种事在团队里发生的概率比想象中高,尤其在换了 CI 机器或者有人重新生成了 keystore 之后。

归档建议就三条。keystore 文件、别名、指纹清单放一起,进密码管理器或者团队保险库;指纹清单用纯文本,一行一个 SHA-256,方便机器比对;这一步挂进发布流程当门禁,比对不过就不许发。官方文档里还提到,一个包名可以登记多把签名密钥,团队做密钥轮换时用得上。

第二件事:上架前先查包名有没有被占

包名是先到先得认领的,撞名这件事要在起名的时候查,不是在上架那天查。

Google 开了 Android Developer ID Status API 专门查这个,返回三种状态:已注册、未注册、以及已注册但对应的是另一把证书指纹。最后一种最麻烦,说明包名被别人占了。

撞名之后官方给的路是申请注册,但要额外审核,而且文档里明说了,那个包名可能同时被其他开发者使用。两个应用共用一个包名意味着什么,做过 Android 的都清楚。

这个接口有配额,每个项目每天 1000 次,要挂在 Google Cloud 项目上:先建项目、开通对应的 API、配好鉴权。我本机没有这个条件,所以这条只按文档写,我没有实际发起过请求。日常看包名状态,Play Console 和 Android Developer Console 的包名列表里直接就有,显示为已注册、未注册或者草稿。

第三件事:账号和材料,能办的先办

个人开发者就是身份验证这一步。组织要多两样:D-U-N-S 编号,以及一个用 Search Console 验证过的官网。

D-U-N-S 免费,去邓白氏官网就能申请,但流程最长 28 天。这是整份清单里唯一一个等待时间压不掉的环节,官方帮助文档还特意提醒,当心第三方服务拿这件事收高额手续费。

费用方面,完整分发账号 25 美元一次性,和 Play 的注册费一个价位;有限分发免费。钱和填表都不是大问题,真正的时间成本在前面那 28 天。

三个会让你卡住的坑

第一个是密钥丢失。这不是「麻烦一下」,是没法注册包名,等于这个包名你再也认不回来。

第二个是包名被别人先注册。申请之后可能和对方共用,等于埋了一颗不知道什么时候炸的雷。

第三个藏在有限分发这条路上。advanced flow 关掉之后,未注册应用的更新就会失败。官方 FAQ 写得很明确,未注册的应用只能靠 advanced flow 或者 Android Debug Bridge 安装与更新。那 20 台设备的场景,记得别把开关关掉。

哪些现在做,哪些可以等

已经生效的是四个国家、七家参与商店(Google Play、三星 Galaxy Store、小米 GetApps 这些),覆盖 Android 7 以上的认证设备,第一阶段只管手机和平板两种形态。

现在就能做的三件事:归档密钥并接上自查、查包名有没有被占、把 D-U-N-S 和账号材料办起来。

可以等的部分:不在名单里的商店,以及用户直接侧载,在这一轮铺开前不受管。官方给的时间表是 2027 年及以后全球铺开,也建议开发者在铺开前完成验证;媒体口径里的节奏是先到美英。上了 Play 的应用要对所有形态注册,只是执行层面先落手机和平板。

有个措辞值得记住,官方 FAQ 写的是「暂时不适用」,不是「永远不会」。这两句话之间的差距,就是 2027 那一格。

最后

这三笔账算下来,最贵的不是那 25 美元,是身份材料的准备时间,以及签名密钥的不可替代性。填表十分钟,D-U-N-S 要 28 天,密钥丢了就没有第二把。所以对一个跨平台团队来说,它不该是上架前才想起来的事,而该是发布流程里的一步。

你手上的项目走的是哪条路?那把签名密钥现在找得到吗,评论区聊聊。

参考:

  • Android developer verification 官方指南 https://developer.android.com/developer-verification/guides[1]
  • 官方 FAQ https://developer.android.com/developer-verification/guides/faq[2]
  • 查包名注册状态(Developer ID Status API)https://developer.android.com/developer-verification/guides/check-registration-status[3]
  • 用 Console API 注册包名 https://developer.android.com/developer-verification/guides/developer-console-api[4]

引用链接

[1]https://developer.android.com/developer-verification/guides

[2]https://developer.android.com/developer-verification/guides/faq

[3]https://developer.android.com/developer-verification/guides/check-registration-status

[4]https://developer.android.com/developer-verification/guides/developer-console-api

相关学习资料