【GG插件】热更新

一、介绍

gg-hot-update/热更新插件是一款基于 Cocos Creator 官方的热更新原理,重新采用 DownloadTask 进行编写的热更新插件。

相比起原来的 CocosCreator 官方的热更新方案,gg-hot-update热更新方案具有以下优势:

  1. 支持主包/子包的热更新模式
  2. 支持跨版本热更新
    • 比如存在版本 1.0.0、1.1.0、1.2.0、1.3.0,我们可以在 1.0.0 版本上,直接升级到 1.3.0)
  3. 支持每个包(主包/子包)的断线重连
  4. 提供一整套 API,实现上述所有功能

同时,我们还提供了适配 Cocos Creator 3.6+ 的插件,更方便生成热更新配置文件信息(project.manifest 和 version.manifest):

  1. 支持 原生平台构建 自动生成热更新配置文件
  2. 支持 构建后自动生成 热更新配置文件
  3. 支持 命令行/CLI 生成 热更新配置文件

二、插件安装预览

插件安装后,将会提供两个部分:

  1. 插件资产库:提供一整套运行时 API
  2. 插件构建插件:提供构建后自动生成热更包配置的能力

preview.png

三、插件构建预览

以Android平台为例,构建任务时,插件会自动在构建完毕时,根据插件的热更新构建配置文件,对原始输出目录进行处理,最终生成两份资源

  • 本地资源目录(构建apk时会打包进apk)
  • 远程资源目录(差不多等于整包资源)

output-preview

demo 运行演示视频:

https://github.com/user-attachments/assets/57ff6c46-df42-403b-a4b8-19b41dec5ab6

四、更多

关于插件更多的介绍与使用:

  1. 查阅 插件官方文档
  2. 查阅 插件官方demo

五、其他

没太懂”主包/子包“ 是什么意思

  • 主包是指 local_bundles、remote_bundles 的 build-in 字段内容
  • 子包是指 local_bundles、remote_bundles 中除 build-in 字段外,其他字段描述的都是子包

主包一般是包括什么内容呢,这个是需要根据项目实际需求来决定的,大到可以包括整个游戏的所有资源,小到可以仅仅包含最小首包资源

可以参考这两个示例来深入了解:

https://www.yuque.com/dhunterstudio/mydoid/qshphh#B9ZNA

和 bundle 热更相比,除了断线重连还有什么优势呢?

原理还是基于 CocosCreator 的热更新原理,只不过是用 Cocos 提供的 DownloadTask 重新写了一遍,最终插件能同时提供

  1. 一整套运行时API
  2. 搭配构建时插件

所以,整体来说就是

  1. 用起来比较高效和流畅吧,不用额外关注其他的,这里全部都有
  2. 不用改引擎,不用自定义引擎
  3. 完善的文档,也提一句这个 :joy:
  4. 公开的演示Demo

官方文档示例 的来说,实现以下各种常见的热更新需求,其实还是比较方便的:差不多只需要写好热更新构建配置文件,剩下的就是调用插件提供的运行时API就可以了

QQ_1726625289740

那么你这个和我框架的bundle热更来说,优势只有断线重连

bundle热更不需要生成版本文件。而且一行代码就可以实现,也没改引擎,也是使用引擎接口实现

框架太重了 :joy:,所以我做成了插件

好奇一下,你那个为什么会不支持断线重连的呢?

断线重连是 Cocos 本身自带的,并不是我自己实现的

Cocos 的下载任务 DownloadTask 在 Android 平台上的实现,是通过 OKHttp 去实现的,我看这部分实现里面,下载文件都会带上 RANGE 请求头,因此默认下载都是会支持断线重连的

我说不支持是因为之前群友有人反馈说断线重连下载的bundle文件不能解析,只能清理缓存后重新下载,我自己倒是没测出来

能热更新代码么?

游戏 ts 脚本可以

支持webdesk 平台吗

网页平台不存在热更新的概念,最新版的网页你可以直接部署到你服务器就可以

做网页的增量热更可以节省流量啊

目前只支持以下这些原生平台

image