zoukankan      html  css  js  c++  java
  • unity-热更-InjectFix

    1 C#热更新预备知识

    1.1 mono.cecil注入

    使用Mono.Cecil实现IL代码注入

    注入之后修改dll,新增mdb文件:

    注意,待了解参数注释打开会报错:

    1.2 InjectFix

    • 安装
      你试试用mcs可以不,你把第二行改为
      @set GMCS="%UNITY_HOME%EditorDataMonoBleedingEdgeinmcs.bat"

    2 使用

    2.1原理

    2.2特征和支持

    优点: (小、安全、其他dll、免代码)
      1. 运行时非常小巧,仅100K左右,比各lua方案,ILRuntime都要小很多,而且不依赖第三方库,纯C#实现;
      1. 支持每个游戏生成一份自己私有的补丁格式,私有的指令定义。这样相比通用的lua原代码,lua字节码,clr程序集都更安全些。
      1. 支持Assembly-CSharp.dll之外的dll的修复。
      1. 免代码生成,更干净。
    • 不需要提前对代码(发布的代码)做标记,如[patch],只需要制作补丁的时候标记
    • 修改函数
    • 新增类(Interpret)
    • 新增函数 (Interpret)
    缺陷:
    • 1 不能是泛型方法,构造方法
    • 2 方法执行中,如果出现调用基类方法,是通过一个代理方法实现的。
    • 3 新增struct类型很困难。
    • 4 新增class或新增struct无法继承基类(struct可继承自Interface)。
    • 5 无法在已有类新增字段
    • 6 借助它来实现新功能的热发布有难度

    2.3规则和约定

    • 1 Inject过后的工程,不能拿来Fix操作去得到补丁。(报错会提示reimport)
    • 2 C#编译后(修改代码),需要重新注入Inject
    • 3 [Interpret]标记的新增类,补丁里有了,原版本的C#工程就不能有重复。([patch]无所谓,新增函数无所谓)

    其他

    iOS禁止APP创建可写可执行的内存页,而这是JIT必须的

    • 执行文件大小限制
      执行文件大小是指执行文件的__TEXT部分
      当IOS最低版本小于7.0,32位+64位最多为80MB;
      当IOS大于等于7.0,每个分区是60MB(并不是指32位+64位最多为120MB,当32位分区占用50MB,64位分区占用61MB,总111MB也不行,因为64位分区超出了);
      当IOS大于等于9.0,总限制400MB;
  • 相关阅读:
    在日本被禁止的コンプガチャ設計
    Starling常见问题解决办法
    Flixel引擎学习笔记
    SQLSERVER中修复状态为Suspect的数据库
    T4 (Text Template Transformation Toolkit)实现简单实体代码生成
    创建Linking Server in SQL SERVER 2008
    Linq to Sql 与Linq to Entities 生成的SQL Script与分页实现
    Linq to Entity 的T4 模板生成代码
    在VisualStudio2008 SP1中调试.net framework 源代码
    使用HttpModules实现Asp.net离线应用程序
  • 原文地址:https://www.cnblogs.com/Jaysonhome/p/12996853.html
Copyright © 2011-2022 走看看