热更

908 words

hybridclr

hybridclr
C#原生热更方案
TEngine
具体使用框架

热更流程

InitResources

UpdateVersion

获取最新版本数据 PackageVersion
(PackageManifest_DefaultPackage.version)文件保存最新版本(2023-10-14-1140)

UpdateManifest

流程更新 Mainfest 清单

  • LoadCacheManifestOperation
    • GetSandboxPackageHashFilePath(获取沙盒内包裹的哈希文件路径)
    • 比对本地 hash 文件的md5值 和 文件计算出的 md5 码是否一致
      • 不一致则清除本地缓存文件
      • 一致则加载 Manifest 文件,根据其中的内容,初始化 AssetBundle和Asset、Asset和GUID的关系
    • QueryBuildInPackageVersion
      • 获取服务器上的 Version 文件
      • 服务器上的 Hash 文件覆盖本地沙盒内的 Hash 文件
    • LoadBuildinManifestOperation
      • 服务器上的 ManifestFile 文件覆盖本地沙盒内的 ManifestFile 文件
      • 加载本地的 Manifest 文件
    • PackageCachingOperation

DownloadFile

  • GetDownloadListByAll

DownloadOver

流程下载结束

ClearCache

清除未使用的缓存文件

LoadAssembly

加载进入热更新程序集

  • AOT Assembly 加载原始 Metadata
  • 对指定的 HotUpdateAssemblies 文件,进行异步加载
    • 加载进 m_HotfixAssemblys 列表中
    • 全部加载完成后,通过反射,调用 GameApp 的 Entrance 方法
      1
      2
      3

      object[] objects = new object[] { new object[] { m_HotfixAssemblys } };
      entryMethod.Invoke(appType, objects);

热更资源部署

可以挂载 github 上部署的博客,根据修改的asset,打包对应的ab包和版本文件,推到 github 上