uni-app鸿蒙wgt热更新无效

uni-app鸿蒙wgt热更新无效

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

产品分类:uniapp/App

PC开发环境操作系统:Windows

手机系统:HarmonyOS NEXT

手机系统版本号:HarmonyOS 5.1.0

手机厂商:华为

手机机型:nova14

页面类型:vue

vue版本:vue3

打包方式:云端

示例代码:

const downloadTask = uni.downloadFile({
url: this.data.edition_url,
success: res => {
console.log('res.statusCode-----',res.statusCode)
if (res.statusCode === 200) {
console.log('res.statusCode === 200')
plus.runtime.install(
res.tempFilePath, {
force: true //true表示强制安装,不进行版本号的校验;false则需要版本号校验,
},
function() {
// console.log('success', success);
console.log('package_type----',package_type)
if (package_type == 1) {
console.log('plus.runtime.restart()')
// #ifdef APP-HARMONY
uni.showModal({
title: '更新完毕',
content: '请手动重启',
showCancel: false,
success(res) {
plus.runtime.quit()
}
})
// #endif
// #ifdef APP-PLUS
//更新完重启app
plus.runtime.restart();
// #endif
}
},
function(e) {
//提示部分wgt包无法安装的问题
that.data.edition_force = 0;
uni.showToast({
title: e.message,
icon: 'none',
duration: 2500
})
setTimeout(() => {
uni.navigateBack()
}, 2000)
}
)
if (package_type == 0) {
// 解决安装app点击取消,更新还在的问题
this.data.edition_force = 0;
uni.navigateBack();
}
}
}
});

操作步骤:

在普通的vue页面修改字眼,如“暂无公告”改为“暂无公告WGT”

预期结果:

页面显示“暂无公告WGT”

实际结果:

页面显示暂无公告

bug描述:

通过发行-APP-制作应用WGT包, 通过plus.runtime.installapi安装 安装后重启了应用,但是没效果,版本号也没有任何变化


更多关于uni-app鸿蒙wgt热更新无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

该bug反馈内容基本完整,提供了清晰的标题、环境信息、代码示例、复现步骤及结果。但缺少关键细节:未说明HBuilderX编译的wgt包版本与手机上已安装应用的uniRuntimeVersion是否匹配(这是wgt热更新的核心条件),且未提及安装过程中是否有错误提示。
经分析,此问题不成立,主要原因如下:

用户在HarmonyOS NEXT(属于uni-app x平台)使用plus.runtime.install API,但uni-app x中不再支持plus和weex的API。鸿蒙NEXT需通过uni-app x的热更新机制实现,而非传统plus API。
wgt热更新要求编译版本(uniCompileVersion)与设备运行时版本(uniRuntimeVersion)必须兼容。若HBuilderX 4.87编译的wgt包与旧版客户端引擎不匹配,会默认拦截更新(需在manifest配置忽略报警)。
知识库明确说明:HBuilderX 4.41+仅支持元服务热重载(非wgt热更新),且需设备基础依赖包版本≥1.0.13.310。用户操作的是wgt热更新,与元服务热重载机制无关。

建议解决方案:

鸿蒙平台应使用uni-app x的热更新规范,而非plus API。
检查wgt包与设备运行时的版本兼容性,必要时在manifest.json中配置"compatible": {“ignoreVersionCheck”: true}。
确认设备是否满足热更新条件(执行hdc shell bm get -d检查基础包版本)。 内容为 AI 生成,仅供参考

更多关于uni-app鸿蒙wgt热更新无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


根据你提供的信息,问题可能出在以下几个方面:

  1. HarmonyOS NEXT兼容性问题:你使用的是HarmonyOS NEXT系统,而uni-app的wgt热更新机制主要针对Android和iOS平台设计。对于HarmonyOS NEXT,可能存在兼容性问题,导致plus.runtime.install无法正常安装wgt包。

  2. 重启逻辑问题:在代码中,你使用了条件编译#ifdef APP-HARMONY#ifdef APP-PLUS。对于HarmonyOS平台,你调用了plus.runtime.quit()来退出应用,但这可能无法触发应用重启。建议尝试使用uni.reLaunchuni.navigateTo重新加载首页,而不是完全退出应用。

  3. wgt包制作问题:请确保制作的wgt包是基于当前应用版本的正确增量包。如果wgt包版本号低于当前应用版本,且未设置force: true,安装可能会失败。

  4. 安装路径问题res.tempFilePath可能不是有效的wgt文件路径。建议在安装前通过plus.io.resolveLocalFileSystemURL检查文件是否存在。

针对HarmonyOS NEXT,可以尝试以下修改:

// 修改重启逻辑
if (package_type == 1) {
    // #ifdef APP-HARMONY
    uni.showModal({
        title: '更新完毕',
        content: '更新完成,即将重启应用',
        showCancel: false,
        success(res) {
            // 尝试使用reLaunch重启应用
            uni.reLaunch({
                url: '/pages/index/index'
            });
        }
    });
    // #endif
    // #ifdef APP-PLUS
    plus.runtime.restart();
    // #endif
}

另外,建议在安装前添加日志输出,检查wgt文件是否下载成功:

success: res => {
    console.log('下载状态码:', res.statusCode);
    console.log('临时文件路径:', res.tempFilePath);
    // 检查文件是否存在
    plus.io.resolveLocalFileSystemURL(res.tempFilePath, function(entry) {
        console.log('文件存在,大小:', entry.size);
    }, function(e) {
        console.log('文件不存在或无法访问:', e.message);
    });
    // ... 后续安装代码
}
回到顶部