增量更新需差分补丁、服务端配合与客户端校验联动,wgt仅支持js/css/模板等资源更新,插件、原生模块、权限及ios entitlements变更必须整包更新;金融政务类app强制整包;下载wgt须正确设置filename(含完整路径和.wgt后缀)及retry策略。

不能直接用 plus.runtime.install 安装增量包(wgt)——它只认完整 APK/IPA 或合法 wgt 包,且 wgt 必须签名一致、版本兼容。真正的增量更新靠的是「差分补丁 + 服务端配合 + 客户端校验」三者联动,不是单纯下载一个文件就完事。
怎么判断该走 wgt 还是整包更新
别一上来就硬推 wgt。wgt 只能更新 JS、CSS、模板、静态资源,插件、原生模块、权限变更、iOS entitlements 等都必须走整包(APK/IPA)。实际项目中建议按以下逻辑分流:
- 后端返回的更新策略字段(如
updateType: "wgt"或"apk")优先级最高 - 若返回
wgt,检查本地manifest.json中的name和versionName是否与服务端 wgt 包的manifest一致(否则plus.runtime.install会静默失败) - Android 上若 wgt 包含新增原生插件(如新接入了
uni-pay),必须降级为整包;iOS 因 App Store 限制,wgt 几乎不可用于生产环境 - 金融/政务类 App 强制要求整包更新,因 wgt 无法通过 Apple 审核或监管审计
下载 wgt 增量包时必须设对 filename 和 retry
plus.downloader.createDownload 下载 wgt 时,filename 不只是路径,它决定安装时的校验路径和缓存位置。写错会导致 install 找不到文件或校验失败:
-
filename必须带完整路径且以.wgt结尾,例如/documents/update_1.2.3.wgt(推荐用plus.io.convertLocalFileSystemURL转换) -
retry: 3和retryInterval: 30是弱网必备——wgt 包虽小(经 bsdiff 后常 - 不要省略
timeout: 300:某些运营商 DNS 污染会导致连接 hang 住,超时后可 fallback 到备用 CDN 地址 - 监听
statechanged事件比只等completedCallback更可靠,能捕获DOWNLOADING、PAUSED状态做 UI 反馈
plus.runtime.install 失败的三个隐藏原因
90% 的静默安装失败不是代码问题,而是运行时环境没达标:
- Android 8+ 需提前申请
REQUEST_INSTALL_PACKAGES权限,且用户手动开启「允许安装未知来源应用」——wgt 不受此限,但很多人误以为所有安装都要弹权限框 - iOS 上
plus.runtime.install对 wgt 无效,仅支持热更新(plus.runtime.reload),且必须用 HBuilderX 生成的带__UNI__签名的 wgt - 调用
install前未校验文件完整性:wgt 包需附带manifest.json和signature字段,客户端要用plus.io.resolveLocalFileSystemURL读取并验证 SHA256,否则安装会立即退出无提示 - App 启动时若正在后台下载,
install可能被系统 kill——务必在onResume生命周期里检查下载状态再触发安装
wgt 的“静默”本质是用户感知不到弹窗,但它的成败极度依赖服务端差分算法的鲁棒性和客户端路径/签名/权限三者的咬合。漏掉任意一环,都会变成“看似自动,实则卡死”。











