第一次记录文档,直接上代码。hotUpdate-xiao.rar (6.9 KB)
主要用到的文件
- hotUpdate.ts
- make-hotupdate.bat
- version_generator.js
hotUpdate是大厅和子游戏共同使用的更新类
通过实例化传参的方式来区分是大厅还是子游戏,区别为:
- 大厅在初次更新的时候是访问初始包内部的manifest文件来加载本地manifest文件
- 子游戏是通过构造的方式来加载本地manifest文件
// 先检查更新路径是否有文件
let path = `${this.storagePath}/project.manifest`;
if (!jsb.fileUtils.isFileExist(path)) {
// 检查初始包中是否有文件
console.log("更新路径中不存在manifest ");
if (this.isLobby) {
// 大厅初始manifest文件在底包中
let defaultPath = jsb.fileUtils.getDefaultResourceRootPath();
path = `${defaultPath}manifest/project.manifest`;
} else {
// 游戏初始manifest文件是构造出来的
let gameUrl = `${LobbyConfig.Update_Url}${this.relativePath}/${this.subGame}/`;
let manifest: IManifestData = {
packageUrl: gameUrl,
remoteManifestUrl: `${gameUrl}project.manifest`,
remoteVersionUrl: `${gameUrl}version.manifest`,
assets: {},
version: '1.0.0',
searchPaths: [],
};
jsb.fileUtils.writeStringToFile(JSON.stringify(manifest), path);
}
}
make-hotupdate.bat和make-hotupdate-game.bat是配置完Bundle构建完成后,填写需要生成的大厅和子游戏bundle对应的版本号
node version_generator_game.js -name bundleID-v 1.0.1
执行过后会在hotupdate文件夹中生成大厅热更文件,在hotupdate-game文件夹中会生成对应子游戏bundle文件夹和Bundle对应的热更文件
大厅第一次构建完生成热更新文件把对应的manifetst直接拷贝到包内可读路径下
远端存放路径
- 大厅存放在 remoteResUrl 路径下的lobby目录
- 子游戏存放在 remoteResUrl 路径下的game目录对应的bundle文件夹
本方案无需在组件中挂靠manifest文件,只要大厅manifest放在可读路径下,子游戏配置好对应的bundle即可。
原生环境已测试暂无问题。(大厅更新完需要重启,子游戏不需要重启但只能更新一次)