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

新手小白前来报道,围观学习

先mark一下

mark下来慢慢看

热更新通过CDN,下载显示百分比。安卓下载速度飞快,IOS速度慢的不行。
self._downloadCallback && self._downloadCallback(event.getPercentByFile());
是不是热更新机制有问题

lua 和 这个js 底层都是C++ 你lua热更直接写到C++撒

建议cocos creator扩展的api也能将changelog发一下,插件新版的也无法维护,这样官方不支持,我们也知道怎么改
比如hot-update。

2.0.9版本打开 说 _am undefine

请问安卓缓存目录的是searchPath在什么时候添加进去的。我看到project.manifest里的searchPaths是空数组。我做实验的时候发现如果没有启用热更新searchPath是只有@asset的。热更完成searchPaths里就有了缓存目录。请大佬指点

又看了一下源码找到了:joy:

searchPaths貌似没有去重


而且会多出来一个manifest的路径,这个是必须的么?
1 缓存路径重复
2 多了一条manifest的路径
望官方大大解惑

我知道重复的原因了,是js里面在热更完成之后重新设置searchPath导致
1 解决了 现在剩下2没找到原因了

找到2的原因了

void Manifest::prependSearchPaths()
{
std::vectorstd::string searchPaths = FileUtils::getInstance()->getSearchPaths();
std::vectorstd::string::iterator iter = searchPaths.begin();
bool needChangeSearchPaths = false;
if (std::find(searchPaths.begin(), searchPaths.end(), _manifestRoot) == searchPaths.end())
{
searchPaths.insert(iter, _manifestRoot);
needChangeSearchPaths = true;
}


_manifestRoot 在第一次检测热更的时候这个地址是app包内manifest的相对路径。所以会多出来一条。

1赞

大家都说好,但我们用着,是有挺多不舒服的地方的
1.当前还不支持线上沙盒测试,我们之前做的,都会给一个ip或者某些用户打个标记,标记为测试用户,然后根据用户去决定去决定下载哪个包。这个需求稍微大一点的项目,都会有的。这里可能有人会说打两个包,测试包和线上包,但如果测试包和线上包内容不一致的话,往往又会引发别的问题了,所以最好是同一个包,能根据用户下载不同的更新资源,从而达到线上环境测试的目的

2.无法指定安全区,热更新最危险的问题,就是把热更新的代码给更错了,比如:某个版本需要修改热更新的动画,由于测试疏忽,有些情况没考虑到,导致热更新模块报错了。这种问题就无解了,只能想办法让用户从应用商店再下载一个包,但这种情况往往会导致流失很多用户。所以我们之前的项目,在设计热更新的时候,会指定一些文件作为安全区,这些文件是不支持热更的

3.每次更新完,必须重启,这个也很蛋疼,仔细看了大量的世面上排名靠前的游戏,绝大部分都不会重启的。你脑补下这个场景:一般从应用商店下载一个包,都需要更新一批东西,因为应用商店的包不会频繁更新,所以新用户(注意,特别是新用户),进入到你的游戏,体验就是,还没开始玩,先让更新了一堆东西,更新完,还重启,还得再跑一遍loading,logo之类的,其实对用户来说是很难受的,现在手游都拼细节了,这个细节其实挺致命的。这里提供一个临时解决方案,就是热更完的重启,其实可以包装成一个黑屏闪一下,比如loading到80%其实已经更新完了,这时候记录下当前的进度,然后重启,重启完进入第一个场景再次跳到这个进度,这样能稍微缓解一下重启的难受。但总的来说,体验上还是偏差了

希望cocos官方能重视下上面所说的几个问题,毕竟细节决定成败。

1赞

除了第三点,第一二点都有办法实现,特别第一点,你根据人员不同请求不同的地址不就行了。

请教下第二点怎么解决呢?

不同版本都有点小问题,不过整体还挺好

文档好评,言简意赅,超赞!

mask~

好像不错的样子,mark下!

mark!