之前用1.52做了热更新,很正常,游戏上线也很稳定。
现在更新了1.7,发现热更新有一个很严重的bug。
首先,用模拟器测试时,在C:\Users\Administrator\AppData\Local这里会自动创建一个文件夹名为:Simulator,会将热更新的文件下载下来。
如果这里有文件有旧版,那么更新完自动重启后会执行这里的文件。
而且将项目打包放上真机测试,会不断重启。但1.52则不会。求解!!!!!!!!!
@jare
之前用1.52做了热更新,很正常,游戏上线也很稳定。
现在更新了1.7,发现热更新有一个很严重的bug。
首先,用模拟器测试时,在C:\Users\Administrator\AppData\Local这里会自动创建一个文件夹名为:Simulator,会将热更新的文件下载下来。
如果这里有文件有旧版,那么更新完自动重启后会执行这里的文件。
而且将项目打包放上真机测试,会不断重启。但1.52则不会。求解!!!!!!!!!
@jare
你做了跨版本更新?用 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 不一致。 整整折腾了一下午,球都没踢~
dy.crypto.md5.hex_md5(fileStr);能不能吧这个获取md5的方法分享一下啊