CN105487885B - 手游热更新方法 - Google Patents

手游热更新方法 Download PDF

Info

Publication number
CN105487885B
CN105487885B CN201510819844.3A CN201510819844A CN105487885B CN 105487885 B CN105487885 B CN 105487885B CN 201510819844 A CN201510819844 A CN 201510819844A CN 105487885 B CN105487885 B CN 105487885B
Authority
CN
China
Prior art keywords
unity
update method
operation code
swims
hand
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
Application number
CN201510819844.3A
Other languages
English (en)
Other versions
CN105487885A (zh
Inventor
谈欣诚
金鑫
王耀松
黄皓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SHENGQU INFORMATION TECHNOLOGY (SHANGHAI) Co Ltd
Original Assignee
SHENGQU INFORMATION TECHNOLOGY (SHANGHAI) Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SHENGQU INFORMATION TECHNOLOGY (SHANGHAI) Co Ltd filed Critical SHENGQU INFORMATION TECHNOLOGY (SHANGHAI) Co Ltd
Priority to CN201510819844.3A priority Critical patent/CN105487885B/zh
Publication of CN105487885A publication Critical patent/CN105487885A/zh
Application granted granted Critical
Publication of CN105487885B publication Critical patent/CN105487885B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44578Preparing or optimising for loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44584Portable applications, i.e. making applications self-contained, e.g. U3 standard

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种手游热更新方法,包括:修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新;修改Unity成员变量的序列化方式,使得所述Unity成员变量按照指定方式序列化,以实现资源与所述运行代码的匹配。通过修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新。然后再修改Unity成员变量的序列化方式,使得所述Unity成员变量按照指定方式序列化,以实现资源与所述运行代码的匹配,从而实现所述运行代码和资源的热更新,使得游戏分区更新和版本回退得以实现。提高了游戏开发的效率,也提高了游戏玩家的体验。

Description

手游热更新方法
技术领域
本发明涉及计算机应用领域,尤其是一种手游热更新方法。
背景技术
当前,通常用Unity3D来开发各种游戏。由于Unity3D的非开源性,Unity3D项目在手机平台上的程序和资源热更新可能成为困扰很多团队顺利开发游戏产品的主要技术瓶颈之一。
Unity3D的游戏逻辑运行代码是以DLL(Dynamic Link Library,动态链接库)文件形式储存于APK之中的。Android系统下APK(Android Package,Android安装包)在安装后是无法写入新的文件并重新打包的。因此,如果需要修改可执行的DLL文件,由于所述DLL文件的加载路径被确定在APK中,只能以重装APK的方法来实现。而重装APK对手游玩家来说是一种流失的重要风险。
同时,在Unity3D机制下,运行代码和资源是不能同时更新的,从而导致了无法实现游戏分区更新和版本回退。分区更新对于项目研发有着重要的意义:它使项目组可以在每个版本全面推出之前,在部分服务器对于新功能进行试点;考察更新对于游戏数值平衡性的影响;监控是否有大规模的程序稳定性异常。版本回退对于玩家来说也有重要的意义,对于已经进入高版本服务器的玩家可以通过选择低版本的服务器,回退本地游戏资源进入低版本服务器进行游戏,而不会出现由于服务器版本选择错误,无法退回原来版本的尴尬。
发明内容
本发明的目的在于提供一种手游热更新方法,以解决Unity3D的游戏运行代码和资源不能同时热更新,而导致的无法实现游戏分区更新和版本回退的问题。
为了达到上述目的,本发明提供了一种手游热更新方法,包括:修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新;
修改Unity成员变量的序列化方式,使得所述Unity成员变量按照指定方式序列化,以实现资源与所述运行代码的匹配。
优选的,在上述的手游热更新方法中,通过Hook方式修改所述运行代码的加载路径。
优选的,在上述的手游热更新方法中,所述运行代码以DLL文件形式存储在APK中,通过修so文件以实现DLL文件的加载路径。
优选的,在上述的手游热更新方法中,通过修改libmono.so文件以实现修改DLL文件的加载路径。
优选的,在上述的手游热更新方法中,通过修改libmono.so文件中的mono_image_open_from_data_with_name函数以实现修改DLL文件的加载路径,使得所述DLL文件按照指定目录加载。
优选的,在上述的手游热更新方法中,修改Unity成员变量的序列化方式的步骤包括:
取消记录在APK中的Unity成员变量的序列化顺序;
自定义Unity成员变量的序列化顺序。
优选的,在上述的手游热更新方法中,取消记录在APK中的Unity成员变量的序列化顺序的步骤包括:在利用Unity编辑器编译时,打开NONE_SEARIALIZE编译开关,以关闭Unity自定义的数据序列化功能。
优选的,在上述的手游热更新方法中,自定义Unity成员变量的序列化顺序的步骤包括:在利用Unity编辑器编译时,将SerialBehavior的对象数据导出为自定义的Unity成员变量的序列化数据。
优选的,在上述的手游热更新方法中,所述自定义的Unity成员变量的序列化数据以.bytes文件形式存储。
在本发明提供的手游热更新方法中,通过修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新。然后再修改Unity成员变量的序列化方式,使得所述Unity成员变量按照指定方式序列化,以实现资源与所述运行代码的匹配,从而实现所述运行代码和资源的热更新,使得游戏分区更新和版本回退得以实现。提高了游戏开发的效率,也提高了游戏玩家的体验。
附图说明
图1为本发明实施例中手游热更新方法的流程图;
图2为本发明实施例中通过手游热更新方法而实现Unity3D游戏热更新的流程图。
具体实施方式
下面将结合示意图对本发明的具体实施方式进行更详细的描述。根据下列描述和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
本发明实施例提供了一种手游热更新方法,具体的,如图1所示,包括:
S1:修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新。
在Android系统中,Unity3D的游戏逻辑代码是以DLL文件形式存储在APK中,而APK一旦安装则无法修改。因此,为了实现可执行文件的动态更新替换,即DLL文件的热更新,必须避开从APK加载的方式,而采用从外部目录加载的方式。
申请人经过研究发现,所述DLL文件的加载是通过libmono.so文件中的mono_image_open_from_data_with_name函数实现的。只需要将所述DLL文件的载入函数进行修改替换,就可以达到修改所述DLL文件的加载路径的目的。
进一步的,通过Hook运行时修改代码的方式实现了libmono.so文件中的载入函数mono_image_open_from_data_with_name的替换。在替换文件中自定义所述DLL文件的加载路径,使得所述DLL文件按照指定目录加载,从而实现所述运行代码按照指定目录加载。从而使得在APK安装后,可以加载DLL文件,以实现DLL文件的热更新,即所述运行代码的热更新。
在本实施例中,所述libmono.so文件是基于C++语言开发的,所述DLL文件是基于C#语言开发的,所述DLL文件的下载过程是通过JAVA语言实现的。在本发明的其他实施例中,所述libmono.so文件还可以基于C或者其他计算机语言进行开发,所述DLL文件还可以基于C/C++、JAVA或者其他计算机语言进行开发,同样,所述DLL文件的下载过程也可以通过C#语言、C/C++或者其他计算机语言进行开发,在此不再赘述。
S2:修改Unity成员变量的序列化方式,使得所述Unity成员变量按照指定方式序列化,以实现资源与所述运行代码的匹配。
原生的Unity会将Monobehavior的子类的所有成员变量进行序列化,数据部分保存在.prefab文件中,序列化顺序则记录在APK包中。由于APK包在安装完毕之后,就无法修改,则如果仅仅实现了所述运行代码的热更新,将出现资源与所述运行代码不匹配的问题。因此必须使用与所述运行代码匹配的序列化方式替代原有的序列化方式。
具体的,首先,需要取消记录在APK中的Unity成员变量的序列化顺序。即在利用Unity编辑器编译时,打开所述Unity编辑器的NONE_SEARIALIZE编译开关,以关闭Unity自定义的数据序列化功能,从而使得所述Unity自定义的数据序列化顺序无效,即实现取消记录在APK中的Unity成员变量的序列化顺序。
其次,在利用Unity编辑器编译时,将SerialBehavior的对象数据导出为自定义的Unity成员变量的序列化数据,且所述自定义的Unity成员变量的序列化数据以.bytes文件形式存储。
而当手机游戏运行时,在载入SerialBehavior之后,载入所述.bytes文件以还原所述SerialBehavior的实际对象属性,使得所述资源与所述运行代码向匹配。
在实现所述运行代码和资源的热更新之后,即可实现游戏的分区更新以及版本回退,提高玩家的体验。
通过手游热更新方法而实现Unity3D游戏热更新的流程如下:
步骤S001:启动游戏。
步骤S002:判断本地的临时目录下是否有DLL文件,如果有,直接将所述DLL文件复制到Unity的可载入目录,然后启动所述Unity;如果没有,则直接启动所述Unity。
步骤S003:通过所述Unity访问区服务器的web接口,并通过选择界面选择区服务器。
步骤S004:下载所选择的区服务器上的版本号。
步骤S005:判断所选择的区服务器上的版本号与本地所存储的版本号是否一致,如果一致,则开始游戏;如果不一致,分析所选择的区服务器上的版本号与本地所存储的版本号之间的差异,下载差异文件包。
在这个过程中,通过本发明所提供的手游热更新方法以实现游戏运行代码和资源的热更新。
步骤S006:将下载的差异文件包解压并存储在本地的临时目录上,然后重启客户端APK,重新启动游戏即可。
需要说明的是,本发明不仅适用于Android系统,还适用于linux、IOS系统及其他系统,只是在linux、IOS系统以及其他系统中,由于平台机制不同,所调用的文件以及函数名称不同,但是原理一致,在此不再赘述。
综上,在本发明实施例提供的手游热更新方法中,通过修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新。然后再修改Unity成员变量的序列化方式,使得所述Unity成员变量按照指定方式序列化,以实现资源与所述运行代码的匹配,从而实现所述运行代码和资源的热更新,使得游戏分区更新和版本回退得以实现。提高了游戏开发的效率,也提高了游戏玩家的体验。
上述仅为本发明的优选实施例而已,并不对本发明起到任何限制作用。任何所属技术领域的技术人员,在不脱离本发明的技术方案的范围内,对本发明揭露的技术方案和技术内容做任何形式的等同替换或修改等变动,均属未脱离本发明的技术方案的内容,仍属于本发明的保护范围之内。

Claims (9)

1.一种手游热更新方法,其特征在于,包括:
修改运行代码的加载路径,使得所述运行代码按照指定目录加载,以实现所述运行代码的热更新;
修改Unity成员变量的序列化方式,使得所述Unity成员变量按照指定方式序列化,以实现资源与所述运行代码的匹配。
2.如权利要求1所述的手游热更新方法,其特征在于,通过Hook方式修改所述运行代码的加载路径。
3.如权利要求1所述的手游热更新方法,其特征在于,所述运行代码以DLL文件形式存储在APK中,通过修改so文件以实现修改DLL文件的加载路径。
4.如权利要求3所述的手游热更新方法,其特征在于,通过修改libmono.so文件以实现修改DLL文件的加载路径。
5.如权利要求4所述的手游热更新方法,其特征在于,通过修改libmono.so文件中的mono_image_open_from_data_with_name函数以实现修改DLL文件的加载路径,使得所述DLL文件按照指定目录加载。
6.如权利要求1所述的手游热更新方法,其特征在于,修改Unity成员变量的序列化方式的步骤包括:
取消记录在APK中的Unity成员变量的序列化顺序;
自定义Unity成员变量的序列化顺序。
7.如权利要求6所述的手游热更新方法,其特征在于,取消记录在APK中的Unity成员变量的序列化顺序的步骤包括:在利用Unity编辑器编译时,打开NONE_SERIALIZE编译开关,以关闭Unity自定义的数据序列化功能。
8.如权利要求6所述的手游热更新方法,其特征在于,自定义Unity成员变量的序列化顺序的步骤包括:在利用Unity编辑器编译时,将SerialBehavior的对象数据导出为自定义的Unity成员变量的序列化数据。
9.如权利要求8所述的手游热更新方法,其特征在于,所述自定义的Unity成员变量的序列化数据以.bytes文件形式存储。
CN201510819844.3A 2015-11-23 2015-11-23 手游热更新方法 Active CN105487885B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510819844.3A CN105487885B (zh) 2015-11-23 2015-11-23 手游热更新方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510819844.3A CN105487885B (zh) 2015-11-23 2015-11-23 手游热更新方法

Publications (2)

Publication Number Publication Date
CN105487885A CN105487885A (zh) 2016-04-13
CN105487885B true CN105487885B (zh) 2018-10-19

Family

ID=55674881

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510819844.3A Active CN105487885B (zh) 2015-11-23 2015-11-23 手游热更新方法

Country Status (1)

Country Link
CN (1) CN105487885B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106201868A (zh) * 2016-06-28 2016-12-07 Tcl集团股份有限公司 一种修复Android应用程序的方法和装置
CN107800740B (zh) * 2016-09-06 2021-12-24 盛趣信息技术(上海)有限公司 Mmorpg服务器热更新
CN108089870B (zh) * 2016-11-21 2022-01-21 百度在线网络技术(北京)有限公司 用于修复应用的方法和装置
CN108228208A (zh) * 2016-12-22 2018-06-29 北京神州泰岳软件股份有限公司 一种java应用程序的动态更新方法和装置
CN106878380A (zh) * 2016-12-27 2017-06-20 北京五八信息技术有限公司 一种修复APP线上bug的方法、装置及终端
CN106897103B (zh) * 2017-03-03 2020-11-06 广州四三九九信息科技有限公司 一种移动端网络游戏版本快速热更新的方法
CN109086059B (zh) * 2017-06-14 2023-05-09 腾讯科技(北京)有限公司 代码加载更新方法、装置及服务器
CN108415719B (zh) 2018-03-29 2019-03-19 网易(杭州)网络有限公司 代码热更新方法和装置、存储介质、处理器及终端
CN109683927A (zh) * 2018-11-01 2019-04-26 苏州蜗牛数字科技股份有限公司 一种更新u3d安卓游戏的方法
CN109857432B (zh) * 2019-01-14 2022-05-20 珠海金山网络游戏科技有限公司 一种游戏应用的热更新方法和装置
CN110457054B (zh) * 2019-07-22 2023-01-03 珠海金山数字网络科技有限公司 一种UnityNGUI控件锚点更新模式优化方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102314561A (zh) * 2010-07-01 2012-01-11 电子科技大学 基于api hook的恶意代码自动分析方法和系统
CN103605518A (zh) * 2013-11-19 2014-02-26 北京国双科技有限公司 对象反序列化方法和装置
CN104038819A (zh) * 2014-05-30 2014-09-10 四川长虹电器股份有限公司 数字机顶盒的软件升级系统及方法
CN104461622A (zh) * 2014-11-28 2015-03-25 广州视睿电子科技有限公司 智能终端的系统更新方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7634738B2 (en) * 2004-11-19 2009-12-15 Microsoft Corporation Systems and methods for processing input data before, during, and/or after an input focus change event

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102314561A (zh) * 2010-07-01 2012-01-11 电子科技大学 基于api hook的恶意代码自动分析方法和系统
CN103605518A (zh) * 2013-11-19 2014-02-26 北京国双科技有限公司 对象反序列化方法和装置
CN104038819A (zh) * 2014-05-30 2014-09-10 四川长虹电器股份有限公司 数字机顶盒的软件升级系统及方法
CN104461622A (zh) * 2014-11-28 2015-03-25 广州视睿电子科技有限公司 智能终端的系统更新方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
unity IOS下的热更新研究;yy405145590;《CSDN博客》;20141119;1-5页 *
unity动态运行外部代码;luxiaoyu_sdc;《CSDN博客》;20140305;1-5页 *

Also Published As

Publication number Publication date
CN105487885A (zh) 2016-04-13

Similar Documents

Publication Publication Date Title
CN105487885B (zh) 手游热更新方法
CN102411506B (zh) Java系统业务单元插件式管理系统及业务功能动态变更方法
US20220318399A1 (en) Method and contract rewriting framework system for supporting smart contracts in a blockchain network
CN102955702B (zh) 一种软件安装及升级方法和装置
CN102622241B (zh) 一种软件升级方法及装置
CN107506221A (zh) 应用程序升级方法、装置及设备
CN106371940A (zh) 一种程序崩溃解决方法及装置
US8701105B2 (en) Downloadable standalone offline application with integrated data for distributed offline processing
US9928059B1 (en) Automated deployment of a multi-version application in a network-based computing environment
US20140196022A1 (en) Cloud Based Application Packaging
CN104820586B (zh) 一种航天器嵌入式软件在轨维护方法
CN108595186A (zh) 一种飞腾平台上基于完全函数的多版本软件管理方法
CN105320554A (zh) 程序更新的方法、用于程序更新的客户端及系统
CN107391104A (zh) 一种客户端与react native代码的更新依赖管理方法、装置及系统
CN107357607B (zh) 文件数据的读取方法及装置
CN106874195A (zh) 一种针对android应用的bug修复和持续交付方案
WO2014004072A1 (en) Automatic provisioning of a software platform to a device ecosystem
CN109513213A (zh) 一种手游分包下载技术方法
CA2860657C (en) Installation engine and package format for parallelizable, reliable installations
CN107391181A (zh) 一种系统分区的方法及装置
CN109597631A (zh) 一种进程的升级方法、装置及电子设备
US8397217B2 (en) Integrating templates into tests
CN106201584B (zh) 版本升级方法及终端设备
US7689972B2 (en) System and method for producing software patches
US7472380B1 (en) Processing system with component architecture platform support

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant