欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
uni-app WGT 热更新出现 "manifest.json 文件的 version 版本不匹配" 通常是因为 WGT 包中的版本号(versionCode/versionName)小于或等于当前 App 已安装的版本号。
问题原因
根据知识库信息,WGT 更新时系统会严格比较版本号:
- WGT 资源包中的
versionCode 为空或小于内置应用的版本时,会导致更新失败或版本回退
- 必须同时修改
versionName 和 versionCode,且新版本的值必须严格大于当前安装版本
- 如果是二次 WGT 更新(之前已经 WGT 更新过,再次 WGT 更新),可能会出现特殊的版本匹配问题
解决方案
1. 检查版本号配置
在生成 WGT 包前,确保 manifest.json 中的版本号已正确提升:
- 应用版本名称 (versionName):如从 1.0.0 改为 1.0.1
- 应用版本号 (versionCode):如从 100 改为 101(必须为数字,且必须大于旧版本)
2. WGT 更新实现代码
在 App.vue 的 onLaunch 中检测升级,确保向服务器传递当前版本号,并验证服务器返回的版本号确实大于本地版本:
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
uni.request({
url: 'http://www.example.com/update/',
data: {
version: widgetInfo.version, // 当前 WGT 版本
versionCode: widgetInfo.versionCode, // 当前版本号
name: widgetInfo.name
},
success: (result) => {
var data = result.data;
// 必须确保服务器返回的版本号大于本地版本
if (data.update && data.wgtUrl && data.versionCode > widgetInfo.versionCode) {
uni.downloadFile({
url: data.wgtUrl,
success: (downloadResult) => {
if (downloadResult.statusCode === 200) {
plus.runtime.install(downloadResult.tempFilePath, {
force: false // 设置为 true 可以强制安装,但建议保持 false
}, function() {
console.log('install success...');
plus.runtime.restart();
}, function(e) {
console.error('install fail...', e);
});
}
}
});
}
}
});
});
// #endif
3. 二次 WGT 更新问题
如果是 WGT 更新后再次 WGT 更新出现版本不匹配,可以参考社区解决方案:WGT 二次更新问题处理
推荐使用 uni-upgrade-center
对于生产环境,建议使用官方提供的 App 升级中心 uni-upgrade-center:
- 自动处理版本号比较逻辑(必须同时大于 appVersion 和 wgtVersion)
- 支持 WGT 热更新和整包更新
- 支持强制更新、静默更新、下载进度显示
- 云端管理版本发布,避免手动版本号错误
文档地址:uni-upgrade-center 升级中心
重要注意事项
-
HBuilderX 版本兼容性:如果之前使用 HBuilderX 版本 < 4.14 打包,现在使用 HBuilderX 版本 >= 4.14,必须整包更新(APK/IPA),不可使用 WGT 更新(因为 4.14 升级了 Vue 版本,低版本基座与高版本 WGT 资源包不兼容)
-
版本号规则:WGT 更新要求服务器返回的版本必须同时大于当前 App 版本和当前 WGT 版本(因为上一次可能是 WGT 热更新)
-
整包与 WGT 区别:
- WGT 只能更新前端界面功能(uni-app 业务代码)
- 如果修改了原生插件、AndroidManifest.xml 等原生配置,必须使用整包(APK/IPA)更新
-
iOS 特别注意:iOS 平台使用 WGT 更新可能违反 Apple 审核政策,审核期间请勿弹窗升级,建议使用静默更新,且升级后尽量不要自行重启
如果问题仍未解决,建议到 ask 社区发帖 并提供具体的版本号对比信息(当前版本号 vs WGT 包中的版本号)。
1 个回复
Ask小助手 - Ask社区AI助手
uni-app WGT 热更新出现 "manifest.json 文件的 version 版本不匹配" 通常是因为 WGT 包中的版本号(versionCode/versionName)小于或等于当前 App 已安装的版本号。
问题原因
根据知识库信息,WGT 更新时系统会严格比较版本号:
versionCode为空或小于内置应用的版本时,会导致更新失败或版本回退versionName和versionCode,且新版本的值必须严格大于当前安装版本解决方案
1. 检查版本号配置
在生成 WGT 包前,确保
manifest.json中的版本号已正确提升:2. WGT 更新实现代码
在
App.vue的onLaunch中检测升级,确保向服务器传递当前版本号,并验证服务器返回的版本号确实大于本地版本:3. 二次 WGT 更新问题
如果是 WGT 更新后再次 WGT 更新出现版本不匹配,可以参考社区解决方案:WGT 二次更新问题处理
推荐使用 uni-upgrade-center
对于生产环境,建议使用官方提供的 App 升级中心 uni-upgrade-center:
文档地址:uni-upgrade-center 升级中心
重要注意事项
HBuilderX 版本兼容性:如果之前使用 HBuilderX 版本 < 4.14 打包,现在使用 HBuilderX 版本 >= 4.14,必须整包更新(APK/IPA),不可使用 WGT 更新(因为 4.14 升级了 Vue 版本,低版本基座与高版本 WGT 资源包不兼容)
版本号规则:WGT 更新要求服务器返回的版本必须同时大于当前 App 版本和当前 WGT 版本(因为上一次可能是 WGT 热更新)
整包与 WGT 区别:
iOS 特别注意:iOS 平台使用 WGT 更新可能违反 Apple 审核政策,审核期间请勿弹窗升级,建议使用静默更新,且升级后尽量不要自行重启
如果问题仍未解决,建议到 ask 社区发帖 并提供具体的版本号对比信息(当前版本号 vs WGT 包中的版本号)。
要回复问题请先登录或注册
公告
更多>相关问题