1.7热更新问题

之前用1.52做了热更新,很正常,游戏上线也很稳定。

现在更新了1.7,发现热更新有一个很严重的bug。

首先,用模拟器测试时,在C:\Users\Administrator\AppData\Local这里会自动创建一个文件夹名为:Simulator,会将热更新的文件下载下来。

如果这里有文件有旧版,那么更新完自动重启后会执行这里的文件。

而且将项目打包放上真机测试,会不断重启。但1.52则不会。求解!!!!!!!!!
@jare

1赞

你做了跨版本更新?用 1.5.2 的包更新 1.7 制作的游戏资源?如果是这样的话是不支持的

http://docs.cocos.com/creator/manual/zh/advanced-topics/assets-manager.html#更新引擎

没有跨版本更新~服务器是分开的~1.7只更新1.7的资源~但就是不行~不知道为什么~制作的方法与1.52相同 ~两台机两个版本~1.52的没问题~但1.7的不行

@panda 我们也出现了相同的问题。。。

1.5.x
1.6.x
之前都是正常的,逻辑完全相同。

这次更新到 1.7 后, ios 热更逻辑正常, android 失败了,原因正在找~
(因为之前太稳定了,都没想到会有问题, 而且验证了ios也是成功的, 暂时都没想到该从何查起。不是跨版本更新)

现在Android 的表现是 “热更新文件”都已经下载成功了, 但是最后更名却没有成功!比如我的热更目录是 XXX, XXX_temp 中的文件是完整的, 但 XXX 目录为空. 在root 的手机上, 手动更改目录名,热更新就完成了~

但在 mac 及 ios 下, 却完全正常。 对比了 1.6.1 与 1.7.0 , FileUtils 的源码,暂时没发现问题, 正在进一步寻找问题的根源~
Android 上打出了如下的日志, 不知有无关联:
12-09 12:44:17.766: I/System.out(14948): [CDS]EAGAIN in Recvfrom
12-09 12:44:17.766: I/System.out(14948): [CDS]read byte is 0
12-09 12:44:17.785: I/System.out(14948): [CDS]EAGAIN in Recvfrom
12-09 12:44:17.786: I/System.out(14948): [CDS]read byte is 0

希望 @panda 能给一些思路~

终于打到原因了。。。

是因为我们自定义了 _verifyCallback, 传到了 Native.

verifyAsset : function (filePath, asset) {

    var fileStr = jsb.fileUtils.getStringFromFile(filePath);
    if (!fileStr){
        return true;
    }

    var md5 = dy.crypto.md5.hex_md5(fileStr);
    if (md5 === asset.md5){
        return true;
    }
    
    return false;
},

不知道为什么 ios 和 mac 验证 都能通过, 而 Android 验证无法通过, 把这个验证拿掉就好了。

明天再继续看看, 为什么 android 获取到的 md5 与 ios 获取到的 md5 不一致。 整整折腾了一下午,球都没踢~

1赞

dy.crypto.md5.hex_md5(fileStr);能不能吧这个获取md5的方法分享一下啊