uni-app安卓包名在manifest.json中写死,新版路径为app-plus.distribute.android.package;签名须用真机+微信官方工具获取28位SHA1,不可依赖代码计算或keytool。

直接看 manifest.json 就能拿到包名
uni-app 的安卓包名不是运行时猜出来的,而是打包前就写死在配置里的——最权威的位置就是 manifest.json 文件。新版项目路径是 app-plus.distribute.android.package,旧版可能直接挂在根级 appid 字段下,但后者已不推荐用于 Android 包名定义。
- 打开
manifest.json→ 切换到「源码视图」→ 搜索package或android,一眼定位 - 别信 HBuilderX 界面里“Android 设置”页显示的包名——它只是 UI 映射,真实值以 JSON 源码为准
- 如果用云打包,改完必须重新提交云端配置,本地改了 JSON 不点“同步云端”等于没改
真机上用 plus.runtime.appid 动态读包名(仅限 App 端)
开发调试阶段想验证当前安装包是否匹配预期?可以用 plus.runtime.appid,但它只在原生 App 环境生效,H5、小程序里返回空或报错 plus is not defined。
- 必须加条件编译:
// #ifdef APP-PLUS包裹,否则编译不过或运行报错 - 模拟器大概率不认这个 API,务必真机测试
- 注意:它返回的是实际安装包的包名,和 manifest.json 一致;但如果用了自定义 scheme 或插件劫持启动,极少数情况会异常(比如某些厂商 ROM 强制重写启动 Activity)
签名不能靠代码“算”,得用工具实测安装包
你在代码里调用 getPackageInfo + SHA1 计算签名,结果常和微信/支付宝开放平台要求的对不上——因为它们验的是 APK 安装后系统记录的 signature,而你代码里取的可能是 debug 签名或混淆后的字节流。
- 正确姿势:把打好包的 APK 安装到手机 → 下载微信官方
Gen_Signature_Android.apk→ 输入你的包名 → 点 GetSignature → 复制绿色区域那串 28 位(非 32 位!)SHA1 字符串 - 别用 JDK
keytool -list查 keystore 签名——云打包用的是 DCloud 自有证书,你本地没有私钥,查出来也没用 - 香蕉云编、APK Analyzer 等在线工具也能看签名,但不如官方工具稳定;部分国产 ROM 会拦截签名读取,换台机子再试
防重签配置开不开,本质是信任边界问题
uni-app 的「防重签」不是功能开关,而是安全水位线。开了它,APP 启动时会校验 appid、包名、证书指纹 三项,任一不匹配就闪退——这不是 bug,是设计如此。
- 证书校验最严格:只要别人用不同 keystore 重打包,哪怕包名、appid 都一样,也会被拦住
- 如果你用的是云打包,默认只开
appid和包名校验;要开证书校验,必须上传自己的 .keystore 并勾选「使用自定义证书」 - 上线前务必关掉调试弹窗(
debug模式下防重签失败会弹提示),否则用户看到“签名错误”直接卸载

















