# cframework
**Repository Path**: scloud_admin_admin/cframework
## Basic Information
- **Project Name**: cframework
- **Description**: unity hybridclr热更框架
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 6
- **Created**: 2024-04-16
- **Last Updated**: 2024-04-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 项目目的
- 快速接入 [hybridclr](https://github.com/focus-creative-games/hybridclr_unity) ,让热更初学者更快熟悉热更流程,供对热更有兴趣的同学学习
# 功能
- 一键打包热更的代码包、资源包、app
- 完全热更代码功能,可更新热更包逻辑和游戏逻辑
- 自动检测热更代码和资源包是否兼容旧版app
- 各平台独立发版配置,规范不同平台或渠道的发版流程
- 附带测试用的本地http服务器,无需另行建服务器测试
- 支持ali oss存储热更数据,支持蒲公英app管理平台,可根据项目扩展更多功能
- 发版后可手动改版本信息和白名单设备
- 发版优化检查是否配置好工具或属性并提示,避免发版过程才发现问题
# unity版本
- 2021.3.x
- 其他版本请自行测试
# 发版(以win64为例,其他平台同理):
- 在unity中打开BuildPlayerSettings/publish目录,右键点击win64_dev,选择cframework->BuildPlayer->Build,发完版后会弹框提示
- 发版有问题时会提示,根据提示操作,例如hybridclr还没安装,缺失命令行工具配置等等
- 发版成功会弹框提示下载地址,复制后在浏览器打开
- 支持android,ios,webgl,wechat,mac,windows平台
# 发版配置说明
BuildPlayerSettings/publish/
android_*:android发版配置
ios_*:ios发版配置
webgl_*:webgl发版配置
mac_*:mac发版配置
win32_*:win32发版配置
win64_*:win64发版配置
webgl_wechat_*:微信小程序发版配置
BuildPlayerSettings/config/
BuildAppSettings:app设置
ChannelUtil_*:渠道工具,用来发布app
DeviceToolPathSetting:设备工具路径配置,以设备名为key,记录不同设备的工具的路径
FileSystemUtil_*:文件系统工具,上传和下载热更文件的工具
HybridclrAssemblySetting:热更dll信息配置
PublishUtil_*:发布工具,不同平台的发布流程不一样,需要不同的工具
# 菜单工具说明
cframework
AddressableTool->build:测试addressable发版
SCM->RestoreAndCleanAllChanges:回滚和清除所有修改
HttpServer->Stop:停http服务器
HybridCLR->Disable:禁用热更
Assets->cframework
BuildPlayer
Build:构建发版
CheckEssential:检查必须的工具和字段
SwitchPlatform:切换平台
HttpServer
Start:开启http服务器,供客户端热更
PythonHttpServer
Start: 开启python的http服务器,供客户端热更
# 框架架构
- 是为了让发起热更功能、热更功能和游戏功能尽量分离,并满足热更逻辑也能被热更的需要,把框架代码分成功能相同的三个dll(cfw_launchhotupdate.dll,cfw_hotupdate.dll,cframework.Runtime.dll),框架也是分成三层
- 启动热更层:cfw_launchhotupdate.dll, LaunchHotUpdate.dll
- 热更逻辑层:cfw_hotupdate.dll, BaseHotUpdate.dll, HotUpdate.dll
- 游戏逻辑层:cframework.Runtime.dll, Assembly-CSharp.dll
# dll说明
- cfw_launchhotupdate.dll:供app启动热更功能用的cframework,不可热更
- LaunchHotUpdate.dll:启动热更功能的dll
- cfw_hotupdate.dll:供热更逻辑用的cframework,可热更
- BaseHotUpdate.dll:热更逻辑功能基类的dll
- HotUpdate.dll:热更逻辑功能,依赖项目需求,可热更
- cframework.Runtime.dll:供游戏逻辑dll用的cframework,可热更
- Assembly-CSharp.dll:游戏逻辑,可热更
- UniTask.dll:补充元数据用的,项目不用unitask的话可自行删除
- Unity.Addressable.dll:补充元数据用的
- cframework.Runtime.dll,cfw_hotupdate.dll,cfw_launchhotupdate.dll的代码是一样,是为了让发起热更功能、热更功能和游戏功能尽量分离才这样设计
# 项目用的框架数据和资源(fwdata目录)
Assets/fwdata: 热更框架需要的资源
BuildPlayerSettings/publish:各平台发版配置
BuildPlayerSettings/config:一些共享的配置
HotUpdate:热更下载逻辑和资源
HotUpdate.prefab:附带运行热更逻辑的资源
load_dll_config.txt:读入热更dll和运行入口的配置
tex: 热更时用到的ui贴图目录
Scripts: 热更逻辑脚本
LaunchHotUpdate
Scripts/LaunchHotUpdate.cs:程序运行的第一个脚本
LaunchHotUpdate.unity:程序运行时的第一个场景
Game
Scripts/StartGame.cs: 热更后运行的第一个游戏逻辑
Resources
hotupdate_app_info.txt:热更用的app配置,包含热更http服务器或oss地址
hotupdate_res.txt:热更资源配置,生成代码热更包时,会把这些资源一起打包成assetbundle
hotupdate_link.xml: 用来避免dll被裁剪,发热更app时才会用到
# 集成到自己的项目
- 添加 "com.focus-creative-games.hybridclr_unity": "https://gitee.com/focus-creative-games/hybridclr_unity.git", 到Packages/manifest.json
- 添加 "com.cframework": "https://gitee.com/wnity/cframework.git?path=Assets/cframework", 到Packages/manifest.json
- 添加 "com.unity.addressables": "1.21.20", 到Packages/manifest.json
- 拷贝Assets/fwdata到自己的项目里
- 编辑Assets/fwdata/HotUpdate/load_dll_config.txt,把gameScene改成你游戏开始的场景的Addressable key
- 打开File->Build Settings菜单项,添加 LaunchHotUpdate.unity到Scenes in Build,把其他场景从Scenes in Build移除或不勾选,改成通过StartGame.cs加载
- 修改Assets/fwdata/BuildPlayerSettings/HybridclrAssemblySetting.asset,根据自己的项目配置热更的dll信息,用法和hybridclr的设置页对应的设置项一样
- 发版
# 发版流程
- 检查是否已安装hybridclr
- 转换平台
- 配置平台发版参数(development build, il2cpp等)
- 检查发版必须的工具和字段是否配置完整
- 更新热更配置文件信息
- 检查addressable兼容性并生成addressable
- 配置hybridclr
- 检查热更dll兼容性生成hybridclr热更dll
- 打包热量代码包的assetbundle
- 上传addressable和代码包到http文件系统或oss
- 生成app
- 发布app到渠道
- 启动本地http服务器
- 弹窗提示app下载地址
- 复制下载地址到浏览器打开并下载运行app
# 热更流程
- 在BaseLaunchHotUpdate.dll中,BaseLaunchHotUpdate检查是否启用热更,是的话继续
- 加载热更逻辑的dll并开始热更(StartHotUpdate),进入BaseHotUpdate.dll
- 检查是否白名单设备
- 检查是否需要热更代码
- 检查是否需要热更Addressable
- 下载addressable和代码包
- 加载最新游戏逻辑dll和补充元数据
- 重加裁Addressable内容信息
- 开始游戏(StartGame),进入Assembly-CSharp.dll