大厅+子游戏的资源下载/更新方案

流程图:


**关键词:**热更新, Bundle,大厅+子游戏,解压缩。

流程说明:
大厅和子游戏都是单独的bundle,对于bundle的理解请参考cocos文档。
第一:启动app的时候使用传统的热更方案,进行核心代码的更新。
第二:下载zip,使用原生api进行解压。重点来了,我们下载的zip怎么生成。
bundle.zip的生成,使用官方给的热更打包方案,打包时记得勾选MD5Cache,修改生成后的project.manifest文件,assets下的每一个json对象都加一个downloadState=2。将project.manifest对象下加一个updating=true,bundleVersion=cd218,打包成功后的你目录结构应该如下图:


同时你应该备份一份,没有downloadState和updating属性的热更包。
第三:压缩热更包,修改zip扩展名为.bin,上传.bin和备份的热更包至服务器。
第四:使用cc.assetsmanager下载.bin扩展,保存至本地目录。iOS使用SSZipArchive,android使用zip4j,进行解压。
第五:使用传统热更方案热更备份热更包。有点绕口:joy:
第六:使用bundle加载方式,加载本地bundle。记得version传入写在project.manifest中的bundleVersion的值。

2赞

老铁不走寻常路啊,这方案看着有点绕有点诡异,哈哈 :upside_down_face:

demo不放出来吗

减少下载资源的io,提升速度,的确有点绕

demo自己去实现呀,都是最基础的功能

更新bundle,怎么预下载新的bundle 还是说在用的时候才下载新的资源

看需求呀,需求需要什么时候下载就什么时候下载

做过网狐的都知道

我的意思是通过cc.assetmanager.loadbundle来下载,还是通过downloader先把整个bundle压缩包下载下来解压。如果通过loadbundle那么获得的只是脚本和资源的json配置文件没有实际的下载到资源,所以我才问你是怎么预先把bundle下载下来的,还有一个问题就是你bundle下载的时候是增量下载还是把最新的全部下载下来覆盖本地的

downloader下载整个zip下来解压,第一次是全部下载,zip也只能全部下载.后面更新才是用的热更功能

原生ZIP解压接口是哪个?还是自己针对各个平台写的原始ZIP解压接口?

这第6步加载本地bundle bundle里的资源是cocos构建的资源还是服务器拉取下载解压覆盖到里面的资源

大佬有demo版本么

没有唔 但是实现方式都差不多