Cocos Creator 热更问题,关于热更这一块,想咨询下校验md5码的问题

看了官方提供的热更新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用的是什么工具,然后你说的第三方库是指的是什么。:joy:

没人愿意分享一下吗。:sob:

试过论坛上大神提供的库,有些文件生成的md5却不一致:joy:

真是很头大,我就没成功过,一直有问题,你至少还能成功部分。:sob:

我是用nodejs生成manifest的,md5库网上有很多,检查一下nodejs生成的与你游戏客服端中md5生成的是否一致

我也用的nodejs去生成的manifest文件,但是没有什么用,你用的什么库。:joy:

热更新 demo 已添加验证函数,基本上很完善了。我的上线项目就是用这。

1赞

我这个就是截的demo 的代码,难道还有其他的demo吗

这个是基于官方demo的完善版本,不过我没适配2.x版本。

我用的引擎就是2.0的,demo的意思我基本上都算看懂了,卡在md5这一块,尝试了很多论坛他们提到的方案都不行。

2.4以后这个jsb.fileUtils.getDataFromFile接口没有了,有替代的办法么