# 热更新 ## 原理 - 对比本地和远程 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.js` 的 `onAfterBuild` 方法,修改服务器地址 - 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.manifest` 和 `version.manifest` 文件到服务器中,与 `manifest` 一致 - 启动游戏,开始热更 ### 做了一些改动 - 把 HotUpdate 脚本实现一下 - 在 login 中实现热更流程,在登录和防沉迷之后 - 修改插件,方便管理版本号和服务器地址 - 修改插件或新建脚本,方便拷贝文件 ## 自用组件 - 修改 Hook.js 的链接和版本号即可 - 对于 aar 没有影响