哪位好心人快救救孩子吧。被v3版本热更新折腾半个月了,感觉好崩溃。

我使用的是v3.8.3版本,按照官方提供的v3版本案例写的。能正常识别更新,但是更新后似乎不生效。我确认了我编译的ts 已经包含了更新(我尝试加了个console)然后在mian.js 中进行搜索是可以搜索到的,说明热更新的remote-assets 应该没问题。

一开始发现打开闪退,发现extensions/hotupdate/hooks.js 官方没有更新,jsb 已经不能用,会报错!然后替换jsb -> native 就不报错了。

我的远程资源目录结构长这个样子。
image

其他代码都是按照官方案例来的,因为官方文档里面没有说明热更新远程资源目录结构长什么样子,这个目录是我自己经过多次尝试然后能正常识别的更新的,不知道对不对。我远程 url/remote-assets 就是对应的这个目录

1赞

还是不行,能尝试的办法,都尝试了,为什么更新就是不生效呢。用v2版本时候也没遇到过这个问题呀。

请问应该是什么样子呢?大哥99呀

估计各位大佬们都休息了,我明天再来看看吧。。

用我的 MK 框架就行了,直接用 bundle 热更,商店和论坛可以搜索到,开源的

谢谢大佬。我看了下好像不是很合适。目前其他功能都有了,目前还缺一个原生热更新功能。

打印一下你的native.fileUtils.getSearchPaths()看看

:sweat_smile: MK框架支持原生及WEB热更,你也可以单独抄热更代码,开源的不介意,只要别抄了又骂娘就行

在确认热更资源有被正确下载到热更目录下之后,根据楼上所说的 native.fileUtils.getSearchPaths() 获取这个搜索列表就可以基本可以找到为啥不生效的问题了:热更目录必须被设置到搜索路径的最前面(可以使用unshift直接插入)。


下面分享一下我之前遇到过觉得比较坑的一个点:

cocos的远程服务器资源地址必须是固定的一个值,每次打包导出project.manifest文件时,该路径都必须一致:

  • 版本检测时,是根据本地文件中指定的remoteVersionUrl字段对应的值获取远端资源版本信息的;
  • 资源下载时,是根据远端文件中指定的packageUrlremoteManifestUrl比对然后下载对应资源的。

我以前在unity弄过的热更方案,是基于版本存放的热更资源(地址为 https://XXXX/v1、https://XXXX/v2 之类),这种就没法直接套用cocos的热更方案,而是需要通过额外的服务或者存放在固定OSS上的版本信息文件自行解析出对应的版本号,再走cocos的热更。

顺便一提,如果想要配置多个CDN地址去提高链路可靠性(常见于出海产品,海外部分地区网络环境比国内环境差很多,需要配置专线),也是需要先链路选择后再走cocos的热更逻辑。


再顺便提一个 native.fileUtils.getSearchPaths() 获取的是当前使用的搜索路径列表,热更成功后,最好判断一下列表的第一项是否是最新的热更目录,是的话就不需要更改搜索列表;不是的话,看该目录是否还有效(旧热更资源目录),如果无效需要移除后再插入新路径,否则也会有问题。

谢谢,我打个新包先看一下搜索路径呢。

好的。我看下大佬代码研究一下。

我打印了搜索目录和热更新目录。

我在hook.js 打印 window.native 是undefined ?? 没有走到 native.fileUtils.setSearchPaths 这里呢,问题是不是出在这里呢?
这不官方案例就这样子嘛?我就是jsb 改成native 了呢。
image

jsb能用,只不过没有d.ts解释文件。我记得当时调官方demo能调通的,热更远程部署官方demo默认是这种目录:

请问 url/remote-assets 对应的是build 目录吗?然后自己处理android / ios ?

对了,你的资源全得放到getwritablePath()+path+"/assets/"目录下,这是硬伤

所有的资源都要放到assets目录下,这是前提 ,否则就算下下来了也没用

是build目录

是我服务器上的remote-assets/android/assets/* 对应本地bulid/android/assets/* 这样?

是我服务器上的 remote-assets/android/assets/* 对应本地bulid/android/assets/* 这样?