(19)国家知识产权局
(12)发明 专利
(10)授权公告 号
(45)授权公告日
(21)申请 号 202210496327.7
(22)申请日 2022.05.09
(65)同一申请的已公布的文献号
申请公布号 CN 114594981 A
(43)申请公布日 2022.06.07
(73)专利权人 在线途游 (北京) 科技有限公司
地址 100012 北京市朝阳区红军营南路3 6
号暖山生活B座
专利权人 北京云游互动网络科技有限公司
(72)发明人 黄强 李建良 何雨泉 袁冠鹏
(51)Int.Cl.
G06F 8/656(2018.01)
G06F 8/76(2018.01)
G06F 9/445(2018.01)
G06F 8/41(2018.01)(56)对比文件
CN 114115964 A,202 2.03.01
CN 114443052 A,202 2.05.06
CN 103984582 A,2014.08.13
CN 108415719 A,2018.08.17
US 2005055681 A1,20 05.03.10
审查员 张骞
(54)发明名称
一种用于在热更新时解决泛型兼容性问题
的方法和装置
(57)摘要
本申请提供了一种用于在热更新时解决泛
型兼容性问题的方法和装置, 该方法通过为
IL2CPP工具添加了C++实现的解释器, 将一个仅
支持AOT静态编译的运行时改造为一个支持AOT
编译器和解释器的运行时; 同时为了解决使用高
级语言特性泛 型带来的兼容性问题, 将包括原始
函数元数据信息的程序集同时加载到IL2CPP运
行时中, 克服了将主程序代码编译为机器代码后
丢失函数元数据信息的现象。 当执行热更新中新
的泛型实例函数时, 将其指向解释器的execute
函数, 并且将原始泛型函数的M ethodInfo结构体
通过参数传递给解释器的excute函数, 从而完成
了该函数的解释执 行。
权利要求书2页 说明书10页 附图2页
CN 114594981 B
2022.08.09
CN 114594981 B
1.一种用于在热 更新时解决泛型兼容 性问题的方法, 其特 征在于, 包括:
为IL2CPP工具添加IL解释器;
动态加载 热更新程序集和原 始函数的元 数据信息 到IL2CPP运行时中;
当热更新程序集中的泛型实例函数被执行时, 判断运行时中是否存在该泛型实例函数
的实现, 若存在则直接调用编译后的函数代码, 完成函数调用;
若不存在, 则在加载的原始函数元数据信 息中获取所述泛型实例函数所对应的泛型函
数的元数据信息; 将所述泛型实例函数的Metho dInfo结构体中的methodPointer指向所述
IL解释器的 execute 函数; 并将所述泛 型函数的元数据信息作为参数传递给所述execute
函数进行 所述泛型实例函数的解释执 行。
2.根据权利要求1所述的方法, 其中, 将所述泛型函数的元数据信 息作为参数传递给所
述execute 函数进行 所述泛型实例函数的解释执 行还包括:
将所述泛型函数的MethodI nfo结构体指针作为 参数传递给I L解释器的execute函数;
根据所述MethodInfo结构体中的描述信息获得所述泛型函数的字节码信息, 所述
execute 函数根据所述字节码信息 完成所述泛型实例函数的解释执 行。
3.根据权利要求1所述的方法, 其中, 所述泛型实例函数还 包括泛型类中的成员函数。
4.根据权利要求1所述的方法, 其中, 所述热更新程序集包括符合CLI规范的动态库
DLL。
5.一种在热 更新时为主程序中的泛型函数打补丁的方法, 其特 征在于, 包括:
在热更新程序集中打包需要打补丁的泛型函数列表以及 补丁函数的元 数据信息;
动态加载 所述热更新程序集到I L2CPP运行时中;
根据所述泛型函数列表以及补丁函数的元数据信息对运行时中泛型实例函数的元数
据信息进行替换;
其中, 根据所述泛型函数列表以及补丁函数的元数据信 息对运行时中泛型实例函数的
元数据信息进 行替换包括: 在运行时中根据所述泛型函数列 表获取对应的泛型实例函数进
而获取该泛型实例函数的元数据信息Methodinfo结构体, 将所述MethodInfo结构体中的
methodPo inter指向解释器的 execute 函数;
在进行解释器跳转执行时, 将补丁函数的元数据信息作为参数传递给解释器的
execute 函数进行解释执 行。
6.根据权利要求5所述的方法, 其中, 所述泛型实例函数还 包括泛型类中的成员函数。
7.一种用于在热 更新时解决泛型兼容 性问题的装置, 其特 征在于, 包括:
IL2CPP运行时环境;
IL解释器, 用于对热 更新的程序集代码进行解释执 行;
动态加载模块, 用于动态加载热更新程序集和原始函数的元数据信息到IL2CPP运行时
中;
判断模块: 用于当热更新程序集中的泛型实例函数被执行时, 判断运行时中是否存在
该泛型实例函数的实现, 若存在则直接调用编译后的函数代码; 若不存在, 则 在加载的原始
函数元数据中获取 所述泛型实例函数 所对应的泛型函数的元 数据信息;
重定向模块, 用于当运行时中不存在所述泛型实例函数实现时, 将所述泛型实例函数
的MethodI nfo结构体中的methodPo inter指向所述 IL解释器的 execute 函数;权 利 要 求 书 1/2 页
2
CN 114594981 B
2执行模块, 用于将所述泛型函数的元数据信息作 为参数传递给所述execute 函数进行
所述泛型实例函数的解释执 行。
8.根据权利要求7 所述的装置, 其中, 所述泛型实例函数还 包括泛型类中的成员函数。
9.一种在热 更新时为主程序中的泛型函数打补丁的装置, 其特 征在于, 包括:
获取模块, 用于获取包含了需要打补丁的泛型函数列表以及补丁函数的元数据信 息的
热更新程序集;
动态加载模块, 用于动态加载 所述热更新程序集到I L2CPP运行时中;
执行模块, 用于在运行时中根据所述泛型函数列表获取对应的泛型实例函数进而获取
该泛型实例函数的元数据信息Methodinfo结构体, 将所述MethodInfo结构体中的
methodPointer指向解释器的 execute 函数; 在进行解释器跳转执行时, 将补丁函数的元
数据信息作为 参数传递给解释器的execute 函数进行解释执 行。
10.根据权利要求9所述的装置, 其中, 所述泛型实例函数还 包括泛型类中的成员函数。
11.一种计算设备, 包括存储器、 处理器及存储在存储器上并可在处理器上运行的计算
机指令, 其特征在于, 所述处理器执行所述指 令时实现权利要求 1‑6任意一项 所述方法的步
骤。
12.一种计算机可读存储介质, 其存储有计算机指令, 其特征在于, 该指令被处理器执
行时实现权利要求1 ‑6任意一项所述方法的步骤。权 利 要 求 书 2/2 页
3
CN 114594981 B
3
专利 一种用于在热更新时解决泛型兼容性问题的方法和装置
文档预览
中文文档
15 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共15页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 00:01:29上传分享