uni-app 热更新频繁出现“WGT安装包中manifest.json文件不存在”的Bug

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app 热更新频繁出现“WGT安装包中manifest.json文件不存在”的Bug

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.98
手机系统:Android
手机系统版本号:Android 14
手机厂商:小米
手机机型:小米12pro
页面类型:vue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX

示例代码:

plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
let currentVersion = widgetInfo.version.replace(/./g, ""); //获取当前版本号
getVersion().then(resData =>{
console.log("http版本信息", resData)
let newVersion = resData.version.replace(/./g, "");
console.log("版本信息", currentVersion, newVersion)
if (Number(currentVersion) <  Number(newVersion)) {
console.log("更新")
uni.showModal({
title: '发现新版本',
content: '请进行热更新',
showCancel: false,
success: function(res) {
if (res.confirm) {
uni.showLoading({
mask: true,
title: '正在更新中,请稍等',
})
uni.downloadFile({
url: resData.url,
success: (downloadResult) => {
uni.hideLoading()
plus.runtime.install(
downloadResult
.tempFilePath, { force: true },
function() {
// 应用热重启,重新启动进入首页。
uni.showModal({
title: '安装成功!',
content: '请点击重启按钮,重新进入应用',
showCancel: false,
confirmText: '重启',
success: function(res) {
if (res.confirm) {
plus.runtime.restart();
} else if(res.cancel) {
plus.runtime.quit(); // 退出应用
}
}
});
},
function(e) {
console.log("安装失败", e)
uni.showToast({
title: '安装失败',
icon: 'none'
})
plus.runtime.quit(); // 退出应用
})
},
fail: (err) => {
uni.hideLoading()
uni.showToast({
title: '下载失败',
icon: 'none'
})
plus.runtime.quit(); // 退出应用
}
})
} else if (res.cancel) {
uni.showToast({
title: '已取消',
icon: 'none'
})
plus.runtime.quit(); // 退出应用
}
}
})
}).catch(e =>{
console.log("获取http版本失败", e)
})
})

操作步骤:


简单修改下工程里面的js或是页面代码。
修改manifest中的应用名称和应用版本号,在原来的基础上加1
点击发行-原生app-制作应用wgt
触发app热更新

预期结果:

实际版本号变化了,会正常触发热更新,并且在没修改模块改变基座的情况下,理应每次都成功


实际结果:


但是偶尔能成功,偶尔又失败

bug描述:

同样的工程,我只是改了一行代码,修改了应用版本名称和应用版本号,在原来的基础上加1,然后选择,发行-》制作wgt。 上传wgt包到服务器触发热更新。 同样的更新代码,去年一直没报这个错误,就在最近这半个月时常出现,最近经常出现热更新失败,错误提示 “WGT安装包中manifest.json文件不存在” 我打开了wgt包,里面是存在manifest.json,下载地址我也试了是正常,如果是下载地址有问题就不可能偶尔成功偶尔又失败。 我只修改了manifest配置文件中的应用版本号和应用名称,并且我只是简单的修改了我的前端代码而已,为什么最近大概半个月到一个月这段时间,就频繁出现这个问题。


6 回复

已解决,下载的链接不能带有下划线


我改了后依然还是 报这样的错

前天我重新把hbuild重新安装了一遍,安装之前其实我看了,编译器是最新的,插件也是最新的,我还是重新安装了,今天又是。昨晚重新打的包进去,今天我就改了一行代码,打了个热更新的包,还是失败了

重新打了基座后再打一个wgt,还是一样的,今天不管怎么试,都热更新失败 plus.runtime.install 时 就会报一个 { “code”: -1202, “message”: “WGT安装包中manifest.json文件不存在” }

问题解决了吗,我也遇到了这个 bug

在 Uni-App 开发中,热更新时出现“WGT安装包中 manifest.json 文件不存在”的 Bug,通常是由于以下几个原因导致的。以下是一些可能的原因及解决方法:

1. WGT 包生成问题

  • 原因:在生成 WGT 包时,manifest.json 文件可能没有正确打包到 WGT 文件中。
  • 解决方法
    • 确保在生成 WGT 包时,manifest.json 文件被正确包含在内。可以使用 HBuilderX 的“发行”功能来生成 WGT 包,确保打包过程中没有错误。
    • 检查 WGT 包的内容,确保 manifest.json 文件存在。可以使用解压工具打开 WGT 文件,查看其内容。

2. 文件路径问题

  • 原因:在热更新时,manifest.json 文件的路径可能不正确,导致系统无法找到该文件。
  • 解决方法
    • 确保 manifest.json 文件位于 WGT 包的根目录下。
    • 检查热更新代码中是否正确地指定了 WGT 包的路径。

3. 热更新代码问题

  • 原因:在调用热更新接口时,可能没有正确处理 WGT 包的路径或文件名。
  • 解决方法
    • 确保在调用 plus.runtime.installuni.downloadFile 等相关接口时,传入的 WGT 包路径是正确的。
    • 示例代码:
      uni.downloadFile({
          url: 'https://example.com/your-app.wgt',
          success: (res) => {
              if (res.statusCode === 200) {
                  plus.runtime.install(res.tempFilePath, {
                      force: true
                  }, function() {
                      console.log('安装成功');
                  }, function(e) {
                      console.error('安装失败:', e);
                  });
              }
          },
          fail: (err) => {
              console.error('下载失败:', err);
          }
      });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!