3***@qq.com
3***@qq.com
  • 发布:2025-12-25 22:39
  • 更新:2025-12-25 22:40
  • 阅读:18

uniapp自动升级,我打包号后进行升级,但是升级后的app版本号变了,但是里面的内容感觉没有更新,是跟打包有关吗,有些代码感觉没有打包上去,界面都变了

分类:uni-app

//APP更新
export default function appUpdate() {

console.log('plus.runtime.appid', plus.runtime.appid)
console.log('plus.runtime.version', plus.runtime.version)
console.log('uni.getSystemInfoSync().appVersion:', uni.getSystemInfoSync().appVersion)
console.log('plus.device.imei', plus.device.imei)

const apiUrl = 'https://dev3.liwentech.com/jeecg-boot/appVersionUpdate/lwAppVersionUpdate/selectNewAppVersion'
const fuqUrl = 'https://dev3.liwentech.com/jeecg-boot/sys/common/static/'

// 工具函数:将对象转为 URL 查询字符串
function objToQuery(obj) {
const parts = [];
for (const key in obj) {
if (obj.hasOwnProperty(key) && obj[key] != null && obj[key] !== '') {
parts.push(${encodeURIComponent(key)}=${encodeURIComponent(obj[key])});
}
}
return parts.join('&');
}

const params = {
appid: plus.runtime.appid,
version: plus.runtime.version,
imei: plus.device.imei // 如果为空,后面会被过滤掉
};

// 转为查询字符串
const queryString = objToQuery(params);
const url = ${apiUrl}?${queryString};

uni.request({
url: url, //检查更新的服务器地址
method: 'GET',
success: (res: any) => {
plus.runtime.getProperty(plus.runtime.appid, function (wgtinfo) {
console.log('客户端版本信息 wgtinfo', wgtinfo)
console.log('服务端版本信息 res', res)
// 客户端版本
let client_version = wgtinfo.version

    //------------------------前两位大版本有改动-----------------------------------------------  
    // 大版本是否一致 版本号1.1.0,前两位如果有改动,就是大版本更新;否则就是小版本热更新  
    const flag_update =  
      client_version.split('.').splice(0, 2).join('.') !=  
      res.data.result.version.split('.').splice(0, 2).join('.')  
    //------------------------前两位大版本有改动-----------------------------------------------  

    //------------------------第三位小版本有改动-热更新-----------------------------------------------  
    // 客户端版本号  
    let client_version_number = Number(client_version.split('.')[2])  
    // 服务器版本号  
    let current_version_number = Number(res.data.result.version.split('.')[2])  
   // 如果客户端版本号小于服务器版本号,则提醒用户更新  
    const flag_hot = !flag_update && client_version_number < current_version_number  
    //------------------------第三位小版本有改动-热更新-----------------------------------------------  

    console.log('客户端版本 client_version', client_version)  
    console.log('客户端版本号 client_version_number', client_version_number)  
    console.log('服务器版本号 current_version_number', current_version_number)  
    console.log('升级更新 flag_update', flag_update)  
    console.log('热更新 flag_hot', flag_hot)  

    if (flag_update) {  
      console.log('*****开始大版本更新*****')  
      // 提醒用户更新  
      uni.showModal({  
        title: '更新提示',  
        content: res.data.result.note,  
        success: (showResult) => {  
          if (showResult.confirm) {  
            plus.nativeUI.toast('正在准备环境,请稍后!')  
            console.log(res.data.result.url)  
            const url = fuqUrl+res.data.result.url  
            console.log(url)  
            const downloadTask = plus.downloader.createDownload(  
              url,  
              {  
                method: 'GET',  
                filename: '_doc/update.apk',  
              },  
              function (d, status) {  
                if (status == 200) {  
                   const path = d.filename; //下载apk  
   //                plus.runtime.install(path) // 自动安装apk文件  
                  plus.runtime.install(  
                      path,  
                      { force : true },  
                      ()=>{  
                          const currentWebview = plus.webview.currentWebview();  
                            if (currentWebview) {  
                              currentWebview.clearCache();     // 清除页面缓存  
                              currentWebview.clearHistory();   // 清除历史记录  
                              currentWebview.reload(true);     // 强制重载  
                            }   
                       uni.clearStorageSync()  
                       plus.nativeUI.toast('安装成功,即将重启');  
                        // 清除缓存文件  
                        plus.cache.clear(() => {  
                          plus.runtime.restart()// 重启应用  
                        })  
                      },  
                        (e) => {  
                          console.error('安装失败:', e);  
                          plus.nativeUI.alert(`安装失败: ${e.message}`);  
                        }  
                  )  
                } else {  
                  plus.nativeUI.alert('版本更新失败:' + status)  
                }  
              },  
            )  
            downloadTask.start()  
          }  
        },  
      })  
    }  
    // else if (flag_hot) {  
    //   console.log('*****开始小版本热更新*****')  
    //   const wgtUrl = fuqUrl+res.data.result.url  

// uni.downloadFile({
// url: wgtUrl,
// success: (downloadResult) => {
// console.log("热更新downloadResult",downloadResult.tempFilePath)
// if (downloadResult.statusCode === 200) {
// plus.nativeUI.toast(正在热更新!${res.data.result.versionCode})
// plus.runtime.install(
// downloadResult.tempFilePath,
// {
// force: false,
// },
// function () {
// plus.nativeUI.toast('热更新成功')
// plus.runtime.restart()
// },
// function (e) {
// console.log(e)
// plus.nativeUI.toast(热更新失败:${e.message})
// },
// )
// }
// },
// })
// }
})
},
})
}

2025-12-25 22:39 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

您的问题很可能是由于热更新逻辑被注释导致的。在您的代码中,// else if (flag_hot) 部分被注释了,这意味着当检测到小版本更新时(仅第三位数字变化),系统不会执行热更新操作,而是直接跳过。

关键点分析:

  1. 热更新未启用:小版本更新应使用wgt热更新,但您的代码中这部分逻辑被注释,导致只能进行整包更新
  2. 打包问题可能性:如果整包更新后内容仍无变化,可能是新版本APK打包时未包含最新代码
  3. 缓存问题:即使更新成功,旧缓存可能导致显示旧内容

解决方案:

  1. 启用热更新逻辑,取消// else if (flag_hot)的注释
  2. 确认打包时使用了最新代码(检查HBuilderX的manifest.json和编译日志)
  3. 更新后确保彻底清除缓存:plus.cache.clear()uni.clearStorageSync()
  4. 建议使用官方uni-upgrade-center插件,它提供更完善的版本管理功能

调试建议:

  • 检查服务器返回的wgt/apk URL是否正确
  • 对比新旧版本manifest.json中的version字段
  • 在真机调试时查看控制台日志,确认wgt包是否成功下载安装

注意:整包更新(APK)和热更新(wgt)是两种不同机制,小版本更新应优先使用热更新。

内容为 AI 生成,仅供参考

要回复问题请先登录注册