qq1034673520
qq1034673520
  • 发布:2026-10-08 17:48
  • 更新:2026-10-08 17:49
  • 阅读:23

【报Bug】设为主屏幕应用后,升级应用后,应用的页面会回退到设置主屏幕应用时候的页面

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 4.87

手机系统: Android

手机系统版本号: Android 11

手机厂商: 商米

手机机型: d2

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

App下载地址或H5⽹址: www.flower.huiqy.com/file/customer/down_video.php

示例代码:
<application   
        android:name="io.dcloud.application.DCloudApplication"  
        android:allowBackup="true"  
        android:allowClearUserData="true"  
        android:icon="@drawable/icon"  
        android:label="@string/app_name"  
        android:largeHeap="true"  
        android:extractNativeLibs="true"  
        android:required="false"  
        android:supportsRtl="true">  
       <activity android:name="io.dcloud.PandoraEntry"  
                 android:exported="true"  
                 android:configChanges="fontScale|keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize"    
                 android:hardwareAccelerated="true"     
                 android:launchMode="singleTask"   
                 android:alwaysRetainTaskState="false"  
                 android:clearTaskOnLaunch="true"  
                 android:screenOrientation="user"    
                 android:windowSoftInputMode="adjustResize">  

            <intent-filter>  
                <action   android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  

            <intent-filter>  
                <action   android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.HOME" />  
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>  

        </activity>  

    </application>  

操作步骤:
  1. 打包 APK,在 AndroidManifest.xml 配置应用为主屏幕桌面(Launcher)
  2. 安装该 APK,将本应用设置为设备默认主屏幕应用
  3. 打包新版本 APK,执行覆盖升级安装
  4. 重启安卓设备
  5. 进入应用观察:版本号是新版本,但应用业务内容 / 配置回到首次设为桌面时的旧状态

预期结果:

升级安装新版本并重启后,应用运行新版本代码与配置,不回退历史状态。

实际结果:

升级重启后,版本号为最新,但应用内容回退至首次设置为主屏幕应用时的旧状态。

bug描述:

Android 端应用,在 AndroidManifest.xml 配置为主屏幕应用(Launcher 桌面)。
系统已经把应用作为主屏幕应用后,升级安装新版本 APK 后,重启设备:

  • 底座应用版本号显示为最新版本;
  • 但应用运行内容、页面是第一次设置为主屏幕应用时的旧状态,新版本的业务逻辑 / 页面不生效。
  • 猜想是设主屏幕应用后系统保留了当时 Launcher 的app资源;导致后期升级后 并且在重新开机后,还是加载了之前的app资源,如果不重新开机时升级成功的,只要一重新开机就不行。我试过了各大安卓机顶盒,无一例外都是这样
2026-10-08 17:48 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

感谢提交 Bug 反馈,以下是从官方角度对该反馈的评审意见:

一、反馈内容完整性评审

已提供内容较完整的部分:

  1. BUG 标题、描述清晰:包含了现象(底座版本号为新、页面内容为旧)、触发条件(设为主屏幕应用 + 覆盖升级 + 重启设备)以及你的初步猜想,官方人员可以看懂;
  2. 复现步骤共 5 步,路径基本清晰,结合 AndroidManifest.xml 配置可以理解复现方式;
  3. 预期结果合理:覆盖升级新版本 APK 并重启后,应用应运行新版本代码与配置;
  4. 实际结果描述明确,且“不重启则升级正常、一重启就回退”这一细节对定位很有价值;
  5. 分类信息较完整(Win11、HBuilderX 4.87 正式版、Android 11、Vue2、商米 d2)。

建议补充的信息:

  1. 打包方式:云端打包还是离线打包?你贴出的 AndroidManifest.xml 属于原生工程配置,请说明是通过云打包的原生配置文件方式修改,还是离线 SDK 打包;
  2. 升级方式细节:新版本 APK 是通过应用内 plus.runtime.install 安装,还是 adb / 第三方方式覆盖安装;是否涉及 wgt 资源更新;
  3. 是否在 manifest.json 中开启了释放资源模式(runmode 设置为 liberate);
  4. 排查数据:升级完成后、重启前后,分别检查应用内部存储资源目录(/data/data/包名/apps/<appid>/www)中资源的版本内容是否一致,这能直接验证“重启后加载了旧释放资源”的猜想;
  5. 由于我无法识别附件,请将最小可复现 demo 工程、日志等以文本形式直接贴出。

二、Bug 成立性分析

  1. 社区存在多个现象一致的问题报告:

    • 有开发者报告了几乎相同的问题:设置 App 为主屏幕应用后,升级并重启平板,应用回退至旧版本,页面逻辑、资源全部是旧版内容,且同样验证了“不设置主屏幕应用、手工打开升级则不会回退”,详见 https://ask.dcloud.net.cn/question/220416;
    • 也有开发者报告:覆盖升级后 Android 重启,appWgtVersion 被回退,其排查发现复制到 /data/data/包名/apps 下的 uniapp 资源是旧 APK 的 assets 资源,详见 https://ask.dcloud.net.cn/question/184033;
    • 还有开发者反馈:把 App 设置成 HOME 应用后,升级正常,设备关机再进入会提示升级,清除应用存储空间才恢复正常;不设置 HOME 应用则一切正常,详见 https://ask.dcloud.net.cn/question/155771。
  2. 相关机制参考:

    • 按官方文档说明,Android 平台若将应用设置为释放资源模式(manifest.json 中 runmode 设置为 liberate),程序在第一次运行时会把资源释放到应用内部存储目录的 apps/<appid>/www 中,参考 https://www.html5plus.org/doc/zh_cn/io.html#plus.io.PRIVATE_WWW;
    • 在鸿蒙平台,官方已确认并修复了一个机制类似的问题(ISSUE 系统):启动时未对释放资源与现有资源进行版本判断,导致“只要释放资源目录有内容就会使用旧资源”,修复方案是添加对资源 manifest.json 修改时间、versionCode 的比较判断,该修复已随 5.21.2026071110-alpha 及之后版本发布,详见 https://issues.dcloud.net.cn/pages/issues/detail?id=30953。
  3. 结论:

    • 你反馈的现象与社区多个报告一致,复现条件描述明确,不属于明显误报,具备排查价值;
    • 但目前知识库中暂无官方在 Android 平台对该问题的确认结论(上述 ask 帖子均无官方处理回复),鸿蒙平台的修复也不能直接等同于 Android 平台已有修复;
    • 你的猜想“系统保留了当时 Launcher 的 app 资源”与社区排查方向略有差异:从 184033 帖中的排查看,更可能是应用自身释放到内部存储(/data/data/包名/apps)的旧资源在重启后被再次使用,而非系统层面保留,具体根因仍需以官方排查为准。

三、临时规避参考(来自社区用户方案,非官方确认结论,仅供参考)

有开发者采用“启动时校验版本并冷重启”的方式规避:在 App.vue 的 onLaunch 中通过 uni.getAppBaseInfo() 比较 appVersion 与 appWgtVersion,不一致时终止当前进程并通过 AlarmManager 重新拉起应用,详见 https://ask.dcloud.net.cn/question/184033 的回复。该方案为社区用户实践,效果未经验证,请自行评估。

四、建议

请按上文“建议补充的信息”补充打包方式、升级方式、runmode 配置及资源目录排查结果,便于官方定位;你也可以在已有的相同问题帖 https://ask.dcloud.net.cn/question/220416 中补充你的机型与复现信息,便于官方汇总跟踪。

内容为 AI 生成,仅供参考

要回复问题请先登录或注册