如何自定义构建时 MD5 缓存生效目录

这边有需求是远程bundle和热更同时需要,可远程bundle不勾选MD5构建的话,http就有资源缓存问题,勾了MD5的话,热更新后main里面的代码引用也会有问题,请问有没有办法更改构建流程来指定部分目录不启用MD5构建?

可以这样子试试:

  1. 打包时取消勾选MD5缓存;
  2. 构建流程钩子函数中增加自定义的onAfterBuild回调,遍历所有远端包,自行生成MD5(所有资源+对应bundle的js文件)

注意事项:

  • 遍历所有远端包可直接通过读取src/settings.jsonremoteBundles字段获取。
  • 远端包(config.jsonjs文件)增加md5后,需要在src/settings.jsonbundleVers字段下增加对应的记录。
  • 远端包内的资源增加md5后,需要在远端包的配置文件(config.json)中增加对应的版本记录。

感谢回答,目前还找到的方法是将main.js也加入热更新列表中,不过需要在main.js注入前设置好检索路径,这边发现在native\engine\common\Classes\Game.cpp的init中调用cc::FileUtils的方法会产生致命错误直接闪退,不知道什么原因 :joy:

这个没用过,不太清楚,可以看下能不能抓到崩溃日志。有一种可能是这个cc::FileUtils里头可能有一些东西还没有初始化好 :joy:

app和资源都用md5模式。看一下打包完的main.js,其实就用到三个文件,把这三个文件配置到远端的json里面,第一次读远端,第二次读本地,每次启动比较版本号,这样就完全热更了。类似这样:

,启动读取project_main的三个文件。下载version文件的时候就把project_assets的文件都下载下来。

是将main.js执行的文件变成动态的吗?毕竟如果不在原生端处理main.js就无法更新,指向的文件名称就没法变动,改成动态读取远程文件确实可行,不过要修改main.js逻辑

目前这边将Game.cpp的代码移动到了底层的BaseGame.cpp,测试没有问题了,应该是要在CocosApplication初始化后调用,但修改底层后更新引擎就会比较麻烦