creator热更新下载资源重启后,始终加载之前的旧资源

Creator 版本:1.6.2

目标平台: Android

详细报错信息,包含调用堆栈:没有错误信息

03-06 19:32:19.040 29577-29577/org.cocos2d.helloworld E/openSDK_LOG: org.cocos2d.helloworld SDK_VERSION:3.3.0.lite
03-06 19:32:19.240 29577-29606/org.cocos2d.helloworld E/cocos2d-x: cocos2d: warning, Director::setProjection() failed because size is 0

重现方式

  1. 将当前版本作为最新版本B
  2. 删除当前版本某些功能作为作为上一个版本A
  3. 将A、B版本分别打包功能正常
  4. A版本升级到B版本,始终无法获得最新功能
  5. 只改变版本号,将A最为最新版本,B升级到A正常升级

之前哪个版本是正常的

将功能多的版本B升级到功能少的版本A,正常

手机型号:华为荣耀,小米5S

出现概率:100%

额外线索

  • 资源正常下载,并进行了重启。重启后查看调试日志,在资源管理器检测更新后又自动将manifestRootPath添加到了默认的资源搜索路径前,但缓存的清单文件cachedManifest文件存在,具体调试日志如下
init-->searchPath: ["assets/"], cacheManifestIsExist: false
storageSearchPathFiles: ["/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/./","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/../"]
checkUpdate before-->searchPath: ["assets/res/raw-assets/","assets/"]
checkUpdate after-->searchPath: ["assets/res/raw-assets/","assets/"]
restartGame-->searchPath: ["/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/","assets/res/raw-assets/","assets/"]
restartGame-->newSearchPath: ["/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/"], HotUpdateSearchPaths: ["/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/","assets/res/raw-assets/","assets/"]
restartGame-->localHotUpdateSearchPath: "[\"/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/\",\"/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/\",\"assets/res/raw-assets/\",\"assets/\"]"
init-->searchPath: ["/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/","assets/res/raw-assets/","assets/"], cacheManifestIsExist: true
storageSearchPathFiles: ["/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/./","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/../","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/src/","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/res/","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/project.manifest"]
checkUpdate before-->searchPath: ["assets/res/raw-assets/","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/","assets/res/raw-assets/","assets/"]
checkUpdate after-->searchPath: ["/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/","/data/data/org.cocos2d.helloworld/files/eliminate-remote-asset/","assets/res/raw-assets/","assets/"]

SearchPaths 加了没
在main.js

加了的,也把热更新的路径添加在了搜索路径前面。但是在更新资源下载完成重新启动后,打印日志又把manifestRoot添加在了搜索路径前,热更新的路径在数组的第二个位置。

我是每次启动都检测热更新,所以我在A版本添加更新检测,检测到B版本,更新后重启B版本,再次检测热更新就不行。如果B版本不检测热更新,也就不会把manifestRoot添加到搜索路径前,然后资源就正常更新

更新完成了,版本信息一致,但是总是报找不到对应的类对象

热更跟着官网那个 热更走 肯定是可以的 至少我是可以的了
代码方面 他那个工具我没用

我也遇到了这个问题,重启后不能生效,热更新资源也是下载了的,请问你是怎么解决的?

你需要每次启动的时候检测下热更新,不管成功与否,都要重启一下,这个是因为添加热更新的搜索路径到文件系统是需要先加载Manifest文件获取路径信息, 还有模拟器上没法做热更新测试。

您好 我的热更新每次更新完了之后,重启是正常的,然后第二次重启就还原为上一个版本了,搜索路径是没有问题的,感觉是检测热更的时候把热更目录都给删了,请问这个怎么解决

请问你们是怎么解决的,我现在也碰到同样的问题,只要不检测就没有问题

参考官方文档,自己排查下,这个都验证好多次了,按照文档做没问题的。
https://docs.cocos.com/creator/manual/zh/advanced-topics/assets-manager.html

大佬,我也遇到这个问题了,请问您是怎么解决的

按文档 resource目录下的资源更新 之后 第一次重启生效. 杀掉进程第二次启动就不生效了~每次热更新第一次重启都能生效

官方demo,检测到已更新,并没有重启引擎,导致更新资源目录没生效,下面这个分支加个代码。
case jsb.EventAssetsManager.ALREADY_UP_TO_DATE:
needRestart = true; // 添加这句代码

第一次重启生效,第二次启动不生效,很可能是因为调用了cc.sys.localStorage.clear();这个方法,今天刚好踩到这个坑里了。
热更新下载资源完成后 ,会将新的资源路径保存到本地缓存中
cc.sys.localStorage.setItem(‘HotUpdateSearchPaths’, JSON.stringify(searchPaths));
重启之后, 如果调用了cc.sys.localStorage.clear()这个方法,下次重启进来就回到原来的版本了!!!!!!

这里添加restart,游戏又重启了!那哪里写进入游戏的逻辑呢?

我也是,第一次更新成功,进去游戏一切正常,把游戏大退一下,重新进去更新就失效了,您是怎么解决的?

是啊,我这边是每次启动都调用checkUpdate,如果已经是最新了的,那么每次都是ALREADY_UP_TO_DATE,然后又重启,又去checkUpdate,如此不是死循环了吗?兄弟你是怎么解决的?

cocowolf说的是啊,我这边是每次启动都调用checkUpdate,如果已经是最新了的,那么每次都是ALREADY_UP_TO_DATE,然后又重启,又去checkUpdate,如此不是死循环了吗?

回调ALREADY_UP_TO_DATE之后就直接removeListener了啊,你可以再仔细研究一下官方热更文档

我觉得你可能是restart这边有问题,是不是没有设置searchPath
我这边这样是正常的