2.4.11版本Bundle + 官方热更新实现最简易的大厅子游戏方案

第一次记录文档,直接上代码。hotUpdate-xiao.rar (6.9 KB)

主要用到的文件

  1. hotUpdate.ts
  2. make-hotupdate.bat
  3. 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直接拷贝到包内可读路径下

远端存放路径

  1. 大厅存放在 remoteResUrl 路径下的lobby目录
  2. 子游戏存放在 remoteResUrl 路径下的game目录对应的bundle文件夹

本方案无需在组件中挂靠manifest文件,只要大厅manifest放在可读路径下,子游戏配置好对应的bundle即可。

原生环境已测试暂无问题。(大厅更新完需要重启,子游戏不需要重启但只能更新一次)

3赞