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

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

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

我在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/* 这样?

是的,是你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包解压到包体的可读取路径,添加了搜索路径优先级也是最高级,但是始终不会读取新的路径上的资源,一直读的老的