热更新AssetManagerEx的bug (根据v1.4)

好的,非常感谢~

已经拉取了,也download-deps.py了,但是编译错误,log是
https://pan.baidu.com/s/1eS7i4z4
请问是什么原因呢?
这种自定义的方式都没有教程啊
是放到cocos creator下,还是工程下呢?我放工程下的cocos2dx了

@panda 我们现在热更新遇到的问题是,资源文件能成功更新,jsc文件没有生效,是什么原因呀

检查一下搜索路径是否有生效,可以在 ScriptingCore 的 runScript / compileScript 那边下断点

@panda
我们现在热更新遇到的问题是,资源文件能成功更新,jsc文件没有生效,是什么原因呀
01-14 17:30:48.105: D/Cocos2dxDownloader(24993): onSuccess(i:200 headers:[Lcz.msebera.android.httpclient.Header;@431af778 file:/data/data/com.xxx.xxx/files/remote-asset/src/project.jsc.tmp
这里显示已经从远处服务器下载下来了
查看FileUtils搜索路径,也是远程路径优先,但是FileUtils好像找不到远程下载的jsc文件,然后去assets/src/project.jsc这里加载了jsc文件.
01-14 17:30:50.125: D/cocos2d-x debug info(24993): ScriptingCore::executeScript path: src/project.js
01-14 17:30:50.125: D/cocos2d-x debug info(24993): find FileUtils::fullPathForFilename:assets/src/project.jsc
01-14 17:30:50.135: D/cocos2d-x debug info(24993): ScriptingCore::compileScript byteCodePath : src/project.jsc

更新完有重启么 ?

需要去 FileUtils 里面去跟踪一下,看看为什么没有生效了

setAssetDonloadState这个操作其实会卡很久 比如现在project.manifest有 2m大,这次更新 只更新3个文件,那么要操作几千次setAssetDownloadState(Succ) ,这个会在一开始的时候卡很久,其实这个操作没有也没关系

最新的代码 合并的过程中我发现 tempManifest其实第二次打开就会被remote下载下来的manifest覆盖,还有每下载一个文件就保存tempManifest 会在更新过程中有明显的卡顿

嗯,这个刚刚已经调整了,设置了按照下载进度,每过 10% 就保存一次

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

这个问题在这个 PR 中优化了

1赞

有个情况帮忙分析下原因,比如说 版本号 1.1.0的客户端 自动更新到了 1.3.0,然后覆盖安装了一个1.2.0的安装包,最后打开 执行的代码逻辑还是 1.2.0的。如果删除原先的安装包,再安装1.2.0再自动 更新到1.3.0则正常 执行的是1.3.0的代码

有什么原因吗,跟搜索路径之类的相关吗

这个bug确实存在,因为每次ios替换安装的时候 writabelPath会改变 跟之前不一样 main.js 里使用保存的 searchpath就会出错

覆盖安装,不仅 writablePath 不同,旧安装包所引用的 writablePath 也会被清空,所以不论如何之前的本地下载版本都没有用了

这个在应用层是无法控制的,必须重新检查更新

我现在的改法 在 main.js里直接把 writablepath加到searchpath里去了

仔细看了这个,还是云里雾里

有两次第载完成到100%,第一次100%之后会卡一阵子,然后再是正常下载到另一个100%。

@panda

更新完成重新启动,点击检查更新按钮,发现还是可以找到更新版本。
再三确认提示更新完成,而不是更新失败。

查看设备内数据,发现storagePath目录下面没有任何东西。
var storagePath = ((jsb.fileUtils ? jsb.fileUtils.getWritablePath() : ‘/’) + ‘blackjack-remote-asset’);
console.log('Storage path for remote asset : ’ + storagePath);
但是在storagePath_temp目录下面有一个version文件。

logcat日志
http://url.cn/45RIvYP

兄弟,你更新后代码生效的问题解决了吗,我也遇到了

main.js改一下直接用writablepath进去

    if (cc.sys.isNative) {
        // 你的意思是添加这个?
        if (jsb.fileUtils) {
            var writablePath = jsb.fileUtils.getWritablePath();
            jsb.fileUtils.setSearchPaths(JSON.parse(writablePath));
        }
        var hotUpdateSearchPaths = cc.sys.localStorage.getItem('HotUpdateSearchPaths');
        if (hotUpdateSearchPaths) {
            jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
        }
    }