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

是build目录

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

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

是的,是你build出来的文件夹里的 :slightly_smiling_face:

好的谢谢。我先解决native.fileUtils.setSearchPaths 不生效的问题吧。感觉解决这个就离成功不远了呢。

所以这就是 manifest 和 bundle 热更的区别 :rofl:

bundle 热更只需要调用一个函数就行了,除了版本号其他什么都不管

你下载的文件得保存在可写路径的assets目录下,这点很重要,失败也是因为这个,比如说getWritablePath()+“hotupdateRoot/assets”,要不然就算是下载成功了也找不到

你的native.fileUtils.getSearchPaths();全是内置目录 都没有你的自定义目录 浓墨老哥说得很清楚了 你自己仔细看

:grinning: 感谢各位好心大佬回帖,问题似乎已经解决了。

原来一直不生效的问题,就是没有执行到 native.fileUtils.setSearchPaths(paths);
我在hook.js 中调整了一下,已经可以正常拉取到更新了。不清楚的是为啥之前官方案例hook.js会闪退,有点奇怪。

(function () {
  const native = globalThis?.jsb || window.jsb || native;
  if (typeof native === 'object') {
    var hotUpdateSearchPaths = localStorage.getItem('HotUpdateSearchPaths');
    if (hotUpdateSearchPaths) {
      var paths = JSON.parse(hotUpdateSearchPaths);
      native.fileUtils.setSearchPaths(paths);

      var fileList = [];
      var storagePath = paths[0] || '';
      var tempPath = storagePath + '_temp/';
      var baseOffset = tempPath.length;
      if (native.fileUtils.isDirectoryExist(tempPath) && !native.fileUtils.isFileExist(tempPath + 'project.manifest.temp')) {
        native.fileUtils.listFilesRecursively(tempPath, fileList);
        fileList.forEach(srcPath => {
            var relativePath = srcPath.substr(baseOffset);
            var dstPath = storagePath + relativePath;
            if (srcPath[srcPath.length - 1] === '/') {
                native.fileUtils.createDirectory(dstPath)
            }
            else {
                if (native.fileUtils.isFileExist(dstPath)) {
                    native.fileUtils.removeFile(dstPath)
                }
                native.fileUtils.renameFile(srcPath, dstPath);
            }
        })
        native.fileUtils.removeDirectory(tempPath);
      }
    }
  }
})();
1赞

+1
在资源文件里固定热更地址,感觉完全不适用于网络游戏
我们都是改引擎 由服务端控制热更地址

请问热更下载新资源中闪退了,比如下载了20%资源后就闪退了,这种是哪里的问题呢?

看看崩溃前的日志

大佬,我有个问题想要请教,我这边热更是通过下载zip包解压到包体的可读取路径,添加了搜索路径优先级也是最高级,但是始终不会读取新的路径上的资源,一直读的老的

看了下 代码很少
但是不懂原理
也不知道有什么约定俗成的东西
热更的内容要怎么准备和部署呢
什么叫 bundle热更 还没见过这个方式

game.js或者main.js中通过native.fileUtils.getSearchPaths()获取的第一个路径是更新资源存放的位置吗?如果是的话有点奇怪了,没遇到路径设置正确,读取错误的情况

搜索路径是添加正常了的 在游戏引擎层打印也是有的 在第一位

大概逻辑是这样大佬 我这边有个项目需要动态下载热更来实现包体功能的切换,比如我将需要修改的文件解压在绝对路径下如(/data/user/0/com.aaa.aaa/files/hotup/assets/resources/native/46/312311efc-9598-4ca7.jpg),本身整包中资源路径在assets/resources/native/46/312311efc-9598-4ca7.jpg,应该在引擎层的哪个接口去处理,/data/user/0/com.aaa.aaa/files/hotup这个的搜索路径也是添加成功并push在最上层,其他的json文件也能生效,如图片音频特效就无法生效,引擎为3.8.4 打包环境为安卓 有这方面的解决方法吗

框架的仓库有热更Demo,你可以尝试,注意事项都在文档内:Bundle

assets/resources/ 这个看着你的资源是直接放在项目工程的resources下,直接使用默认的resources这个bundle进行加载?看上去像是热更资源的路径多了一层,把hotup/assets/resources/换成hotup/resources/试试。或者搜索路径指定到/data/user/0/com.aaa.aaa/files/hotup/assets应该也可以。

行 我明白你的意思了