热更新问题

使用官方热更新方案, manifest 文件校验, 差异文件下载都没问题。热更新完,重启引擎进入 场景的时候报错
报错信息:
CCFileUtils-android.cpp: asset is nullptr
cocos2d-x?debug?info: Error: Download text failed: res/import/92/926ab6c8-d457-4c2b-95c0-869bde4d70a3.json
[104]</e.exports@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:10:5809
[97]</a/<@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:9:25646
[107]</d.queryAssetInfo@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:10:9716
a@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:9:25228
[97]</<.handle@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:9:26592
n@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:10:3593
[103]</<.flowIn@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:10:4780
[101]</<.append@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:10:58
[94]</<.flowInDeps@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:9:18319
r@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:10:6865
s@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:10:8246
[100]</<.handle@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js:9:28898
n@D:\svnResp\wrqp\build\jsb-default\src\jsb_polyfill.js

其中 926ab6c8-d457-4c2b-95c0-869bde4d70a3 这个根本不是json文件,它是 settings.js -> “rawAssets” -> “assets” 里的一个信息而已

现在的问题是为什么 场景文件( .fire ) 会 从 res/import/ 这个目录查找 settings.js -> “rawAssets” -> “assets” 里的内容,

因为加载场景,需要加载它的依赖,依赖中包含这个 uuid 就会去 AssetLibrary 中查找(AssetLibrary 的数据是根据 settings.js 生成的),问题在于现在场景没有把这个 uuid 当作是 raw asset,而是当成了 asset,所以才会去加载 json。

你要看一下热更新下载目录下的 src/settings.js 看看里面这个 uuid 指向的是什么资源

问题解决,是因为在main.js里忘记添加:

if (cc.sys.isNative) {
	var hotUpdateSearchPaths = cc.sys.localStorage.getItem('HotUpdateSearchPaths');
	if (hotUpdateSearchPaths) {
		jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
	}
}

这块代码导致热更新的资源找不到, 不过为什么会报 cocos2d-x?debug?info: Error: Download text failed: res/import/92/926ab6c8-d457-4c2b-95c0-869bde4d70a3.json 这种错误也是搞不懂。场景文件找不到资源,错误提示应该是提示用户找不到资源才对呀。