热更新下载资源的问题

最近在测试使用热更新下载遭遇到Error: Download text failed: res/import/b2/b263e248-9b85-4c7c-a916-0d33b54137c7.json的问题,导致图片无法显示。

查看下载的log :
onSuccess(i:200 headers:[Lcz.msebera.android.httpclient.Header;@2b34da9c file:/data/data/org.cocos2d.HotUpdate_FUNC/files/Template_temp/res/import.zip.tmp。
表示这个import.zip是有下载完成的。

请问为什么会这样呢?
即使不将import资料夹压缩也是同样的结果。

Error: Download text failed: res/import/b2/b263e248-9b85-4c7c-a916-0d33b54137c7.json

这个错误明确指出的是这个 json 文件下载失败

如果你有 import.zip 的话,说明你打包了 import 文件夹,那么服务器上可能没有这个文件,现在问题就来了,为什么你的服务端 remote manifest 列表中会有这个文件呢?

您好,我刚刚重新build后,这是我的res/import

热更新一样是报Download text failed: res/import/b2/b263e248-9b85-4c7c-a916-0d33b54137c7.json这个错误。
可是我建置的专案里面并没有这个档案。
这是我的专案:

b263e248-9b85-4c7c-a916-0d33b54137c7这个uuid是对应底下的bg_720.png。
尝试开另一个专案也是同样的结果。

要检查你的 manifest,比如远程的那份 manifest 内容是什么,有没有这个 json 文件

我检查每一个档案都是Cocos2dxDownloader: onSuccess的结果。

不是这个意思,不如你发 manifest 出来看看

您好,這次並沒有將import壓縮

remote manifest:
{“packageUrl”:“http://192.168.154.195/hotupdate_func/template/",“remoteManifestUrl”:“http://192.168.154.195/hotupdate_func/template/project.manifest”,“remoteVersionUrl”:“http://192.168.154.195/hotupdate_func/template/version.manifest”,“version”:“1.1.1”,“assets”:{“src/jsb_anysdk.jsc”:{“size”:9925,“md5”:“341c99050f21c748b60b88336e49261f”},“src/jsb_anysdk_constants.jsc”:{“size”:7004,“md5”:“10cfdc3b50f5ef13570a507d2037f493”},“src/jsb_polyfill.jsc”:{“size”:1386645,“md5”:“612f7fc1609862241a243ed3d8458636”},“src/project.jsc”:{“size”:2038,“md5”:“224ae952042c57c664a13ea943a110df”},“src/settings.jsc”:{“size”:773,“md5”:“1a6061d2f9a67aa88a36c83536c14193”},“res/import/a2/a2befa11-f830-4f5f-b44b-389bba52a33c.json”:{“size”:1187,“md5”:“78c2bd93c35501f2d7a6c9aa74501ce1”},“res/import/c3/c31b58b9-fe83-4379-bd74-d21cfa6b0c8f.json”:{“size”:169,“md5”:“5e0acb79cffd93d9f4a2fbbd59f12e02”},“res/raw-assets/Template/pic/card-1.jpg”:{“size”:524344,“md5”:“c4bf2f75aa0201522865cf6f03342581”}},"searchPaths”:[]}

local manifest:
{“packageUrl”:“http://192.168.154.195/hotupdate_func/template/”,
“remoteManifestUrl”:“http://192.168.154.195/hotupdate_func/template/project.manifest”,
“remoteVersionUrl”:“http://192.168.154.195/hotupdate_func/template/version.manifest”,
“version”:“1.0.1”,“assets”:{},“searchPaths”:[]}

这次的错误是
03-24 09:15:13.960 23121-23176/org.cocos2d.HotUpdate_FUNC D/CCFileUtils-android.cpp: asset is nullptr
03-24 09:15:13.970 23121-23176/org.cocos2d.HotUpdate_FUNC D/cocos2d-x debug info: Error: Download text failed: res/import/80/807bea74-f98c-40b6-8f0a-d19f92344097.json
[104]</e.exports@/Users/rebornchen/Documents/CreatorProjects/TemplateII/build/jsb-binary/src/jsb_polyfill.js:10:6078
[97]</a/<@/Users/rebornchen/Documents/CreatorProjects/TemplateII/build/jsb-binary/src/jsb_polyfill.js:9:25903
[107]</d.queryAssetInfo@/Users/rebornchen/Documents/CreatorProjects/TemplateII/build/jsb-binary/src/jsb_polyfill.js:10:9985
a@/Users/rebornchen/Documents/CreatorProjects/TemplateII/build/jsb-binary/src/jsb_polyfill.js:9:25482
[97]</<.handle@/Users/rebornchen/Documents/CreatorProjects/TemplateII/build/jsb-binary/src/jsb_polyfill.js:9:26854
n@/Users/rebornchen/Documents/CreatorProjects/TemplateII/build/jsb-binary/src/jsb_polyfill.js:10:3862
[103]</<.flowIn@/Users/rebornchen/Documents/CreatorProjects/TemplateII/build/jsb-binary/src/jsb_polyfill.js:10:5049
[101]</<.append@/Users/rebornchen/Documents/CreatorProjects/TemplateII/build/jsb-binary/src/jsb_polyfill.js:10:327
[94]</<.flowInDeps@/Users/rebornchen/

manifest 中没有下载 807bea74-f98c-40b6-8f0a-d19f92344097.json这个档案

你可以看一下下载路径中 xxx_temp 文件夹内的 manifest 和你的远程 manifest 是否一致

您好,我检查下载的内容确实是我在project.manifest中的内容。

807bea74-f98c-40b6-8f0a-d19f92344097这个uuid是一张png类型图片的uuid,
我觉得奇怪的是引擎为什么会去寻找以一张图片的uuid命名.json档,难道.json的命名会以图片的uuid命名吗?所以,是不是可以说project.manifest内容根本不可能会有下载807bea74-f98c-40b6-8f0a-d19f92344097.json这个任务。

我有尝试开新的专案测试,场景的内容就是一个Label和一张图片,以及在canvas结点挂上一个xxx.js用以显示console.log().
Error: Download text failed: res/import/80/807bea74-f98c-40b6-8f0a-d19f92344097.json这个错误是发生在loadScene进入新场景的时候,场景内的图片没有显示但是挂在canvas上的脚本有打印出log讯息。

您好,谢谢您的回覆,目前猜测是因为我不下载新版setting.js的缘故。

uuid.json 中应该是 sprite frame 信息,所以是需要下载的,如果是进入新场景报错,那么和更新过程中报错不同,建议检查一下热更新下来的版本是否完整

setting.js里面就是保存场景的信息的,不更新肯定找不到

请问,这个问题你解决了吗?
我也碰到了,但是没找到解决方案

在 main.js 中可以看到,这边 raw assets 依赖于 settings.js 中的 raw assets 列表,

 cc.AssetLibrary.init({
     libraryPath: 'res/import',
     rawAssetsBase: 'res/raw-',
     rawAssets: rawAssets
});

我当时没有处理我加载别的专案的 settings ,所以在启动该场景时才会有这个讯息。