写了一个超长的热更新文档,欢迎反馈

如何判断新资源是否覆盖旧资源?

Resuming from previous unfinished update, 3 files remains to be finished
jsb.EventAssetsManager.ERROR_UPDATING这个错误事件。
产生的原因是之前我的服务端的manifest文件里有不可达的文件路径,1.1版本。
我修改好了服务端的manifest文件,还是报这个错误,但是提高版本号到1.2就可以下载了。

这个是怎么识别出上次未更新下载完全的呢?用的还是之前错误的1.1版本的manifest文件呢?但是我在storagePath目录下没看到manifest文件。

1.6beta6.2
@panda

上次未完成的更新是保存在:“下载路径_temp/project.manifest.temp" 中的,里面会有哪些文件已经下载哪些没有下载的标识

1赞

按照这个规则找到了project.manifest.temp文件,多谢panda

mark 热更新

今天试了下热更新,出现了几个问题
ios手机没问题
android手机大部分没问题
安卓模拟器和部分安卓手机有问题
android-19
下载version.manifest和project.manifest等文件时,下载下来的数据变成html数据
如下图


内网测有这个问题

下面是manifest文件,使用的是外网,只有两个manifest文件,可以测试一下
manifest.zip (624 字节)

   panda大大,这句话我没看懂啊,每一个项目的启动都是经过main.js开启的吧,在main.js执行game.run()之前都有读取相关的settings.js来设置相关的资源什么的,然后在director.loadScene()之前都有调用 cc.AssetLibrary.init()初始化啊,但是你说的没有初始化 AssetsLibrary,loader 等我没有理解。                   
   当然了,热更新之后重启是能正确的看到更新后的东西的,看论坛那篇大厅+子游戏不重启,看得有点懵了,感觉就差那么一点点就成功了

热更新模块的代码可以通过热更新替换么?
还有有个问题就是热更新完后场景是最新的,但是代码还是跑得旧的,是我操作不对么?

你把新的project.jsc下载下来了吗?重启了吗?

我用的,1.5.2,总感觉热更新不稳定,不知道是不是我的代码写的有问题,就在游戏load的时候,启动检测服务器是否有新版本,但有些时候根本访问不到服务器,网络是通的,好像在windows上测试正常,请问这是什么 原因,大家做热更的时候,一般是怎么做的,我说是的界面,看了官网的DEMO,实在无语,看不懂,因为上面是一定要手动点击更新的,我要的是能自动更新,不要用户确认是否更新,就这一点都没做到,看来我是太菜了,有没有大神指点下

panda您好!能回复一下这个主题吗?

http://forum.cocos.com/t/cocos-create-build-project-manifest/50814

谢谢!

按照官方文档教程就可以实现

你好,我按照demo写的热更新文档。
热更新后,替换的图片(名字没变)可以生效,但是更改的js不生效、把一个场景的图片换了(图片及名字都换了)也不生效。
相关帖子在这儿:http://forum.cocos.com/t/topic/51630
麻烦看看,谢谢!

应该可以吧,更新的时候src 里面project.dev.js包含了新的热更新代码,重新启动执行的应该是新的代码了吧

场景C热更新重启成功了,但是我切换到其他场景再切回来场景C,找不到远程加载的配置文件;
由于我在场景C检查更新,所以每次切回来都会提示我更新版本;



jsb.fileUtils.isFileExist(files)只有第一次重启进入场景C的时候是true, 切换其他场景再返回场景C就一直是false,
请教panda大神!

好吧,自己解决!本地保存版本号与服务端版本号对比,有新版本直接更新即可!

项目里有多个单独资源需要热更新,每个资源单独的manifest文件,如果第一资源下载过程中取消,然后热更第二个资源,会自动的续传第一个资源,显示Simulator: JS: Resuming from previous unfinished update, 3 files remains to be finished.
怎么禁止续传呢,如果取消的话,就删除之前没有下载完整的资源和描述文件?@panda
每个资源的version和project文件名有不同的前缀区分。
取消中断下载的代码为:

   console.log('##cancelUpdate called##');
        if (this._updating) {
            console.log('---------updating can cancel---------');
            cc.eventManager.removeListener(this._updateListener);
            this._updateListener = null;//
            this._updating = false;//
            //return;
        }

下载成功后,重启之前,把project.manifest的名字加上code前缀。
每次开始热更时候,先删除存储路径_temp文件夹和存储路径文件夹下的project.manifest文件。
目前看满足了我的需求。

@panda 大佬,我用1.6版本的热更方案。 安卓热更时,游戏处于前台 是正常的!
但是一旦在热更过程中切换到后台,等到热更完成后切回来 会导致游戏黑屏。
查了一下原生上的log 发现是readbyte error异常和 query() qCursor is null in DeadObjectException.
并且 我通过看服务器上的输出 。可以确定安卓上切换到后台时 热更没有暂停,还在进行下载。

1赞

@panda 大佬,我的问题和楼上童鞋的问题有点类似,如果热更新过程中切到后台并杀死了进程,再回来后提示热更新失败,这个要怎么处理

1赞

1.7版本,在checkUpdate的时候,返回getEventCode()值为5,什么意思?