华为快游戏小包模式下资源加载的问题

  • Creator 版本:2.0.9

  • 目标平台:

  • 详细报错信息,包含调用堆栈:无法动态加载资源

  • 重现方式:
    1、按照官方提供的方式发布到华为快游戏(Runtime版)
    2、发布为小包模式。
    3、安装华为快应用加载器到手机,使用cocoscreator的快游戏工具安装rpk包到手机。
    4、此时快应用自动打开,第一次打开是没问题的,一切资源都正常加载过来了。
    5、退出游戏返回到快应用加载器,长按游戏图标选择“管理”——删除数据。
    6、再次打开游戏,此时游戏就无法正常加载资源了。(使用的是cc.loader.loadRes)。
    7、在快应用加载器删除我那个游戏,再重新安装rpk也是无法解决。
    8、在手机系统应用中清理“华为移动服务”、“快应用加载器”的数据,重新安装rpk才能正常加载。当然重复步骤5又是一样的结果。

  • 之前哪个版本是正常的 :

  • 手机型号 :华为Honor6X、小米9

  • 手机浏览器 :华为快游戏Runtime版

  • 编辑器操作系统 :windows10

  • 编辑器之前是否有其它报错 :

  • 出现概率:100%

  • 额外线索:
    我觉得这是某种缓存机制的问题,关键是缓存的方式无法理解——理论上再怎么缓存,把数据删了甚至把游戏删了缓存肯定也就没了,但是并不是,竟然是要去删除App的应用数据才能达到清理效果。

@引擎的各位大佬们,请帮忙看看这是什么问题。

为了不沉下去,自己顶一下

@引擎开发团队
有没有人看到,请回复一下。我今天升级到2.0.10也是不行。看RTAdapter的代码感觉没什么问题啊,不如说请求是发出去了,但是一直没收到回应。一直在转圈就是证明没得到回调。

2.4.5还会遇到这个问题,有人能解决吗

看到邮箱有cocos的右键,点进来一看竟然是2年前的帖子。时隔两年的问题既没回复也没解决,足见引擎组对平民百姓的轻视。
废话少说,附上当年的解决方案吧,说是解决方案也只是加几句代码让它跳过有问题的文件。
那时候我用的是2.0.10版本的引擎

原因分析:

华为文档提到的


cocos里华为下载文件相关的代码
…\CocosCreator\resources\builtin\huawei-runtime\res\rt-adapter.js

1、华为提供的下载接口(hbs.downloadFile)下载文件成功后都会保存在一个临时路径;
2、然后将该临时文件回调给cocos的js接口;
3、cocos根据得到的结果是否携带tempFilePath作为文件下载成功的依据;
4、有tempFilePath就转换保存到本地文件(下次使用),没有就什么都不干

然而删除数据之后再次进入应用的时候,使用该下载接口(hbs.downloadFile)下载上次下载过的某些文件时,能够得到下载成功的回调,但是得到的结果中并没有携带tempFilePath,而根据目前cocos第223行中的逻辑,没有tempFilePath就不会继续执行转换保存,也不会继续执行队列中其它等待的下载条目的下载进程,导致程序处于“一直加载”中的阻塞状态。(我遇到过的有问题的文件类型是ttf。)
感觉就是华为那边的缓存策略问题。

解决方案:

加了红框内的代码

结果:

跳过有问题的文件自然不会出现阻塞的问题了,但是必要的文件下载不下来对游戏效果肯定有影响。华为不解决,就没法解决。

附上我修改过的文件rt-adapter.zip (3.6 KB)

1赞

了解,是我们疏忽了。我们会关注并解决这个问题。不过我们应该会优先保证 2.4.x 最新版本正确。

您好 小米快游戏也遇到了这个问题 2.4.9引擎 能够得到下载成功的回调,但是得到的结果中并没有携带tempFilePath

也就导致远程分包下载不下来

您好 可以麻烦看一下这个问题吗