跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

uni-app怎么更新App版本 uni-app热更新与整包更新方案【实战】

热更新与整包更新需按场景区分:仅改name等基础字段且未动原生配置可热更新;新增权限、改android:name、升级SDK或uni-app编译器、修改uni_modules原生插件则必须整包更新。 热更新和整包更新不是二选一,而是必须按场景分开走;错用 wgt 更新原生模块或权限,App 会白屏或闪退,且无法回滚。 怎么判断该走热更新还是整包更新 关键看
manifest.json
里改了什么: 只改了
name
、
description
、
versionName
、
versionCode
,且没动原生相关配置 → 可走热更新(
.wgt
) 新增了
Android
权限(如定位、后台运行)、改了
android:name
、升级了 SDK 或 uni-app 编译器版本 → 必须整包更新(
.apk
/ App Store URL) 改了
uni_modules
里的原生插件(比如集成极光推送、微信登录 SDK)→ 整包更新,热更新不生效 注意:
versionCode
是纯数字(如
102
),用于比大小;
versionName
(如
"1.0.2"
)仅作展示,不能直接字符串比较。后端接口返回的也必须是
versionCode
数值,否则 iOS 侧可能因类型转换失败跳过检测。 热更新 wgt 包生成与校验要点 不要依赖 HBuilderX “发行 → 制作资源升级包” 一键生成——它默认打包根路径不对,容易漏
manifest.json
或错压子目录。 先执行
yarn build:app-plus
(或
npm run build:app-plus
),输出目录如
dist/build/app-plus
进入该目录,确认存在
manifest.json
且其
versionCode
已更新;再用 zip 命令从该目录**平级打包所有文件**:
zip -r app.wgt . -x "*.DS_Store"
重命名为
.wgt
后,用
unzip -l app.wgt | head -10
检查:第一行必须是
manifest.json
,不是
dist/build/app-plus/manifest.json
上传前手动解压校验:打开
manifest.json
,确认
versionCode
和你期望一致;否则 plus.runtime.install 会静默失败 plus.runtime.install 的 force 参数陷阱
force: true
看似省事,但它是双刃剑: 设为
true
:跳过
versionCode
校验,哪怕新包
versionCode
更低也会强行覆盖 → 用户可能降级到有严重 bug 的版本 设为
false
(默认):要求新包
versionCode > 当前 versionCode
,否则回调直接进 error → 但错误信息是
"Install failed: invalid version"
,不提示具体原因 真实建议:服务端返回时就带
mustForce: false
字段,客户端根据它动态传
force
;强制更新场景(如旧版 API 已下线)才设
true
,且必须配合弹窗强提示 另外,
plus.runtime.install
成功后不会自动重启,必须显式调用
plus.runtime.restart()
;iOS 上若未在
plusready
后调用,可能卡在白屏。 整包更新在 iOS 上的实际限制 iOS 无法直接下载安装
.ipa
,只能跳转 App Store;但 Apple 对跳转链接审核极严:
itms-apps://itunes.apple.com/cn/app/id{appleId}
已被弃用,真机上会 404;必须用
https://apps.apple.com/cn/app/id{appleId}
如果 App 还没上架(测试阶段),
appleId
为空或无效,
plus.runtime.launchApplication
会静默失败,无任何回调 安卓侧不要硬写
market://
,华为、小米、OPPO 等厂商市场 scheme 不统一;稳妥做法是后端返回一个通用跳转页 URL,由 H5 页面做 UA 判断后跳对应商店 最后提醒一句:热更新包体积超过 10MB 就该警觉——说明你误把大图、视频、字体等静态资源打进去了,这会导致低端机安装失败或内存溢出;这些资源该走 CDN 按需加载,而不是塞进 wgt。

相关文章