# cframework
**Repository Path**: Wnity/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**: 11
- **Forks**: 6
- **Created**: 2024-04-16
- **Last Updated**: 2025-07-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平台
# 教程视频
- [https://www.bilibili.com/video/BV1jT421i7Kg/?vd_source=6cfd43a533c661fdd7e8df80d3b7ecc5](https://www.bilibili.com/video/BV1jT421i7Kg/?vd_source=6cfd43a533c661fdd7e8df80d3b7ecc5)
# 集成到自己的项目
- 把下面的package添加到项目的Packages/manifest.json
```
"com.wnity.coroutineutil": "https://gitee.com/Wnity/coroutineutil.git?path=Assets/CoroutineUtil",
"com.code-philosophy.hybridclr": "https://gitee.com/focus-creative-games/hybridclr_unity.git",
"com.wnity.cframework": "https://gitee.com/wnity/cframework.git?path=Assets/cframework",
```
- 拷贝Assets/fwdata到自己的项目里
- 发版
- **发版后运行有aot的报错的话,需要修改Assets/fwdata/BuildPlayerSettings/HybridclrAssemblySetting.asset,根据自己的项目配置热更的dll信息,用法和hybridclr的设置页对应的设置项一样**
# 发版配置说明
BuildPlayerSettings/publish/
android_*:android发版配置
ios_*:ios发版配置
webgl_*:webgl发版配置
mac_*:mac发版配置
win32_*:win32发版配置
win64_*:win64发版配置
webgl_wechat_*:微信小程序发版配置
BuildPlayerSettings/config/
HotUpdateBuildSettings:app设置
ChannelUtil_*:渠道工具,用来发布app
DeviceToolPathSetting:设备工具路径配置,以设备名为key,记录不同设备的工具的路径
FileSystemUtil_*:文件系统工具,上传和下载热更文件的工具
HybridclrAssemblySetting:热更dll信息配置
PublishUtil_*:发布工具,不同平台的发布流程不一样,需要不同的工具
# 菜单工具说明
cframework
AddressableTool->build:测试addressable发版
SCM->RestoreAndCleanAllChanges:回滚和清除所有修改
HttpServer->Stop:停http服务器
HybridCLR->Disable:禁用热更
InitFramework: 集成框架到项目时用来配置框架
Assets->cframework
BuildPlayer
Build:构建发版
CheckEssential:检查必须的工具和字段
SwitchPlatform:切换平台
HttpServer
Start:开启http服务器,供客户端热更
PythonHttpServer
Start: 开启python的http服务器,供客户端热更
# 框架架构
- 是为了让启动逻辑、热更逻辑和游戏逻辑尽量分离,并满足热更逻辑也能被热更的需要,把框架代码分成功能相同的三个dll(cframework_launch.dll,cframework_hotupdate.dll,cframework.dll),框架也是分成三层
- 启动逻辑:cframework_launch.dll, BaseLaunchHotUpdate.dll, LaunchHotUpdate.dll
- 热更逻辑:cframework_hotupdate.dll, BaseHotUpdate.dll, HotUpdate.dll
- 游戏逻辑:cframework.dll, Assembly-CSharp.dll
# dll说明
- cframework_launch.dll:供app启动逻辑用的cframework,不可热更
- LaunchHotUpdate.dll:启动逻辑的dll
- cframework_hotupdate.dll:供热更逻辑用的cframework,可热更
- BaseHotUpdate.dll:热更逻辑功能基类的dll
- HotUpdate.dll:热更逻辑功能,依赖项目需求,可热更
- cframework.dll:供游戏逻辑dll用的cframework,可热更
- Assembly-CSharp.dll:游戏逻辑,可热更
- Unity.Addressable.dll:补充元数据用的
- cframework.dll,cframework_hotupdate.dll,cframework_launch.dll的代码是一样,是为了让启动逻辑、热更逻辑和游戏逻辑尽量分离才这样设计
# ScriptableObject说明
- HotUpdateAppSettings: App配置,有app name,生成路径等
- ChannelUtil: 渠道工具,不同渠道的上传方法不一样,有蒲公英,apple store,微信,本地文件系统
- DeviceToolPathSetting: 工具路径配置,可在这里对不同发版机器进行不同的工具路径配置
- FileSystemUtil: 文件系统工具,用来对oss或文件系统的文件进行保存和读取,有oss,本地方件系统和本地http服务器文件系统
- HybridclrAssemblySetting: hybridclr的dll配置,发版时把这些配置复制到hybridclr的设置里
- PublishUtil: 发布工具,不同平台需要发布的流程不一样
- BuildPlayerSettings: 发版配置,针对每个平台一份
# 项目用的框架数据和资源(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时才会用到
# 发版流程
- 检查是否已安装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
# 环境配置
- 需安装git命令行工具
- 如要发布微信小程序,需要在DeviceToolPathSetting配置WECHAT_DEVTOOL_CLI,设为微信cli的路径
-
# Unity技术讨论群
951129597