看了官方提供的热更新demo,
里面没有校验md5相关的代码,全都返回true了,在论坛找了几个版本测试都发现生成的manifest文件中的md5和热更的时候去获取的不一样,折腾了好久,有没有朋友这一块同样碰到了问题但是解决了的,可以指导指导我吗,第一次弄这个热更新,算是新手,扎心 。自己顶一下,省的沉了。
AssetsManager.setVerifyCallback用于设置文件校验回调,在Cocos官方Demo中,VerifyCallback回调函数强行返回了true,默认下载文件是没有问题的。但在真实项目中,如果在更新过程中遇到网络断线、在wifi和4G之间切换很容易造成下载的文件出错,如果是碰巧遇到更新的代码出错就惨了,因此还需要把真实的文件校验加上,看下面代码:
/**
* 下载文件校验
* @param path 下载成功的文件路径
* @param asset manifest中的文件属性
*/
verifyAssetFile(path, asset) {
console.log(`verifyAssetFile path=${path}, size=${asset.size}, md5=${asset.md5}`);
//使用jsb.fileUtils.getDataFromFile读取文件内容,计算md5
const md5str = md5(jsb.fileUtils.getDataFromFile(path));
//与曾经manifest中的md5做比较
if (md5str === asset.md5) {
return true;
}
//md5不相同,删除下载文件
if (jsb.fileUtils.isFileExist(path)) {
jsb.fileUtils.removeFile(path);
}
console.log(`Verification passed: path=${path}, filemd5=${md5str}, md5=${asset.md5}`);
//返回false,重新下载
return false;
}
上面代码借用了一个三方md5模块,通过读取文件内容计算md5值,与asset.md5做比较,如果文件不同删除后重新下载。
3赞
这些我知道,你们生成manifest用的是什么工具,然后你说的第三方库是指的是什么。
没人愿意分享一下吗。
试过论坛上大神提供的库,有些文件生成的md5却不一致
真是很头大,我就没成功过,一直有问题,你至少还能成功部分。
我是用nodejs生成manifest的,md5库网上有很多,检查一下nodejs生成的与你游戏客服端中md5生成的是否一致
我也用的nodejs去生成的manifest文件,但是没有什么用,你用的什么库。
我这个就是截的demo 的代码,难道还有其他的demo吗
这个是基于官方demo的完善版本,不过我没适配2.x版本。
我用的引擎就是2.0的,demo的意思我基本上都算看懂了,卡在md5这一块,尝试了很多论坛他们提到的方案都不行。
2.4以后这个jsb.fileUtils.getDataFromFile接口没有了,有替代的办法么
