本文主要是介绍HybridCLR Example,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
https://gitee.com/weifen/hybrid-clrexample
模拟器测试:
hybridclr 热更真机测试
功能:
- 一键构建PC,Android整包
- 一键构建AssetBundle和dll热更
- 一键本地热更测试
- 热更构建时检查link和aot
- sceneTest 测试场景加载
- AssemblyCSharpHotUpdate 测试Assembly-CSharp作为热更dll加载
热更文件结构:
热更构建的时候会把生成的文件复制到StreamingAssets目录下
如果是构建热更会根据编译目标存放到 FileServer/{buildtarget}下
link.cs:
// 整个程序集都不要裁剪private static readonly HashSet<string> assemblyAlls = new HashSet<string>{"mscorlib",};// 构建不同平台时会导致link增删,这里提供额外的补充private static readonly Dictionary<string, List<string>> fixedList = new Dictionary<string, List<string>>(){};
ScriptUpdate.cs:
根据提交记录和上次构建整包对比文件变化,aot出现改动时阻断
热更dll构建:
private static void HotUpdateDll(BuildTarget buildTarget, bool developmentBuild = false, bool isGenerateAot = false){if (!SettingsUtil.Enable){Debug.Log("HybridCLR unenable");return;}InstallerController installer = new InstallerController();if (!installer.HasInstalledHybridCLR())installer.InstallDefaultHybridCLR();Il2CppDefGeneratorCommand.GenerateIl2CppDef();CompileDllCommand.CompileDll(buildTarget, developmentBuild);// 工程导出后已经裁剪的类不能通过AOT增加?// 暂时热更的时候去除AOT生成if(isGenerateAot){StripAOTDllCommand.GenerateStripedAOTDlls(buildTarget);AOTReferenceGeneratorCommand.GenerateAOTGenericReference(buildTarget);}// 热更可能不能生成桥接函数,暂时先放着MethodBridgeGeneratorCommand.GenerateMethodBridge(buildTarget);}
构建步骤:
- 构建时先填充unity平台参数
- 根据编译参数填充宏
- 构建HybridCLR内容
- 构建AssetBundle,【可选】这里是为了用户第一次打开的时候不用再去下载,优化体验用
- 构建link
- 开始构建
预留了读取buildInfo.json文件方便使用命令行模式启动时读取编译参数,以下为编译参数
private struct BuildInfo{public BuildTarget buildTarget;public BuildTargetGroup buildTargetGroup;public string localPathName;public UIOrientation orientation;public bool isRoationPortrait;public bool isRoationLeft;public bool isRoationRight;public bool isRoationDown;public bool isEnableHybridCLR;public string identifier;public bool isMono;public BuildType buildType;public bool buildWithDeepProfilingSupport;public bool ExportProject;public string bundleVersion;public int bundleVersionCode;public bool isAssetBundleIncrement;}
这篇关于HybridCLR Example的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!