安卓热更新错误

D/Cocos2dxDownloader: onSuccess(i:200 headers:[Lcz.msebera.android.httpclient.Header;@42209640 file:/data/data/com.caomao.ddz/files/poker-remote-asset/project.manifest.temp.tmp
D/cocos2d-x: File parse error 6 at <"packageUr>
D/Cocos2dxDownloader: onSuccess(i:200 headers:[Lcz.msebera.android.httpclient.Header;@4220a128 file:/data/data/com.caomao.ddz/files/poker-remote-asset/project.manifest.temp.tmp

下载停在了这里,我检查了一下需要下载的project.manifest文件,是正常可解析的。谁有点思路吗?

我用root过的手机看了下下载目录,project.manifest.temp这个文件没有下载成功,但是version.manifest里面的remoteManifestUrl我用浏览器可以正常下载

请问解决了吗?我在安卓上面也遇到了类似的问题,但是在 iOS 上面却没有问题。
很是头疼~
收到请回复,谢谢!:pray:

:+1: :+1: :+1: :+1: :+1:

打开一下下面这个文件,用文本编辑器看看内容是什么

/data/data/com.caomao.ddz/files/poker-remote-asset/project.manifest.temp.tmp

https://o7ddoijae.qnssl.com/apk/jyscmj.apk 你下载这个试试看呢 我们没有找到相关的project.mainfest.temp文件
帮忙看下,谢谢。

这个需要你们本机测试出现问题的时候立刻查看,下载文件不会在 apk 中,所以给我 apk 没有用

我这边看到日志是有请求 project.mainfest.temp.tmp 但是我再进入文件管理里面查看的时候,并没有这个文件,只有 version.mainfest,这个文件下载成功了之后是有把这个临时文件删掉了吗?

1赞

@panda
请帮忙看一下好吗?项目这边上线了出现了这个问题,有点急!!!

看你的 log,是更新成功了,因为没有文件需要更新,project.manifest.temp.temp 在下载完成后会重命名为:project.manifest.temp,在更新完成后会重命名为 project.manifest

可是并没有看到这个文件,然后就卡死在这里了 ,iOS 上面没有遇到这个问题,安卓这边就有。

有点奇怪的是,你在更新过程中(log 前面有打印进度),下载成功 project.manifest.temp.temp,理论上只应该在更新前下载,这里可能是有 bug,但是麻烦告诉我怎么样才能提高重现你问题的概率

目前我这边是安卓每次更新差不多是百分百会遇到,我看论坛上面也有很多人遇到这个问题,热更新的代码是我之前就用了都,Creator 1.3.2 之前没有遇到这个问题,升级到了1.3.2 之后就有这个问题了。所以我这边也没法提高这个出错率。

我就是看着你那篇教程来弄的热更新,1.3.2 之前没有遇到类似问题,升级之后就有了。

好的,我会尽快修复

这个问题的主要原因是 manifest 下载了一半失败,然后重新开始的时候,由于你的服务器不支持断点续传(accept-ranges 设置),而我们之前的热更新是默认你的服务器支持的,所以往旧文件的后面直接附加完整文件内容,所以导致 parse error。

目前的仓库中已经修复了这个问题,Android Downloader 已经兼容了服务器不支持断点续传的情况,还有其他的修改简要说明如下:

  1. 用 manifest 中的 size 字段来收集文件大小数据,更快获得准确的字节级进度
  2. 修复 Android 断点续传支持和一些特殊情况下的更新 bug
  3. 支持 manifest 间比较的 API:jsb.AssetsManager.setVersionCompareHandle(callback)
  4. 支持下载文件后的校验回调:jsb.AssetsManager.setVerifyCallback(callback)
  5. 支持设置更新时最大文件并发数
    jsb.AssetsManager.setMaxConcurrentTask(count)

https://github.com/cocos-creator/cocos2d-x-lite/pull/473

上面的 PR 已经合并到 v1.4,下一个 beta 版本就会生效,v1.3 分支可能不会发新版本,所以 PR 没有合并,可以手动合并我的 v1.3-majon 分支

https://github.com/cocos-creator/cocos2d-x-lite/pull/472

1赞

请问能否详细说明一下 1 中的 size 的获取呢?
还有就是哪里能看得到 jsb.AssetsManager 的相关文档?

多谢

size 需要在生成 manifest 的过程中计算并提供

AssetsManager 的文档我这过年这段时间会写一篇新的,并升级测试项目以支持目前这些新的 feature

1赞