uni-app 安卓在增量更新后重启应用卡在启动页面进不去

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

uni-app 安卓在增量更新后重启应用卡在启动页面进不去

产品分类

uniapp/App

开发环境信息

项目 信息
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 4.42
手机系统 Android
手机系统版本号 Android 13
手机厂商 小米
手机机型 小米13
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码

var downloadTask = uni.downloadFile({
  url: this.appInfo.downloadUrl,
  success: (downloadResult) => {
    this.downloadResult = downloadResult
  },
  fail: (item) => {
    this.$queue.showToast(item);
    console.log(item)
  }
});

downloadTask.onProgressUpdate((item) => {
  this.isShow = true;
  this.progress = item.progress;
  if (this.progress === 100) {
    setTimeout(() => {
      this.toRestart();
    }, 500);
  }
});

toRestart() {
  let that = this;
  if (this.downloadResult.statusCode === 200) {
    plus.runtime.install(this.downloadResult.tempFilePath, {
      force: true, // 是否校验版本号
    }, function(e) {
      console.log(e);
      that.downloadFlag = true;
      plus.nativeUI.showWaiting("更新完成");
      setTimeout(() => {
        plus.nativeUI.closeWaiting();
        // plus.runtime.restart();
      }, 1500);
    }, function(e) {
      console.log(e);
      console.error('install fail...');
      that.$queue.showToast(e.message);
    });
  }
}

操作步骤

应用商店下的新包在版本增量更新后通过代码重启应用卡在启动页面进不去,手动重启app才可以,经历过增量更新的包二次增量更新不会有这种问题,只有第一次从应用商店下载的新包会有。

预期结果

更新后重启应用应该能进入。

实际结果

卡在启动页面进不去。

bug描述

安卓app在通过应用商店下载后使用增量更新使用 plus.runtime.restart() 重启应用后始终卡在启动页面进不去,我在 onLaunch 中使用 setTimeout(() => { plus.navigator.closeSplashscreen();}, 5000); 同样也进不去好像未触发 onLaunch,然后我杀掉进程重新打开app才可以。另外使用 plus.runtime.install 安装时,如果吧版本号校验去掉会提示“WGT安装包中manifest.json文件的version版本不匹配”,把版本号校验加上没有提示,但是安装重启卡在启动页。


3 回复

应用商店增量更新应该会杀死APP才对 你是增量更新后首次冷启动再触发wgt升级?然后重启白屏?


不是的,我是应用进入之后先是检查版本是否需要,这时候可能是增量更新直接下载wgt包,下载完成后重启app,这个时候就会卡在启动页动画进不来,我使用自定义基座包测试没问题,但是应用商店下载的会有问题,这个时候就需要手动重启应用

在处理uni-app在安卓平台增量更新后应用卡在启动页面的问题时,首先需要确保增量更新的流程正确无误,并且更新后的资源被正确加载。以下是一些可能的解决方案和代码示例,专注于技术实现层面。

1. 检查增量更新逻辑

确保你的增量更新逻辑正确无误,以下是一个简单的增量更新流程示例:

// 检查是否需要更新
uni.getSystemInfoSync({
    success: (res) => {
        const currentVersion = res.version; // 当前版本号
        const latestVersion = 'x.x.x'; // 服务器上的最新版本号

        if (currentVersion !== latestVersion) {
            // 下载增量更新包
            uni.downloadFile({
                url: 'https://example.com/update/patch.zip',
                success: (downloadRes) => {
                    // 解压并应用更新包
                    // 这里可能需要一个自定义的解压函数,因为uni-app没有内置的解压功能
                    unzipAndUpdate(downloadRes.tempFilePath);
                },
                fail: (err) => {
                    console.error('下载更新包失败', err);
                }
            });
        } else {
            // 正常启动应用
            startApp();
        }
    }
});

// 解压并更新应用的函数(伪代码)
function unzipAndUpdate(filePath) {
    // 使用第三方库或原生插件解压文件
    // 解压完成后,重启应用
    uni.showModal({
        title: '更新提示',
        content: '更新完成,即将重启应用',
        success: (res) => {
            if (res.confirm) {
                plus.runtime.restart(); // 重启应用
            }
        }
    });
}

2. 确保资源正确加载

增量更新后,确保所有必要的资源(如图片、字体、配置文件等)都被正确加载。可以在应用启动时检查这些资源的完整性。

3. 使用原生插件处理特殊情况

对于某些复杂的更新逻辑,可能需要使用原生插件来处理。例如,可以使用一个原生插件来监控应用的启动过程,并在检测到更新后执行特定的操作。

4. 日志记录与调试

增加日志记录功能,以便在出现问题时能够追踪到具体的错误点。这可以通过使用uni-app的日志功能或原生插件的日志功能来实现。

console.log('应用启动中...');
// 在关键步骤添加日志记录
console.log('开始检查更新...');
// ... 其他日志记录点

通过上述方法,你可以更精确地定位问题所在,并采取相应的措施来解决uni-app在安卓平台增量更新后应用卡在启动页面的问题。如果问题依旧存在,建议详细检查更新包的生成和应用逻辑,确保每一步都正确无误。

回到顶部