前言
前面十篇我们系统学习了 HybridCLR 的各个知识点。本篇将它们全部串联,以一个真实可运行的卡牌对战小游戏为例,手把手演示从项目初始化、架构设计、热更模块开发、CI/CD 打包到灰度上线的完整商业级流程。读完这篇,你就能独立搭建一个生产可用的 HybridCLR 热更新项目。
一、项目概述与技术选型
1.1 项目需求
| 模块 | 是否热更 | 原因 |
|---|---|---|
| 登录/注册流程 | ✅ | 频繁调整 UI 和合规文案 |
| 主界面/大厅 | ✅ | 运营活动入口频繁变更 |
| 卡牌战斗逻辑 | ✅ | 平衡性调整、新卡技能 |
| 商城/支付 | ❌ | 安全敏感,走 AOT |
| 网络协议层 | ❌ | 底层稳定,不需热更 |
| 资源管理框架 | ❌ | Addressables 封装,AOT |
| 新手引导 | ✅ | 内容迭代最频繁的模块 |
1.2 技术栈确认
1 | Unity 2022.3.x LTS + HybridCLR 6.x + Addressables 1.21+ |
二、工程目录结构
1 | CardGame/ |
💡 核心原则:
_AOT和_Hotfix通过_Shared中的接口通信,禁止热更 DLL 直接引用 AOT 内部类。
三、热更加载器实现
这是整个项目的枢纽,放在 AOT 主工程中:
1 | // Assets/_AOT/Launcher/HotfixLoader.cs |
四、热更入口点设计
1 | // Assets/_Hotfix/EntryPoint.cs |
五、CI/CD 自动化构建流水线
5.1 热更 DLL 构建脚本
1 |
|
5.2 GitHub Actions 示例
1 | name: Build Hotfix |
六、灰度发布策略
6.1 版本配置下发
服务端返回的版本配置示例:
1 | { |
6.2 客户端灰度判断
1 | public class GrayScaleManager |
6.3 回滚预案
1 | 触发条件(任一满足即回滚): |
七、上线前验收清单
| 类别 | 检查项 | 状态 |
|---|---|---|
| 功能 | 所有热更模块在 Editor 下正常运行 | ☐ |
| 功能 | Android/iOS 真机热更加载成功 | ☐ |
| 性能 | 热更模块首帧加载 < 2秒 (中端机) | ☐ |
| 性能 | 战斗中帧率 ≥ 30fps (低端机) | ☐ |
| 安全 | DLL 已混淆,dnSpy 无法还原逻辑 | ☐ |
| 安全 | SHA256 校验通过 | ☐ |
| 安全 | 篡改 DLL 后正确拒绝加载 | ☐ |
| 兼容 | 从上一版本热更升级无异常 | ☐ |
| 兼容 | 首次安装无热更时正常进入 AOT 兜底 | ☐ |
| 回滚 | 模拟回滚流程验证可用 | ☐ |
| 监控 | 崩溃上报通道验证 | ☐ |
| 监控 | 热更加载成功率埋点验证 | ☐ |
八、常见问题应急手册
| 线上问题 | 快速定位 | 应急措施 |
|---|---|---|
| 热更加载白屏 | 检查 logcat 中 [Launcher] 日志 |
服务端切回旧版本 |
| 战斗数值异常 | 对比热更 DLL 哈希是否被篡改 | 强制更新 + 排查 CDN 缓存 |
| 特定机型崩溃 | 按 device_model 聚合崩溃日志 | 该机型加入灰度黑名单 |
| 内存溢出 | Profiler 抓热更模块内存快照 | 临时禁用非核心热更模块 |
| 元数据不匹配 | 检查 LoadMetadataForAOTAssemblies 返回值 |
重新生成元数据并紧急发版 |
总结
一个生产级 HybridCLR 项目的核心要素:清晰的 AOT/热更边界 + 可靠的加载器 + 自动化 CI/CD + 灰度发布 + 回滚预案 + 安全分层防护。这些不是锦上添花,而是缺一不可的工程基础设施。
下一篇是本系列的终章,我们将回顾整个知识体系,给出进阶学习路线图和社区资源推荐,帮助你在 HybridCLR 的道路上持续成长。
说些什么吧!