# hotUpdate增量热更新 Cocos Creator **Repository Path**: jasonMrq/hot-update ## Basic Information - **Project Name**: hotUpdate增量热更新 Cocos Creator - **Description**: 下载链接: https://pan.baidu.com/s/10EdPYu5QUPWAI5yk79OSFg 提取码: ojs7 1,双击打开热更工具,填写配置即可,无需安装环境和库,强烈推荐使用可视工具 2,支持的多种常用资源服务器:Linux/windows/腾讯云COS/阿里云OSS等,会持续新增热门类型,还支持本地模拟环境 3,支持的系统:WinOS / MacOs/M1+ / unix命令 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-01-03 - **Last Updated**: 2024-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HotUpdateSample 增量热更新方案(CocosCreator2.x/3.x) 一,说明 1, 设计上采用增量补丁包的形式,天然过滤掉版本之间的相同冗余 2, 引擎支持:用例基于creator3.8.1 , 理论上支持所有引擎版本,包括creator3.0+ 3, 开发语言: TypeScript 4, 增量差异生成/上传工具: python脚本实现,放在项目/tools/hot/下了 二,工具tools/hot使用方法: 提供两种形式的发布工具(可视化工具、命令行工具),使用其中一种即可: 重要:**********建议使用图形工具,命令行工具后续不再维护****** ***可视化工具使用方法***: 图形工具下载链接: https://pan.baidu.com/s/10EdPYu5QUPWAI5yk79OSFg 提取码: ojs7 1,构建你的creator项目,成功后, 2,双击打开热更工具,填写配置即可,无需安装环境和库,强烈推荐使用可视工具 3,支持的多种常用资源服务器:Liunx/windows/腾讯云COS/阿里云OSS等,会持续新增热门类型,还支持本地模拟环境 4,工具支持的系统:WinOS / MacOs/M1+ / unix命令 ***命令行工具使用方法开始***: 重要说3遍:请在 pro.config.json里,配置好远程访问权限相关信息 重点说3遍:请在 pro.config.json里,配置好远程访问权限相关信息 重点说3遍:请在 pro.config.json里,配置好远程访问权限相关信息 python环境可能要求装一内库: pip install paramiko pip install progressbar2 缺啥就装啥可自行百度|google 1,构建你的creator项目,成功后 2,打开命令行工具 cd 到 HotUpdateSample(你的项目)/tools/hot/ //只生成不上传远程,gen是为了审查更新的文件是否和预期一致,没问题的情况下就直接执行第4步操作 3,python make.py -gen sample_test //生成并且上传远程 4,python make.py -all sample_test ***命令行工具使用方法结束***: 三:远程配置 1, 用于渠道平台远程配置 channel_id_config.json 文件结构 { "log_on":true,//控制台log开关 "hotUrl":"remote/to/your/cdn/game/hot/channelname",//热更目录(原生平台配置) "version_check":"remote/to/your/cdn/game/hot/channelname/checkVersion.json",//热更检测文件(原生平台配置) "test":true,//开启测试(原生平台配置) "inReview":false,//开启审核(原生平台配置) "inReviewAppVersion":"1646129803572"//版本构建时间缀(原生平台配置) } 2,专门用于原生热更的远程配置 checkVersion.json 文件结构 { "download":true, //表示可跳转downUrl下载apk或商店 "hot":true, //热更开关 "version":"0.0.0", //APK或ipa最低兼容版本,低于则会下载downUrl "size":146162893, //APK大小,手动配置,省得计算。。。 "whitelist":["0.0.0.0"] //IP白名单,当开启test:true时优先更新xxx_test补丁,用于版本更新前的内部测试 } 四:重点注意: 1,混淆文件添加 -keep class com.demo.hotupdate.AndroidToJs {*;} 2,远程CDN地址,事例配置在ConfigConst.ts文件里,请根据项目自行定义 export const GAME_URL: string = "https://yourgamedns.com/yourgame/"; 3,构建成功后, main.js 文件得修改下或通过脚本插入以下代码 ****作用目的**** a,新包或整包安装时得清除之前的热更缓存文件,解决安装了最新的包还会读取旧的热更补丁内容 b,设置文件搜索路径,产生热更后优先读取下载的补丁内容 c,时间戳的另一个作用就是配合业务判断审核模式使用(苹果或渠道版本提交的审核包与online版本区别) //远程配置ChannelConfig.json inReview?: boolean; //审核模式 inReviewAppVersion?: string;//审核版本的时间戳与热更一致(仅inReview=true时有效) 具体查看代码及配置用例.... if (window.jsb) { //============================插入开始 if (jsb) { const appVersion = "1655195085500";//时间戳自动生成或自定义别的串 var appVersionTag = localStorage.getItem("appVersion"); if(null == appVersionTag || appVersionTag != appVersion ) { console.log("当前是新包,将清除之前的热更目录"); var storagePath = ((jsb.fileUtils ? jsb.fileUtils.getWritablePath() : '/') + 'bingo_remote_assets'); if(jsb.fileUtils.isDirectoryExist(storagePath)){ jsb.fileUtils.removeDirectory(storagePath); console.log("清除热更目录成功"); } //保存当前的版本信息 localStorage.setItem("appVersion",appVersion); } else{ var hotUpdateSearchPaths = localStorage.getItem('HOT_UPDATE_SEARCH_PATHS'); if (hotUpdateSearchPaths) { var storagePath = ((jsb.fileUtils ? jsb.fileUtils.getWritablePath() : '/') + 'bingo_remote_assets'); var searchPaths = [storagePath, 'res/raw-assets/', '']; jsb.fileUtils.setSearchPaths(searchPaths); console.log('[main.js] 热更新SearchPath: ' + JSON.parse(hotUpdateSearchPaths)); }else { console.log('[main.js] 未获取到热更新资源路径!'); } } }else { console.log('[main.js] 不是native平台!'); } //============================插入结束 var isRuntime = (typeof loadRuntime === 'function'); 4,使用工具热更补丁产生后,生成的wconfig.json还自动copy到了 build/jsb-link/下了,这个是为了打入到APK内 5,包体一旦经过热更新后,就会使用热更补丁携带的wconfig.json文件了,除非清除缓存才会再读包体的wconfig.json 五:讨论或疑惑请进QQ群:691995191