一、ILRuntime的介绍

IOS无法热更的原因

苹果AppStore的审核准则中,命令禁止应用程序分配具有可执行权限的内存,带有JT功能的的脚本虚拟机无法运行, 无法加载动态链接库

安卓Google Play强制64位之后也必须使用IL2CPP了

LUA 
        长期以来,LUA是Unity生态中唯一一个可以热更的脚本语言
        解释执行,不受平台限制,但是较慢
        对于习惯使用C#的团队来说,诸多不便

ILRuntime
        C#的解释执行引擎
        开发和热更新无缝衔接
        团队技术线统一

二、ILRuntime的安装
        通过packageManager 可安装
        导入会报错 是因为未开启unsafe
        2017以上版本 勾选 Project Settings -> player -> Allow 'unsafe' Code 解决
        其他方案 查看官方文档介绍 — ILRuntime
        打开HotFixProject项目,生成热更dll
        打开01_HelloWorld 点击运行,即可看到输出

ILRuntime的基础使用方法        pdb文件是调试数据库,如需要日志中显示报错行号,则必须提供PDB文件,
不过由于会额外耗用内存,正式发布的时候请将pdb去掉,下面loadAssembly的时候pdb传null即可
       
主工程调用热更工程函数:
       

初始化相关

热更类

主工程调用热更工程代码

       
        appdomain.Invoke("HotFix_Project.InstanceClass","StaticFunTest",null,null)

第一参数 命名空间.类名, 
  第二参数 函数名字
  第三参数 静态传null,不是静态函数 传对象
  第四个参数 传函数需要参入的参数 (多个参数 在末尾加 , 继续传入)
优点:方便
缺点:性能差,通过字符串找到类再找函数

性能高一点的方法如下

        appdomain.LoadedTypes 保存了所有已经加载的ILRuntime的类型
可以通过名字找到对应的类型
        再通过IMethod method = Type.GetMethod(方法名,参数个数) 找到对应的方法
        参数数量相同 传入List 有重载函数可以调用 , 例如指定类型,返回值等

通过参数获取方法

StaticFunTest2是静态函数中的方法 参数为int
先通过appdomain.GetType(typeof(int))获取IType 
在定义List 把intType传进去。
然后调用重载函数ype.GetMethod(方法名,参数List,null) 获取具体方法
最后invoke调用

注:该方法有GC 传入的123 会转Object ,会有GC

无GC方式:通过pushInteger 压栈 传参数

注:静态函数直接压参数,非静态函数,先压入对象,再压参数
压栈的顺序就是参数的顺序

如何实例化热更中的类

第一种 appdomain.Instantiate(类名,构造函数)
第二种 拿到ILType直接调用.Instantiate();
IType type= appdomain.LoadedTypes["类名"];
Object obj2 = ((ILType)type).Instantiate(参数(无参构造不用传));

调用成员参数
 

代码解释:
对属性的调用 是在名字前加入get 或者set 
所以上图中 传入名字为 get_ID 
无GC调用
压入之前实例化的Obj对象
直接Invoke
通过ReadInterger()读取返回值,打印出来

主工程调用热更工程的泛型函数

代码解释:
1,比如传string类型参数
先使用GetType(C#中类型) 获取到IL中的类型IType
然后生成泛型参数列表 genericArguments
然后通过 InvokeGenericMethod方法调用
2,同样可以用GetMethod的方式获取到方法 然后调用

复杂的函数调用 带out 或ref


代码解释:
上图中代码注释足够了。。

在热更中调用主工程方法

引入dll的时候 注意设置对应dll的  复制本地的选项 改为false

到此结束,

ILRuntime 第一集相关推荐

  1. 进击的python【第一集】

    进击的python[第一集] 1.环境安装 安装python Windows平台安装py的时候要记住安装的位置,方便制定PATH 官网下的安装包可以安装可以卸载 windows制定配置文件路径 C:\ ...

  2. Redis第一集:Windows下安装Redis和测试

    Redis第一集:Windows下安装Redis和测试 一.资源 Windows下的Redis的下载地址 点击这里即可下载,如果进不去GitHub的话,可以上网搜一下怎么进GitHub,搭个梯子(●ˇ ...

  3. Apache POI和EasyExcel 第一集:小叙

    Apache POI和EasyExcel 第一集:小叙 最近的课程没有上半学期那么多了,作业也不用每天熬夜拼命的写了,但是经历过上半学期的忙碌之后,闲下来也是怪难受的.闲来无事突然发现了一个教学视频, ...

  4. LaTeX入门第一集!LaTeX下载资源分享!LaTeX教学资源分享!TeXstudio下载资源分享!

    LaTeX入门第一集!LaTeX下载资源分享!LaTeX教学资源分享!TeXstudio下载资源分享! 一.下载资源 以下提取码均为210916 LaTex下载资源(腾讯微云版) LaTex下载资源( ...

  5. Git入门第一集!(Git的下载地址、下载资源)

    Git入门第一集!(Git的下载地址.下载资源) 一.Git环境下载 Git官网下载地址 Git淘宝镜像地址 二.基本的Linux命令(用于GitBash) 1)cd : 改变目录. 2)cd . . ...

  6. 第一集 企业IT体系结构

    第一集 企业IT体系结构<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" / ...

  7. java 数组下标6,这里为什么用equals会错,改==就不会?java入门第一集6.8获取数组下标课后练习...

    源自:6-8 使用 foreach 操作数组 这里为什么用equals会错,改==就不会?java入门第一集6.8获取数组下标课后练习 public class practice_1_6_8 { pu ...

  8. MCGS 无限配方数据存储及U盘导入导出-第一集

    第一集https://blog.csdn.net/qq_33259323/article/details/123751336第二集https://blog.csdn.net/qq_33259323/a ...

  9. 华为GT3第一集-安装HAP

    Flag: 华为GT3第一集-安装HAP 华为GT3第二集-程序员必备软件之心率异常自动保存代码介绍 华为GT3第三集-心率异常自动保存代码之环境搭建 华为GT3第四集-心率异常自动保存代码之页面布局 ...

最新文章

  1. 客快物流大数据项目(二十二):Docker环境中安装软件
  2. ThunderGBM:快成一道闪电的梯度提升决策树
  3. sync.Map低层工作原理详解
  4. 索尼服务器维护时间,索尼云服务器
  5. 前端渲染与后端渲染之间的区别?
  6. 8月23日亮相?三星Galaxy Note10+ 5G版渲染图曝光
  7. 修改smb默认端口_centos7 ssh端口更改方法
  8. 用户空间缺页异常pte_handle_fault()分析--(上)【转】
  9. MySql的基本操作以及以后开发经常使用的常用指令
  10. ul列表中包含input时line-height属性失效的解决办法
  11. 【Java-网络编程】一对一聊天系统的实现
  12. PHP混淆zym解密
  13. WebView加载String字符串
  14. 微服务架构-实现技术之六大基础组件:服务通信+事件驱动+负载均衡+服务路由+API网关+配置管理
  15. 基础提升*哈希函数与哈希表
  16. 基于Verilog的TCAM硬件实现
  17. L1-012 计算指数 (5 分) C语言
  18. 海上平台作业三维虚拟仿真
  19. 字母概率C语言,从26个英文字母中任意选一个,是C或D的概率是()。
  20. C语言_统计单词长度

热门文章

  1. 抖音广告创意观察报告
  2. 运维笔记-nginx详解
  3. ElasticSearch 个人笔记
  4. Tcpdump抓包命令详解
  5. 共赴冰雪之约 重塑股份首席专家工程师翟双博士参与冬奥火炬传递
  6. 【003】垃圾回收机制
  7. 恢复edge浏览器侧边栏newbing显示(实测有效)
  8. Canvas画雪花图~
  9. 磁共振t1t2信号记忆顺口溜_初学MRI记忆
  10. 汽车驾驶教程(附图解)