CN107967139B - 游戏的热更新方法及装置 - Google Patents
游戏的热更新方法及装置 Download PDFInfo
- Publication number
- CN107967139B CN107967139B CN201610902025.XA CN201610902025A CN107967139B CN 107967139 B CN107967139 B CN 107967139B CN 201610902025 A CN201610902025 A CN 201610902025A CN 107967139 B CN107967139 B CN 107967139B
- Authority
- CN
- China
- Prior art keywords
- resource file
- game resource
- game
- calling
- virtual machine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种游戏的热更新方法及装置。其中,该方法包括:获取游戏资源文件,其中,游戏资源文件是对游戏资源对应的源代码进行编译生成IL字节码后,由IL字节码打包而成的;根据用户终端当前使用的操作系统类型确定对游戏资源文件所采用的热更新方式。本发明解决了相关技术中所提供的热更新方式运行效率较低,应用受到局限性的技术问题。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种游戏的热更新方法及装置。
背景技术
目前,在大型网络游戏运行期间经常会发现一些需要立刻修复的严重漏洞,由此导致需要停机维护以及重新下载游戏客户端,从而无法继续为用户提供服务。为了获得更佳的用户体验,便需要实现在不需要停机维护和重新下载游戏客户端的情况下也能够修正已发现的游戏漏洞,这种修正游戏漏洞的技术手段被称为热更新。
Unity3D作为一款流行的3D引擎,其引擎本身并不支持在IOS系统上执行热更新操作,因此,采用Unity3D开发的手游便难以满足在游戏运营期间无需重新下载游戏客户端也能够修复已发现游戏漏洞的需求。
相关技术中提供的针对Unity3D的Lua热更新方案,虽然能够解决Unity3D引擎无法在IOS上执行热更新操作的问题,但是由于Unity3D引擎无法直接支持Lua,由此会带来以下问题:
(1)由于运行期间需要在C#和Lua之间频繁切换,因此会降低游戏运行效率。
(2)仅能采用Lua开发业务逻辑,而对原生的C#框架进行重用则十分困难,因此,会降低游戏开发效率。
(3)安卓系统可以支持原生C#热更新,为了兼顾IOS热更新也不得不放弃C#而采用Lua进行开发,同时很多安装安卓系统的低端手机,相对于安装有IOS系统的高端智能手机而言,更需要提升运行效率。为了能够兼顾IOS热更新,在这些低端手机上也不得不采用运行效率更低的Lua来进行开发。
(4)无法使用VS的开发调试环境以及Unity原生的性能分析功能,代码的单步调试,性能分析都缺乏良好的工具支持。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种游戏的热更新方法及装置,以至少解决相关技术中所提供的热更新方式运行效率较低,应用受到局限性的技术问题。
根据本发明实施例的一个方面,提供了一种游戏的热更新方法,包括:
获取游戏资源文件,其中,游戏资源文件是对游戏资源对应的源代码进行编译生成IL字节码后,由IL字节码打包而成的;根据用户终端当前使用的操作系统类型确定对游戏资源文件所采用的热更新方式。
可选地,获取游戏资源文件包括:将服务器上最新发布的游戏资源文件的版本号与本地存储的游戏资源文件的版本号进行比对;如果最新发布的游戏资源文件的版本号晚于本地存储的游戏资源文件的版本号,则将最新发布的游戏资源文件下载至本地,并采用最新发布的游戏资源文件覆盖本地存储的游戏资源文件,得到游戏资源文件。
可选地,根据操作系统类型确定对游戏资源文件所采用的热更新方式包括:确定操作系统类型为第一系统,其中,第一系统不支持采用预设编程语言的原生热更新方式;调用预设虚拟机加载游戏资源文件并启动执行,其中,预设虚拟机为解析并执行IL字节码的执行环境。
可选地,调用预设虚拟机加载游戏资源文件并启动执行包括:调用IL虚拟机提供的预设接口将游戏资源文件加载至内存;通过IL虚拟机直接调用游戏资源文件内的关联函数启动游戏资源文件。
可选地,根据操作系统类型确定对游戏资源文件所采用的热更新方式包括:确定操作系统类型为第二系统,其中,第二系统支持采用预设编程语言的原生热更新方式;调用预设反射机制加载游戏资源文件并启动执行。
可选地,调用预设反射机制加载游戏资源文件并启动执行包括:调用C#反射接口将游戏资源文件加载至内存;利用C#反射机制调用游戏资源文件内的关联函数启动游戏资源文件。
根据本发明实施例的另一方面,还提供了一种游戏的热更新装置,包括:
获取模块,用于获取游戏资源文件,其中,游戏资源文件是对游戏资源对应的源代码进行编译生成IL字节码后,由IL字节码打包而成的;确定模块,用于根据用户终端当前使用的操作系统类型确定对游戏资源文件所采用的热更新方式。
可选地,获取模块包括:比对单元,用于将服务器上最新发布的游戏资源文件的版本号与本地存储的游戏资源文件的版本号进行比对;获取单元,用于如果最新发布的游戏资源文件的版本号晚于本地存储的游戏资源文件的版本号,则将最新发布的游戏资源文件下载至本地,并采用最新发布的游戏资源文件覆盖本地存储的游戏资源文件,得到游戏资源文件。
可选地,确定模块包括:确定单元,用于确定操作系统类型为第一系统,其中,第一系统不支持采用预设编程语言的原生热更新方式;处理单元,用于调用预设虚拟机加载游戏资源文件并启动执行,其中,预设虚拟机为解析并执行IL字节码的执行环境。
可选地,处理单元包括:第一调用子单元,用于调用IL虚拟机提供的预设接口将游戏资源文件加载至内存;第二调用子单元,用于通过IL虚拟机直接调用游戏资源文件内的关联函数启动游戏资源文件。
可选地,确定模块包括:确定单元,用于确定操作系统类型为第二系统,其中,第二系统支持采用预设编程语言的原生热更新方式;处理单元,用于调用预设反射机制加载游戏资源文件并启动执行。
可选地,处理单元包括:第一调用子单元,用于调用C#反射接口将游戏资源文件加载至内存;第二调用子单元,用于利用C#反射机制调用游戏资源文件内的关联函数启动游戏资源文件。
在本发明实施例中,采用获取对游戏资源对应的源代码进行编译生成IL字节码后,由IL字节码打包而成的游戏资源文件并根据用户终端当前使用的操作系统类型确定对游戏资源文件所采用的热更新方式的方式,通过区分用户终端的操作系统类型来确定对应的热更新方式,达到了通过动态更换IL字节码即可实现热更新的目的,从而实现了提升游戏开发和游戏运行效率,扩展热更新方式的适用范围的技术效果,进而解决了相关技术中所提供的热更新方式运行效率较低,应用受到局限性的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的游戏的热更新方法的流程图;
图2是根据本发明优选实施例的Unity3D开发过程示意图;
图3是根据本发明优选实施例的针对IOS系统的热更新方式示意图;
图4是根据本发明优选实施例的针对支持原生C#热更新的系统的热更新方式示意图;
图5是根据本发明实施例的游戏的热更新装置的结构框图;
图6是根据本发明优选实施例的游戏的热更新装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种游戏的热更新方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的游戏的热更新方法的流程图,如图1所示,该方法包括如下步骤:
步骤S12,获取游戏资源文件,其中,游戏资源文件是对游戏资源对应的源代码进行编译生成IL字节码后,由IL字节码打包而成的;
步骤S14,根据用户终端当前使用的操作系统类型确定对游戏资源文件所采用的热更新方式。
通过上述步骤,可以采用获取对游戏资源对应的源代码进行编译生成IL字节码后,由IL字节码打包而成的游戏资源文件并根据用户终端当前使用的操作系统类型确定对游戏资源文件所采用的热更新方式的方式,通过区分用户终端的操作系统类型来确定对应的热更新方式,达到了通过动态更换IL字节码即可实现热更新的目的,从而实现了提升游戏开发和游戏运行效率,扩展热更新方式的适用范围的技术效果,进而解决了相关技术中所提供的热更新方式运行效率较低,应用受到局限性的技术问题。
可选地,在步骤S12中,获取游戏资源文件可以包括以下执行步骤:
步骤S121,将服务器上最新发布的游戏资源文件的版本号与本地存储的游戏资源文件的版本号进行比对;
步骤S122,如果最新发布的游戏资源文件的版本号晚于本地存储的游戏资源文件的版本号,则将最新发布的游戏资源文件下载至本地,并采用最新发布的游戏资源文件覆盖本地存储的游戏资源文件,得到游戏资源文件。
在优选实施例中,可以采用资源服务器来存储全部游戏相关资源,其可以包括:由IL字节码(Scirpt-DLL)打包成的资源文件,供客户端下载。
在游戏每次启动时需要检测包括Script-DLL代码资源是否需要更新,如果需要更新,则自动将Script-DLL下载到本地资源目录内。
每当需要发布新的客户端版本时,使用版本发布系统可以将新版本的Script-DLL上传至资源服务器。在游戏客户端启动后,位于Plugin内的游戏启动组件会调用资源更新组件对比本地Script-DLL的版本号和资源服务器上的Script-DLL的版本号,如果资源服务器上的Script-DLL的版本号晚于本地Script-DLL的版本号,则启动资源加载过程,从资源服务器上将最新的Script-DLL下载到本地,并且覆盖本地先前版本的Script-DLL。
可选地,在步骤S14中,根据操作系统类型确定对游戏资源文件所采用的热更新方式可以包括以下执行步骤:
步骤S141,确定操作系统类型为第一系统(例如:IOS系统),其中,第一系统不支持采用预设编程语言(例如:C#)的原生热更新方式;
步骤S142,调用预设虚拟机加载游戏资源文件并启动执行,其中,预设虚拟机为解析并执行IL字节码的执行环境。
如果需要运行C#程序,则该C#程序的源代码首先会被编译为IL字节码,然后IL字节码会被Unity引擎编译为C++代码,最后在Xcode环境下被编译成目标机器上的本地二进制执行码。而一旦被编译成本地二进制执行码,将无法进行热更新,因此,需要在IL字节码被编译成C++代码之前,打包C#编译生成的IL字节码,在运行期间能够解析并执行IL字节码,并且可以随时更新IL字节码的打包文件,即可实现代码热更新的目的。
图2是根据本发明优选实施例的Unity3D开发过程示意图。如图2所示,该Unity3D开发过程通常可以包括以下三个环节:
(1)Editor是在游戏开发过程中为加快游戏开发进程的编辑器工具,其不会包含在提供给用户的版本内,因此,这部分功能不需要热更新。
(2)Script是游戏开发过程中的游戏相关逻辑脚本,主要使用C#编程语言实现,属于游戏的具体逻辑。游戏热更新正是通过对逻辑脚本进行热更新来完成的。
(3)Plugin是Script逻辑脚本中引用到的不需要在游戏运行期间修改的底层基础功能和第三方插件(可能使用多种不同类型的编程语言来实现),这些功能不属于热更新的关注范围。
最终,整个游戏开发过程被分割为不可执行热更新操作的Plugin部分与可以执行热更新操作的Script部分,因此,只要确保在游戏运行过程中可以随时替换Script即可实现热更新。
如上所述,如果需要实现Unity3D游戏的热更新只需要支持Script代码的热更新即可,而Script的代码原生支持使用C#编写,C#的代码最终会被编译成IL字节码。在通常情况下,IL字节码会被编译成对应机器码后在对应机器上运行,因此,如果想要实现Script代码的热更新,则仅需要支持IL字节码的热更新,为此,需要提供一台可以解析并执行IL字节码的虚拟机。图3是根据本发明优选实施例的针对IOS系统的热更新方式示意图。如图3所示,针对IOS系统,通过加入虚拟机可以使得IL字节码即使不被编译成机器码也可以直接运行,同时在运行期还可以随时更新IL字节码。
可选地,在步骤S142中,调用预设虚拟机加载游戏资源文件并启动执行可以包括以下执行步骤:
步骤S1421,调用IL虚拟机提供的预设接口将游戏资源文件加载至内存;
步骤S1422,通过IL虚拟机直接游戏资源文件内的调用关联函数启动游戏资源文件。
如上述图3所示,游戏启动入口将从Script中移动到Plugin内,在游戏启动时判断目前所使用的操作系统,如果是IOS系统,则调用IL-Machine加载Script-DLL并启动执行。具体地,如果本地使用的操作系统是IOS系统,则可以使用IL-Machine提供的接口将Script-DLL加载到内存并且利用IL-Machine提供的接口启动Script-DLL。
以下为一段C#代码的示例:
其中,声明了3个变量i,j,k,并将i赋值为1,将j赋值为2以及将k赋值为3,然后对i,j,k进行求和,然后再将求和结果赋值到变量answer当中,最后再将整个计算公式打印出来。
以下是将上述C#代码转换后对应的IL字节码的示例,其每条指令的含义如下:
ldc.i4.1//定义一个int32数值,值为1,放入临时数据栈Evaluation Stack
stloc.0//压入栈CallStack的局部变量列表第0个位置
ldc.i4.2//定义一个int32数值,值为2
stloc.1//压入栈CallStack的局部变量列表第1个位置
ldc.i4.3//定义一个int32数值,值为3
stloc.2//压入栈CallStack的局部变量列表第2个位置
idloc.0//取出CallStack的局部变量列表第0个位置的数值压入临时数据栈Evaluation Stack
idloc.1//取出CallStack的局部变量列表第1个位置的数值压入临时数据栈Evaluation Stack
add//从临时数据栈Evaluation Stack出栈两个值相加,然后压入临时数据栈中
idloc.2//取出CallStack的第2个位置的数值压入临时数据栈EvaluationStack中
add//从临时数据栈Evaluation Stack取出两个值相加,然后放回临时数据栈中
stloc.3//放入CallStack的第3个位置
ldstr“i+j+k=”//将“i+j+k”的引用放进临时数据栈
ldloc.3//将CallStack第3个位置的数字压入临时数据栈
box[mscorlib]Sytem.Int32//将先前压入临时数据栈Evaluation Stack的值变成一个Int32的引用类型
call string[mscorlib]System.String::Concat(object,object)//调用C#系统函数将临时EvaluationStack栈顶的两个元素合并为字符串类型
call void[mscorlib]System.Console::WriteLine(string)//调用C#系统函数把前一步合并的字符串打印到控制台
ret
其中,Evaluation Stack为临时数据栈,每次执行指令时均需要从该临时数据栈中读取操作数据以及在IL指令码执行过程中临时数据的存放栈;Call Stack为运行栈,用于存储每个函数的局部变量列表、函数返回参数列表、函数参数列表。
因此,对应的IL虚拟机实现方案仅需要定义Evaluation Stack和Call Stack两个数据结构,并且严格按照微软IL规范的要求实现IL指令,即可实现IL所代表的逻辑。另外,为了便于调用C#底层的函数,可以使用C#语言实现上述过程,这样对于IOS版本,IL虚拟机的实现将会通过IL2CPP编译成C++代码,最终编译成本地机器码执行;同时对于ManagedHeap(用于存储动态分配的数据,由系统负责垃圾回收)和C#语言的堆栈管理并无不同,而只需要利用C#语言的原有功能即可,不需要额外实现。
IL虚拟机使用C#编写,对于IL指令中需要调用Unity API和Plugin中其他模块的函数可以直接调用;因此,对于Script-DLL中使用到的Unity API和Plugin中的函数,如果能够通过函数名和参数加以识别便可以直接调用,而无需采用Lua热更新的间接调用方式进行。
例如:call string[mscorlilb]System.String::Contact(object,object),IL虚拟机在识别出函数名System.String::Contact以及获取两个参数object,object之后,便可直接调用C#的对应函数即可。
可选地,在步骤S14中,根据操作系统类型确定对游戏资源文件所采用的热更新方式可以包括以下执行步骤:
步骤S143,确定操作系统类型为第二系统(例如:Andorid系统),其中,第二系统支持采用预设编程语言(例如:C#)的原生热更新方式;
步骤S144,调用预设反射机制加载游戏资源文件并启动执行。
游戏启动入口将从Script中移动到Plugin内,在游戏启动时判断目前所使用的操作系统,如果是Andorid系统,则需要调用C#反射接口加载Script-DLL并启动执行,以实现游戏的热更新。
图4是根据本发明优选实施例的针对支持原生C#热更新的系统的热更新方式示意图,如图4所示,由于IL-Machine需要解析执行IL字节码,而解析并执行IL字节码相比于原生机器码的执行速度,其速度较慢,因此,在支持原生C#热更新的操作系统(例如:Windows、Android)上,可以将IL字节码(Script-DLL)作为文件资源从资源服务器下载到本地,并在下载完成后,首先使用处理文件的函数接口将Script-DLL加载到内存,然后使用C#Mono原生支持的反射方法启动IL字节码,作为游戏的热更新方案。
可选地,在步骤S144中,调用预设反射机制加载游戏资源文件并启动执行可以包括以下执行步骤:
步骤S1441,调用C#反射接口将游戏资源文件加载至内存;
步骤S1442,利用C#反射机制调用游戏资源文件内的关联函数启动游戏资源文件。
游戏启动组件判断本地使用的操作系统类型,如果本地使用的操作系统是Andoriod,则可以使用C#反射接口将Script-DLL加载到内存并且利用C#的反射机制调用Script-DLL内的函数启动Script-DLL。
综上所述,根据本发明实施例提供的上述技术方案,由于IOS支持对IL字节码进行解析并执行,因此,仅需在运行期间动态地更换IL字节码即可达到热更新的目的。而且,由于Android无需支持对IL字节码进行解析并执行,其仍然执行的是本地字节码,因此,对于需要提升效率的低端机不会带来额外的性能开销。此外,平时开发(使用Windows)时可随时在支持热更新的运行在IL-Machine上的C#运行环境与原生的没有运行在IL-Machine上的C#运行环境之间切换,由此不会影响非原生语言带来的开发效率问题,而且,逻辑层的程序员甚至不会感觉到这两种执行环境所带来的差异。进一步地,IL字节码解析使用C#实现,对于Unity原生支持的C#API和其他因为效率问题无需热更新的C#模块的API(Plugin内其他模块)可以直接调用,不存在跨语言调用的效率问题。IL-Machine属于Plugin的一部分,在IOS系统上也会被IL2CPP编译成C++代码,并最终转换成本地机器码,因此,IL-Machine本身的执行效率和本地应用相比并无差异。另外,还可以通过优化IL运行期间的堆栈结构来提高IL解析与执行的效率。
根据本发明实施例,提供了一种游戏的热更新装置的实施例,图5是根据本发明实施例的游戏的热更新装置的结构框图,如图5所示,该装置包括:获取模块10,用于获取游戏资源文件,其中,游戏资源文件是对游戏资源对应的源代码进行编译生成IL字节码后,由IL字节码打包而成的;确定模块20,用于根据用户终端当前使用的操作系统类型确定对游戏资源文件所采用的热更新方式。
可选地,图6是根据本发明优选实施例的游戏的热更新装置的结构框图,如图6所示,获取模块10可以包括:比对单元100,用于将服务器上最新发布的游戏资源文件的版本号与本地存储的游戏资源文件的版本号进行比对;获取单元102,用于如果最新发布的游戏资源文件的版本号晚于本地存储的游戏资源文件的版本号,则将最新发布的游戏资源文件下载至本地,并采用最新发布的游戏资源文件覆盖本地存储的游戏资源文件,得到游戏资源文件。
可选地,如图6所示,确定模块20可以包括:确定单元200,用于确定操作系统类型为第一系统,其中,第一系统不支持采用预设编程语言的原生热更新方式;处理单元202,用于调用预设虚拟机加载游戏资源文件并启动执行,其中,预设虚拟机为解析并执行IL字节码的执行环境。
可选地,处理单元202可以包括:第一调用子单元(图中未示出),用于调用IL虚拟机提供的预设接口将游戏资源文件加载至内存;第二调用子单元(图中未示出),用于通过IL虚拟机直接调用游戏资源文件内的关联函数启动游戏资源文件。
可选地,确定单元200,用于确定操作系统类型为第二系统,其中,第二系统支持采用预设编程语言的原生热更新方式;处理单元202,用于调用预设反射机制加载游戏资源文件并启动执行。
可选地,处理单元202可以包括:第一调用子单元(图中未示出),用于调用C#反射接口将游戏资源文件加载至内存;第二调用子单元(图中未示出),用于利用C#反射机制调用游戏资源文件内的关联函数启动游戏资源文件。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (12)
1.一种游戏的热更新方法,其特征在于,包括:
获取游戏资源文件,其中,所述游戏资源文件是对游戏资源对应的源代码进行编译生成IL字节码后,由所述IL字节码打包而成的;
根据用户终端当前使用的操作系统类型确定对所述游戏资源文件所采用的热更新方式;
其中,所述方法还包括:在使用windows系统开发过程中的任意时刻,在支持热更新的运行在IL虚拟机上的C#运行环境与原生的没有运行在所述IL虚拟机上的C#运行环境之间切换,所述IL虚拟机使用C#程序编写,且用于转换成本地机器码。
2.根据权利要求1所述的方法,其特征在于,获取所述游戏资源文件包括:
将服务器上最新发布的游戏资源文件的版本号与本地存储的游戏资源文件的版本号进行比对;
如果最新发布的游戏资源文件的版本号晚于本地存储的游戏资源文件的版本号,则将最新发布的游戏资源文件下载至本地,并采用最新发布的游戏资源文件覆盖本地存储的游戏资源文件,得到所述游戏资源文件。
3.根据权利要求1所述的方法,其特征在于,根据所述操作系统类型确定对所述游戏资源文件所采用的所述热更新方式包括:
确定所述操作系统类型为第一系统,其中,所述第一系统不支持采用预设编程语言的原生热更新方式;
调用所述IL虚拟机加载所述游戏资源文件并启动执行,其中,所述IL虚拟机为解析并执行所述IL字节码的执行环境。
4.根据权利要求3所述的方法,其特征在于,调用所述IL虚拟机加载所述游戏资源文件并启动执行包括:
调用所述IL虚拟机提供的预设接口将所述游戏资源文件加载至内存;
通过所述IL虚拟机直接调用所述游戏资源文件内的关联函数启动所述游戏资源文件。
5.根据权利要求1所述的方法,其特征在于,根据所述操作系统类型确定对所述游戏资源文件所采用的所述热更新方式包括:
确定所述操作系统类型为第二系统,其中,所述第二系统支持采用预设编程语言的原生热更新方式;
调用预设反射机制加载所述游戏资源文件并启动执行。
6.根据权利要求5所述的方法,其特征在于,调用所述预设反射机制加载所述游戏资源文件并启动执行包括:
调用C#反射接口将所述游戏资源文件加载至内存;
利用C#反射机制调用所述游戏资源文件内的关联函数启动所述游戏资源文件。
7.一种游戏的热更新装置,其特征在于,包括:
获取模块,用于获取游戏资源文件,其中,所述游戏资源文件是对游戏资源对应的源代码进行编译生成IL字节码后,由所述IL字节码打包而成的;
确定模块,用于根据用户终端当前使用的操作系统类型确定对所述游戏资源文件所采用的热更新方式;
其中,所述装置还用于在使用windows系统开发过程中的任意时刻,在支持热更新的运行在IL虚拟机上的C#运行环境与原生的没有运行在所述IL虚拟机上的C#运行环境之间切换,所述IL虚拟机使用C#程序编写,且用于转换成本地机器码。
8.根据权利要求7所述的装置,其特征在于,所述获取模块包括:
比对单元,用于将服务器上最新发布的游戏资源文件的版本号与本地存储的游戏资源文件的版本号进行比对;
获取单元,用于如果最新发布的游戏资源文件的版本号晚于本地存储的游戏资源文件的版本号,则将最新发布的游戏资源文件下载至本地,并采用最新发布的游戏资源文件覆盖本地存储的游戏资源文件,得到所述游戏资源文件。
9.根据权利要求7所述的装置,其特征在于,所述确定模块包括:
确定单元,用于确定所述操作系统类型为第一系统,其中,所述第一系统不支持采用预设编程语言的原生热更新方式;
处理单元,用于调用所述IL虚拟机加载所述游戏资源文件并启动执行,其中,所述IL虚拟机为解析并执行所述IL字节码的执行环境。
10.根据权利要求9所述的装置,其特征在于,所述处理单元包括:
第一调用子单元,用于调用所述IL虚拟机提供的预设接口将所述游戏资源文件加载至内存;
第二调用子单元,用于通过所述IL虚拟机直接调用所述游戏资源文件内的关联函数启动所述游戏资源文件。
11.根据权利要求7所述的装置,其特征在于,所述确定模块包括:
确定单元,用于确定所述操作系统类型为第二系统,其中,所述第二系统支持采用预设编程语言的原生热更新方式;
处理单元,用于调用预设反射机制加载所述游戏资源文件并启动执行。
12.根据权利要求11所述的装置,其特征在于,所述处理单元包括:
第一调用子单元,用于调用C#反射接口将所述游戏资源文件加载至内存;
第二调用子单元,用于利用C#反射机制调用所述游戏资源文件内的关联函数启动所述游戏资源文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610902025.XA CN107967139B (zh) | 2016-10-17 | 2016-10-17 | 游戏的热更新方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610902025.XA CN107967139B (zh) | 2016-10-17 | 2016-10-17 | 游戏的热更新方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107967139A CN107967139A (zh) | 2018-04-27 |
CN107967139B true CN107967139B (zh) | 2021-07-27 |
Family
ID=61996166
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610902025.XA Active CN107967139B (zh) | 2016-10-17 | 2016-10-17 | 游戏的热更新方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107967139B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108415719B (zh) * | 2018-03-29 | 2019-03-19 | 网易(杭州)网络有限公司 | 代码热更新方法和装置、存储介质、处理器及终端 |
CN108776592B (zh) * | 2018-05-23 | 2022-04-05 | 北京五八信息技术有限公司 | 一种页面构建的方法、装置、设备及存储介质 |
CN108845810B (zh) * | 2018-05-23 | 2022-04-22 | 北京五八信息技术有限公司 | 一种应用动态更新的方法、装置、电子设备及存储介质 |
CN109062590A (zh) * | 2018-06-29 | 2018-12-21 | 武汉掌游科技有限公司 | 一种游戏sdk在线更新的方法及系统 |
CN109395391A (zh) * | 2018-09-07 | 2019-03-01 | 北京龙拳风暴科技有限公司 | 一种游戏信息的自动更新方法及装置 |
CN109324816A (zh) * | 2018-09-12 | 2019-02-12 | Oppo广东移动通信有限公司 | 游戏加载方法及相关产品 |
CN109683927A (zh) * | 2018-11-01 | 2019-04-26 | 苏州蜗牛数字科技股份有限公司 | 一种更新u3d安卓游戏的方法 |
CN111375200B (zh) * | 2018-12-28 | 2021-05-28 | 广州市百果园网络科技有限公司 | 智能配置游戏资源方法、系统及计算机存储介质、设备 |
CN109857432B (zh) * | 2019-01-14 | 2022-05-20 | 珠海金山网络游戏科技有限公司 | 一种游戏应用的热更新方法和装置 |
CN109918112B (zh) * | 2019-03-15 | 2022-10-04 | 网易(杭州)网络有限公司 | 游戏热更新方法、装置和存储介质 |
CN111158722A (zh) * | 2019-12-27 | 2020-05-15 | 无锡中尧网络科技有限公司 | 手游客户端热更新方法 |
CN114625660A (zh) * | 2022-03-22 | 2022-06-14 | 阿里巴巴(中国)有限公司 | 调试方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294514A (zh) * | 2013-06-26 | 2013-09-11 | 深圳Tcl新技术有限公司 | 系统软件版本集成方法、编译服务器及系统 |
US9189378B1 (en) * | 2012-11-30 | 2015-11-17 | Mobile Labs, LLC | Systems, methods, and apparatuses for testing mobile device applications |
CN105204910A (zh) * | 2015-10-15 | 2015-12-30 | 北京乐动卓越科技有限公司 | 一种脚本热更新方法和系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8811968B2 (en) * | 2007-11-21 | 2014-08-19 | Mfoundry, Inc. | Systems and methods for executing an application on a mobile device |
CN102289378B (zh) * | 2011-09-30 | 2014-12-03 | 互动在线(北京)科技有限公司 | 自动生成应用程序的方法 |
-
2016
- 2016-10-17 CN CN201610902025.XA patent/CN107967139B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9189378B1 (en) * | 2012-11-30 | 2015-11-17 | Mobile Labs, LLC | Systems, methods, and apparatuses for testing mobile device applications |
CN103294514A (zh) * | 2013-06-26 | 2013-09-11 | 深圳Tcl新技术有限公司 | 系统软件版本集成方法、编译服务器及系统 |
CN105204910A (zh) * | 2015-10-15 | 2015-12-30 | 北京乐动卓越科技有限公司 | 一种脚本热更新方法和系统 |
Non-Patent Citations (2)
Title |
---|
Unity C# 3.5 or 2.0? .NET, UnityScript, mono, CLR, CIL and Assemblies explained;Cameron860;《https://forum.unity.com/threads/unity-c-3-5-or-2-0-net-unityscript-mono-clr-cil-and-assemblies-explained.343450/》;20150725;第1-3页 * |
unity dll实现热更新;baidu_28955655;《https://blog.csdn.net/baidu_28955655/article/details/52661698》;20160925;第1-4页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107967139A (zh) | 2018-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107967139B (zh) | 游戏的热更新方法及装置 | |
CN105100191B (zh) | 一种云编译实现Java应用安装的方法、装置及系统 | |
CN108121594B (zh) | 一种进程管理方法及装置 | |
CN111078318B (zh) | 配置文件的处理方法、装置、系统及存储介质 | |
CN103488466B (zh) | 用于执行应用程序的方法和装置 | |
CN112256286B (zh) | 一种应用运行的方法、装置及计算机存储介质 | |
CN110187910B (zh) | 一种热更新方法、装置、设备及计算机可读存储介质 | |
CN104866293B (zh) | 一种对Android应用程序扩展功能的方法及装置 | |
CN104375849A (zh) | 加载内核的方法及装置 | |
CN108647032B (zh) | 应用加载方法及装置、计算机装置和计算机可读存储介质 | |
CN112631622A (zh) | 应用安装方法、装置、服务器及计算机可读介质 | |
CN107220074A (zh) | 对支撑层软件功能的访问、升级方法及装置 | |
CN110908704A (zh) | 一种移动端跨平台原生功能的调用方法及装置 | |
CN112882732A (zh) | 一种软件开发工具包sdk中功能代码的更新方法和装置 | |
CN114721688A (zh) | 一种sdk升级方法、装置以及计算机设备 | |
KR101117165B1 (ko) | 이기종 운영체제 계층 모듈에서 동작하는 웹기반어플리케이션의 연동이 가능한 모바일 단말기용 웹 플랫폼 유닛 | |
CN110032425B (zh) | 一种动态链接库文件虚拟化方法、系统及存储介质 | |
CN106293790B (zh) | 基于Firefox操作系统的应用程序升级方法和装置 | |
CN110045998A (zh) | 加载动态库的方法及装置 | |
CN107423093B (zh) | 控制方法及装置、计算机装置和计算机可读存储介质 | |
US7114153B2 (en) | Method and apparatus for continuation-passing in a virtual machine | |
CN113031957A (zh) | 应用程序的安装方法、客户端、终端、服务器及存储介质 | |
CN116775087A (zh) | 一种热修复方法、装置、电子设备及存储介质 | |
CN116401003A (zh) | 基于桌面操作系统的安卓应用运行方法、系统及存储介质 | |
CN112148318B (zh) | 应用包发布方法、应用方法、装置、介质、服务器及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |