APK上架安卓应用商店需满足四方面要求:manifest.json配置合规(包名唯一、版本递增、权限精准、隐私弹窗启用);使用自有长期有效签名证书(25年有效期,SHA-256指纹一致);完成工信部APP备案(企业主体,包名与证书指纹匹配);多渠道包通过$channel$占位符区分图标/名称。
manifest.json 配置不全,APK 会直接被应用商店拒审
几乎所有安卓商店(华为、小米、应用宝等)在审核时第一关就校验 manifest.json 里的基础信息是否合规。漏配、错配、权限冗余,都会触发“信息不一致”或“隐私风险”类驳回。
- 包名
package必须与上架时填写的完全一致(比如com.example.myapp),且全局唯一;改名必须重走证书流程 - 版本号
versionName和versionCode要递增,不能倒退;versionCode必须是整数,别写成"1.0.0"这种字符串 - 权限声明要精准:只留
INTERNET、READ_EXTERNAL_STORAGE等真实用到的;像ACCESS_FINE_LOCATION这类敏感权限,没调用uni.getLocation就勾选,会被认定为“过度索取” - 隐私协议弹窗必须启用:在“App启动界面配置”里勾选
使用原生隐私政策提示框,否则首次启动无弹窗,华为/小米直接拒审
签名证书不对,APK 安装失败或上架被拦
云打包用的是 DCloud 公共测试证书,能运行但无法上架;所有正规商店都要求自有签名证书,且证书指纹(SHA-1/SHA-256)需和备案信息一致。
- 不要用 HBuilderX 自动生成的临时 keystore——有效期默认 1 年,过期后更新包无法覆盖安装
- 生成命令必须带
-validity 9125(25 年):keytool -genkey -alias mykey -keyalg RSA -validity 9125 -keystore mykey.keystore - 证书别名(
alias)、密钥口令(storepass)、密钥口令(keypass)三者要记牢;任一错误,云打包或本地打包都会卡在签名环节 - 华为/小米后台上传 APK 前,会要求你填入证书 SHA-256 指纹,可用命令提取:
keytool -list -v -sha256 -keystore mykey.keystore -alias mykey
APP 备案缺失,连上传按钮都点不了
2026 年起,国内所有安卓应用商店(含华为、小米、OPPO、VIVO、应用宝)强制要求完成工信部 APP 备案,未备案的 APK 无法提交审核,不是“审核不通过”,而是系统直接拦截上传。
- 备案主体必须是企业(个体户不行),且营业执照、ICP 备案域名、银行对公账户三者主体名称必须完全一致
- 备案时需提供三项技术信息:
APP 包名、签名证书 SHA-256 指纹、签名公钥(Base64);缺一不可 - 备案入口不在各商店后台,而在工信部「APP 备案管理系统」(https://www.php.cn/link/4dad75d2365dedf73aa94b7606de7426),走完流程通常需 1–3 个工作日
- 一个证书+包名组合只能备案一次;换证书或改包名,必须重新备案
渠道包没区分,多市场发布时图标/名称错乱
同一套代码发到不同商店,常因图标、名称、启动页不匹配被用户投诉“下错包”,甚至被下架。手动改资源再打包效率低、易出错。
- 用
$channel$占位符统一管理:在manifest.json的plus.distribute.android.name和package中写成MyApp_应用宝、com.example.myapp_taptap - 图标资源按渠道分目录存放,如
unpackage/res/icons/appstore/、unpackage/res/icons/xiaomi/,再在 HBuilderX 打包时指定路径 - 避免在 JS 里硬编码渠道逻辑;推荐用环境变量 +
process.env.UNI_PLATFORM判断当前打包目标,而非运行时 UA 识别
最麻烦的不是打包本身,而是备案和证书的跨平台一致性——华为要 SHA-256,小米认 SHA-1,应用宝两者都要,而备案系统只收 SHA-256。三个地方填错一个指纹,就得重等一天重新备案。










