j***@aliyun.com
j***@aliyun.com
  • 发布:2023-12-23 23:29
  • 更新:2025-03-27 14:53
  • 阅读:377

【报Bug】APP远程升级后android系统重启后 appWgtVersion版本号被回退

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11

HBuilderX类型: 正式

HBuilderX版本号: 3.99

手机系统: Android

手机系统版本号: Android 11

手机厂商: RK

手机机型: RK

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

系统预制uniapp开发的APK,默认安装在system/app目录(1.0.0版本),APP远程升级首次启动版本正常,android重启后(appWgtVersion回退到1.0.0版本),经过排查app其中时复制到/data/data/包名/apps下的uniapp资源是/system/app目录下APK的assets资源,app启动的是新版本的apk,导致自定义基站升级成功,但是appWgt版本被回退的现象

预期结果:

appWgtVersion被回退

实际结果:

系统预制uniapp开发的APK,默认安装在system/app目录(1.0.0版本),APP远程升级首次启动版本正常,android重启后(appWgtVersion回退到1.0.0版本),经过排查app其中时复制到/data/data/包名/apps下的uniapp资源是/system/app目录下APK的assets资源,app启动的是新版本的apk,导致自定义基站升级成功,但是appWgt版本被回退的现象

bug描述:

系统预制uniapp开发的APK,默认安装在system/app目录(1.0.0版本),APP远程升级首次启动版本正常,android重启后(appWgtVersion回退到1.0.0版本),经过排查app其中时复制到/data/data/包名/apps下的uniapp资源是/system/app目录下APK的assets资源,app启动的是新版本的apk,导致自定义基站升级成功,但是appWgt版本被回退的现象

2023-12-23 23:29 负责人:无 分享
已邀请:
3***@qq.com

3***@qq.com

同样的问题,APP升级+重启后一直提示需要更新

1***@qq.com

1***@qq.com

解决了吗

s***@seakoi.cn

s***@seakoi.cn

这个问题解决了嘛

skyline_jia

skyline_jia

我也有类似的问题,但我是覆盖升级,APP 处于前台时重启机器有时会出现 appWgtVersion 回退。但关了APP,再次打开又好了。
我的解决办法是终止APP当前进程,再打开APP
App.vue onLaunch 里检查 appWgtVersion

onLaunch: function (options) {  
  // 有时appWgt会出现回退,即用js的旧代码,原因不明。  
  // 终止当前进程,再重新启动  
  let appBaseInfo = uni.getAppBaseInfo();  

  if (appBaseInfo.appVersion !== appBaseInfo.appWgtVersion) {  
    coldRestart(argsObject);  
    return;  
  }  
}  
/**  
 * APP 冷重启  
 *  
 * @param {Object} args 启动的Intent 传递的 Extra 参数  
 */  
export function coldRestart(args) {  
    const Context = plus.android.importClass('android.content.Context');  
    const PendingIntent = plus.android.importClass('android.app.PendingIntent');  
    const Intent = plus.android.importClass('android.content.Intent');  
    const AlarmManager = plus.android.importClass('android.app.AlarmManager');  
    const Process = plus.android.importClass('android.os.Process');  

    // 延迟启动  
    let mainActivity = plus.android.runtimeMainActivity();  
    let alarmManager = plus.android.invoke(mainActivity, 'getSystemService', Context.ALARM_SERVICE);  
    // 构建 Intent  
    let restartIntent = new Intent();  
    restartIntent.setClassName(mainActivity, 'io.dcloud.PandoraEntry');  
    restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);  
    // 透传参数到重启后的Activity  
    if (args) {  
        Object.entries(args).forEach(([key, value]) => {  
            restartIntent.putExtra(key, value);  
        });  
    }  
    // 延迟触发  
    let pendingIntent = PendingIntent.getActivity(  
        mainActivity,  
        0,  
        restartIntent,  
        PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE // 兼容 Android 12+  
    );  
    if (alarmManager != null) {  
        let currentTimeMillis = new Date().getTime();  
        plus.android.invoke(alarmManager, 'setExact', AlarmManager.RTC_WAKEUP, currentTimeMillis + 200, pendingIntent);  
    } else {  
        plus.nativeUI.toast('alarmManager == null');  
    }  

    // 立即终止当前进程实现强制退出  
    Process.killProcess(Process.myPid());  
}

要回复问题请先登录注册