uni-app怎么实现App端的增量热更新版本自动下载安装

小磊小哥_8967

小磊小哥_8967

2026-07-20

992人浏览

原创

增量更新必须用wgt包而非APK,仅更新JS/CSS/图片等前端资源差异,不涉及原生代码变更;需通过HBuilderX制作资源升级包、HTTPS直链下载、compareVersion语义化比对版本,并调用plus.runtime.reloadWgt与plus.runtime.restart生效。

uni-app怎么实现app端的增量热更新版本自动下载安装

增量更新必须用 wgt 包,不是 APK

uni-app 的「增量更新」特指资源包(wgt)更新,不是整包 APK 替换。它只下发 JS、CSS、图片等前端资源差异,不涉及原生代码变更,因此无需重新安装 APP,也绕开了安卓 8+ 的 REQUEST_INSTALL_PACKAGES 权限问题。如果你在 manifest.json 里改了原生配置、加了新原生插件、或调整了 Android/iOS 特有逻辑,那必须走整包更新——这时候谈「增量」就是误判场景。

常见错误现象:plus.runtime.install() 报错 INSTALL_FAILED_USER_RESTRICTED,或 iOS 上静默失败无响应,基本是因为你误把 wgt 当成 apk 去调用安装 API。

  • wgt 更新流程是:downloadFile → plus.runtime.reloadWgt → plus.runtime.restart
  • 下载地址必须是 HTTPS 直链,且服务器需支持 Range 请求(否则断点续传和差分校验会失效)
  • HBuilderX 打包时要选「制作移动App资源升级包」,输出的是 UNIxxxxxx.wgt 文件,不是 xxx.apk

版本比较必须用 compareVersion,不能字符串比

服务端返回的 version 字段(比如 "1.10.0")和本地 plus.runtime.version(比如 "1.9.0")若直接用 > 比较,会因字典序导致误判:"1.9.0" > "1.10.0" 返回 true,但实际是旧版。这在跨月发版(如 1.9 → 1.10)时高频出错。

uni-app 官方推荐的 compareVersion(a, b) 函数按语义化规则逐段转数字比对,应直接复用:

const res = compareVersion(plus.runtime.version, serverData.version);
if (res 
  • 服务端 version 必须规范:仅含数字和点,禁止前导零("1.05.0" ❌)、字母("v1.2.0" ❌)、空格("1.2.0 " ❌)
  • manifest.json 中的「应用版本号」也要保持一致格式,否则 plus.runtime.version 取出来就不匹配

plus.runtime.reloadWgt 后必须 plus.runtime.restart

plus.runtime.reloadWgt 只是把新 wgt 解压覆盖到 _www 目录,但当前 JS 运行上下文仍是旧资源。不重启的话,用户看到的还是老页面,新逻辑不会生效——这不是 bug,是设计行为。

uni-app
uni-app

uni-app 是基于 Vue 的跨端开发框架,适合开发 H5、App、小程序、鸿蒙和多端业务应用。

下载

正确链路是:

uni.downloadFile({
  url: wgtUrl,
  success: (res) => {
    if (res.statusCode === 200) {
      plus.runtime.reloadWgt(res.tempFilePath, () => {
        plus.runtime.restart(); // 必须这一步
      }, (e) => {
        console.error('reloadWgt failed', e);
      });
    }
  }
});
  • iOS 上 reloadWgt 成功后,restart() 会触发冷启动,白屏约 0.5–1 秒属正常
  • Android 上若使用自定义基座(非标准云打包),需确认基座已开启「wgt 升级」能力(HBuilderX → 发行 → 原生App控制台 → 模块配置)
  • 不要在 onLaunch 里立即调用;务必等 plus.ready 触发后再执行,否则 plus.runtime 对象未就绪,调用直接静默失败

强制更新时 iOS 需处理 NSCachesDirectory 清理风险

iOS 系统可能在存储紧张时自动清理 NSCachesDirectory(wgt 默认解压路径),导致重启后回退到旧版。这不是 uni-app 的缺陷,而是系统策略。

应对方式很务实:

  • 每次 reloadWgt 前,先用 plus.io.resolveLocalFileSystemURL 检查目标路径是否存在且完整
  • 若校验失败(如文件缺失、MD5 不匹配),应降级为重新下载 + 重试,而非跳过
  • 上线前务必在低存储空间的真机上实测:手动占满磁盘 → 启动 APP → 触发更新 → 杀进程再启,确认是否仍能加载新版

这个点容易被忽略,因为模拟器和开发机几乎不触发清理,但上线后部分老年 iPhone 用户会集中反馈「更新了又变回去」。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

uni-app

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2823

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

6143

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

7070

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6878

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

983

5

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.09

3843

4

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

2023.11.14

954

3

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2024.03.12

6726

8

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.16

5510

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习