热更新

原理

  • 对比本地和远程 Manifest 文件,来确定更新内容

  • manifest 内容

    • 远程资源包的跟路径

    • 远程 manifest 文件地址,可能比较大,用 version 文件先确定是否需要比较

    • 远程 version 文件地址,先比较此,若不同,再比较 manifest

    • 主版本号

    • 文件列表,一般用文件 md5 作为版本呢好

    • 搜索路径列表,本地已下载内容路径

  • 更新内容

    • src 目录,包括引擎脚本

    • assets 目录,其他 assets 资源

  • 热更流程

    • 生成原版本地 manifest 文件

    • 制作热更组件处理更新逻辑

    • 发布后,若有变动

      • 生成新的资源,包括 assets 目录、src 目录、manifest 文件

      • 将新内容部署到服务端

    • 热更组件检测到服务端 manifest 版本不一致时,开始热更

Demo

组件

  • HotUpdate.ts 脚本

  • Hook 插件

    • 每次构建完成会自动调用 version_generator 脚本,生成新的 manifest 文件

    • 需要修改 hot-update-local-ip/builder/hook.jsonAfterBuild 方法,修改服务器地址

  • Version_generator.js 脚本

    • nodejs 脚本

    • cmd: node version_generator.js -v 1.0.0 -u http://your-server-address/tutorial-hot-update/remote-assets/ -s native/package/ -d assets/

热更新操作

  • 基础版本

    • 游戏制作……

    • 修改 Hook 插件的版本号,为当前基础版本号,如 1.0.0

    • 修改 Hook 插件的服务器地址

    • Build

  • 热更新版本

    • 游戏做了一些改动

    • 修改 Hook 插件版本号,递增修改版本号,如 1.0.1

    • Build

    • 拷贝构建资源到服务器中,如 build/android/data/,与 manifest 一致

    • 拷贝 project.manifestversion.manifest 文件到服务器中,与 manifest 一致

    • 启动游戏,开始热更

做了一些改动

  • 把 HotUpdate 脚本实现一下

  • 在 login 中实现热更流程,在登录和防沉迷之后

  • 修改插件,方便管理版本号和服务器地址

  • 修改插件或新建脚本,方便拷贝文件

自用组件

  • 修改 Hook.js 的链接和版本号即可

  • 对于 aar 没有影响