CN107436787B - 资源处理方法、装置、存储介质和电子装置 - Google Patents

资源处理方法、装置、存储介质和电子装置 Download PDF

Info

Publication number
CN107436787B
CN107436787B CN201710644682.3A CN201710644682A CN107436787B CN 107436787 B CN107436787 B CN 107436787B CN 201710644682 A CN201710644682 A CN 201710644682A CN 107436787 B CN107436787 B CN 107436787B
Authority
CN
China
Prior art keywords
script
matching identification
member variable
resource
attribute
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
CN201710644682.3A
Other languages
English (en)
Other versions
CN107436787A (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201710644682.3A priority Critical patent/CN107436787B/zh
Publication of CN107436787A publication Critical patent/CN107436787A/zh
Application granted granted Critical
Publication of CN107436787B publication Critical patent/CN107436787B/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

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)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种资源处理方法、装置、存储介质和电子装置。其中,该方法包括:获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;构建具有第二匹配标识的第二资源文件,其中,在目标应用调用具有与第一匹配标识相同的匹配标识的程序包时,正常加载第二资源文件。本发明解决了相关技术存在资源更新效率低的技术问题。

Description

资源处理方法、装置、存储介质和电子装置
技术领域
本发明涉及计算机领域,具体而言,涉及一种资源处理方法、装置、存储介质和电子装置。
背景技术
目前,终端的程序主要包括两部分:一是安装在终端中的程序包;二是独立于程序包的资源文件。比如,采用游戏引擎Unity的手机游戏程序,包括安装在手机中的程序包和独立于程序包的资源文件。
当应用运行时,加载起某一个独立于程序包外的资源(Asset bundle,简称为ab)时,会读取当前ab资源中需要的所有脚本代码的标识,当且仅当ab内脚本代码标识和程序包内脚本代码的标识完全一致的情况下,ab资源才能够被正常加载并使用。
对于已经发布到外网的程序包(简称为“包1”)可以正常使用对应ab资源(简称为“ab1”)。但是,随着项目的迭代开发,资源和代码会一直被修改。需要将修改过的资源更新到外网,在构建时就会产出新的程序包(简称为“包2”)和新的ab资源(简称为“ab2”)。包2可以正常使用ab2,但是,由于脚本代码的标识修改过,包1的脚本代码标识和ab2的脚本代码标识无法完全匹配,因而包1无法直接使用ab2。新的改动也就无法发布到外网版本的程序包通用,导致资源更新失败。
在进行资源更新时,一旦新版本发布之后,会拉出一条单独的支线分支对新版本独立维护。主线分支仍做后续版本的开发。一旦需要修改资源,则需要对主线分支和支线分支上的资源都进行修改。或者在需要更新的时候,将外网多个版本都强制用户更新到最新的版本,统一进行更新。
上述大量重复的修改增大了时间成本和人力成本,且很容易会产生错误、改错或者是漏改,修改成本巨大,降低了资源更新的准确率。另外,一般资源修改是由策划人员或者是美术人员进行,在对程序原理不清楚的情况下进行修改,更容易增加错误率,强制的版本更新会对业务数据带来巨大的影响,导致资源的更新效率低的问题。
针对上述资源的更新效率低的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种资源处理方法、装置、存储介质和电子装置,以至少解决相关技术存在资源更新效率低的技术问题。
根据本发明实施例的一个方面,提供了一种资源处理方法。该资源处理方法包括:获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;构建具有第二匹配标识的第二资源文件,其中,在目标应用调用具有与第一匹配标识相同的匹配标识的程序包时,正常加载第二资源文件。
根据本发明实施例的另一方面,还提供了一种资源获取装置。该资源获取装置包括:获取单元,用于获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;第一构建单元,用于将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;确定单元,用于在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;第二构建单元,用于构建具有第二匹配标识的第二资源文件,其中,在目标应用调用具有与第一匹配标识相同的匹配标识的程序包时,正常加载第二资源文件。
根据本发明实施例的另一方面,还提供了一种存储介质。该存储介质包括存储的程序,其中,程序运行时执行本发明实施例的资源处理方法。
根据本发明实施例的另一方面,还提供了一种电子装置。该电子装置包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器通过计算机程序执行本发明实施例的资源处理方法。
在本发明实施例中,通过获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;构建具有第二匹配标识的第二资源文件,其中,在目标应用调用第一程序包时,正常加载第二资源文件,这样在原程序包加载新资源时,由于匹配标识相一致,可以使新资源加载成功,实现一个程序包兼容多个版本资源的功能,可以解决了相关技术存在资源更新效率低的技术问题,进而达到了提高资源更新效率的技术效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种资源处理方法的硬件环境的示意图;
图2是根据本发明实施例的一种资源处理方法的流程图;
图3是根据本发明实施例的一种将第二资源文件的第二匹配标识确定为第一匹配标识的方法的流程图;
图4是根据本发明实施例的一种确定第二脚本的匹配标识为第一匹配标识的方法的流程图;
图5是根据本发明实施例的一种资源获取装置的示意图;
图6是根据本发明实施例的一种资源处理系统的示意图;以及
图7是根据本发明实施例的一种电子装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本发明实施例,提供了一种资源处理方法的实施例。
可选地,在本实施例中,上述资源处理方法可以应用于如图1所示的由服务器102和终端104所构成的硬件环境中。图1是根据本发明实施例的一种资源处理方法的硬件环境的示意图。如图1所示,服务器102通过网络与终端104进行连接,上述网络包括但不限于:广域网、城域网或局域网,终端104并不限定于PC、手机、平板电脑等。本发明实施例的资源处理方法可以由服务器102来执行,也可以由终端104来执行,还可以是由服务器102和终端104共同执行。其中,终端104执行本发明实施例的资源处理方法也可以是由安装在其上的客户端来执行。
图2是根据本发明实施例的一种资源处理方法的流程图。如图2所示,该方法可以包括以下步骤:
步骤S202,获取目标应用的第一脚本和第一资源。
在本申请上述步骤S202提供的技术方案中,获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联。
该实施例的资源处理方法通过引擎执行,该引擎可以为Unity游戏引擎,该Unity游戏引擎为用于创建三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎,具有用于设定脚本的公共成员变量(Public)值的编辑器。该实施例的目标应用可以为游戏应用。
目标应用包括第一脚本和第一资源,其中,第一脚本也即脚本代码,可以为当前目标应用的所有脚本代码,以组件形式挂接在第一资源上,可以根据引擎的预设规则进行调用,用于驱动引擎的业务逻辑。第一资源也即资源对象,比如,第一资源为prefab资源,可以为游戏应用中的关卡出兵顺序、内容、数值等资源,具有对应的版本信息。可选地,随着项目的迭代开发,上述目标应用具有多个版本的资源。
步骤S204,将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件。
在本申请上述步骤S204提供的技术方案中,将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配。
目标应用的程序包括两部分,一部分是安装在终端中的程序包,该程序包包括了目标应用在运行时的可执行程序以及程序的包内资源等,另一部分是独立于程序包的资源文件,该资源文件在启动目标应用之后下载到终端的硬盘上,供目标应用在运行时使用,其中,终端可以为移动通讯终端,此处不做限定。在获取目标应用的第一脚本之后,通过引擎将第一脚本构建为第一程序包。第一程序包包括了当前目标应用的所有脚本代码,也即,目标应用中的所有脚本代码会被引擎默认构建在第一程序包内,以供目标应用在运行时调用。
在获取目标应用的第一资源之后,将第一资源构建为目标格式的第一资源文件。目标格式的第一资源文件可以为Unity引擎支持的资源格式的程序包外资源(Assetbundle,简称为ab)文件,后缀为.Unity3d,为独立于第一程序包的资源文件,在目标应用运行时,如果需要第一资源,则将第一资源文件加载至目标应用中使用。在将第一资源文件构建为第一资源文件时,挂接在第一资源上的第一脚本并不会跟随第一资源打包成第一资源文件,比如,Unity引擎在打包游戏ab资源时,挂接在prefab资源上的脚本代码并不会跟随prefab资源打包成ab资源。
该实施例的第一程序包和第一资源文件通过第一匹配标识相匹配,第一匹配标识可以为脚本代码标识,全局唯一。其中,第一程序包包括第一匹配标识,第一资源文件包括第二匹配标识,在这样的情况下,目标应用在运行时,第一资源文件才可以正常被加载使用,从而将第一脚本还原到第一资源上挂接的组件以正常运行。
可选地,游戏引擎会根据当前的第一脚本的序列化信息生成一个全局唯一的哈希(hash)值,然后将这个hash值记录在第一资源文件中,这个hash值为第一程序包和第一资源文件的第一匹配标识。其中,序列化为在引擎构建第一资源文件时,根据挂载在第一资源上的第一脚本中的Public成员变量,对成员变量的预设值进行保存,序列化信息就是用于为预设值开辟存储空间以供保存的信息,比如,有三个成员变量,分别为成员变量A、成员变量B、成员变量C,通过编辑器设置成员变量A对应的预设值为1、成员变量B对应的预设值为2、成员变量C对应的预设值为3,序列化出一段存储空间以记录上述预设值1、2、3,其中,hash值与Public成员变量的类型、名字、数量等有关。
可选地,第一脚本中需要处理的成员变量包括Public的成员变量,这个成员变量会直接影响该第一脚本的第一匹配标识,比如,影响第一脚本的hash值。HIDE_SCRIPT_DATA_IN_EDITOR是一个自定义的代码宏,用于确定命令[System.NonSerialized]是否生效,而命令System.NonSerialized用于表示第一脚本中的Public的成员变量不纳入序列化的范畴,也即,不为第一脚本中的Public的成员变量开辟存储空间,一旦第一脚本中的Public的成员变量标注了System.NonSerialized,则第一脚本中的Public的成员变量不会影响该第一脚本的hash值。
可选地,在引擎提供的编辑器中,可以直接通过编辑器来设定第一脚本的Public的值,并保存在第一资源中,其中,Public的值称为预设值。首先关闭上述HIDE_SCRIPT_DATA_IN_EDITOR这个宏,使得上述命令System.NonSerialized不生效,可以直接在编辑器编辑变量的预设值,比如,第一脚本中的Public的成员变量的预设值为100。
在进行版本编译的时候,将HIDE_SCRIPT_DATA_IN_EDITOR这个宏打开,使得System.NonSerialized开始生效,第一脚本中的Public的成员变量不参与序列化,构建出来脚本的hash值,比如,该hash值为AAA。
可选地,为了使第一脚本中的Public的成员变量的预设值100能够保留下来,并在加载的时候能够恢复回去,所以在打开HIDE_SCRIPT_DATA_IN_EDITOR宏之前,会先读取这个第一资源里记录的预设值,并将这个预设值保存到另外一个自定义的数据(data)文件中。在保存好预设值之后,再打开HIDE_SCRIPT_DATA_IN_EDITOR宏,使得命令System.NonSerialized生效,然后对第一资源进行构建。由于System.NonSerialized用于指示第一脚本中的Public的成员变量不参与序列化,因而此时构建出来第一资源文件中的hash为AAA,通过第一脚本构建的第一程序包和通过第一资源构建的第一资源文件的hash值相同,也即,第一程序包和第一资源文件通过第一匹配标识hash值相匹配。
可选地,存在多个版本的资源,多个版本的资源的匹配标识为上述第一匹配标识。
步骤S206,在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识。
在本申请上述步骤S206提供的技术方案中,在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同。
随着项目的迭代开发,脚本代码、资源可能会被修改,需要更新资源,更新资源与第二资源文件相对应,第二资源文件与第一资源文件的版本不同。
在将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件之后,在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,也即,可以为后缀为.Unity3d的资源文件。上述第一条件可以为自定义的宏与命令相结合的条件,比如,自定义宏代码开关HIDE_SCRIPT_DATA_IN_EDITOR,用于确定命令System.NonSerialized是否生效,该命令System.NonSerialized用于指示不为第二资源文件对应的成员变分配存储空间。在宏代码开关HIDE_SCRIPT_DATA_IN_EDITOR关闭,使得命令System.NonSerialized不生效的第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,可以通过编辑器编辑用于确定第二资源文件的hash值的Public的值,使得第二匹配标识与第一匹配标识一致,然后打开自定义宏代码开关HIDE_SCRIPT_DATA_IN_EDITOR,第二资源文件对应的成员变量不被分配存储空间,然后再构建第二资源文件,该第二资源文件的第二匹配标识依然为第一匹配标识。
步骤S208,构建具有第二匹配标识的第二资源文件。
在本申请上述步骤S208提供的技术方案中,构建具有第二匹配标识的第二资源文件,其中,在目标应用调用具有与第一匹配标识相同的匹配标识的程序包时,正常加载第二资源文件。
在将第二资源文件的第二匹配标识确定为第一匹配标识之后,然后构建第二资源文件,构建具有第二匹配标识的第二资源文件。当目标应用在调用第一程序包时,由于第一程序包的第一匹配标识与第二资源文件的第二匹配标识相一致,因而会正常加载第二资源文件,从而在不对开发流程做任何修改的情况下,将第二资源文件的第二匹配标识确定为第一匹配标识,实现了一个第一程序包兼容第一资源文件和第二资源文件的功能。
该实施例可以对外网同时存在的相同匹配标识的多个版本的程序包进行资源更新,且达到只需修改最新版本资源的匹配标识为之前多个版本的资源文件的匹配标识,即可通用更新所有版本的效果,大大降低了版本维护的时间成本和人力成本,稳定地、准确地进行更新资源,并且多个版本的资源可以对应同一个服务器。
通过上述步骤S202至步骤S208,通过获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;构建具有第二匹配标识的第二资源文件,其中,在目标应用调用第一程序包时,正常加载第二资源文件,这样在原程序包加载新资源时,由于匹配标识相一致,可以使新资源加载成功,实现一个程序包兼容多个版本资源的功能,可以解决了相关技术存在资源更新效率低的技术问题,进而达到了提高资源更新效率的技术效果。
作为一种可选的实施方式,步骤S206,在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识包括:获取第二脚本,其中,第二脚本与第二资源相关联,第二资源文件由第二资源构建得到;在第一条件下,确定第二脚本的匹配标识为第一匹配标识;将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中。
图3是根据本发明实施例的一种将第二资源文件的第二匹配标识确定为第一匹配标识的方法的流程图。如图3所示,该方法包括以下步骤:
步骤S301,获取第二脚本。
在本申请上述步骤S301提供的技术方案中,获取第二脚本,其中,第二脚本与第二资源相关联,第二资源文件由第二资源构建得到。
随着目标应用的项目的迭代开发,资源和代码会一直被修改,需要将修改的资源更新到外网。获取第二脚本,该第二脚本可以为修改的资源对应的脚本,也可以为第一脚本修改之后的脚本,比如,在第一脚本上增加了另外一个成员变量,得到第二脚本。
将第二资源构建为目标格式的第二资源文件。目标格式的第二资源文件可以为Unity引擎支持.Unity3d格式,为独立于程序包的资源文件。在目标应用运行时,如果需要第一资源,则将第一资源文件加载进来使用。在将第二资源文件构建为第二资源文件时,挂接在第二资源上的第二脚本并不会跟随第二资源打包成第二资源文件。
步骤S302,在第一条件下,确定第二脚本的匹配标识为第一匹配标识。
在本申请上述步骤S302提供的技术方案中,在第一条件下,确定第二脚本的匹配标识为第一匹配标识。
在获取第二脚本之后,在宏代码开关HIDE_SCRIPT_DATA_IN_EDITOR关闭,使得命令System.NonSerialized不生效的第一条件下,也即,将第二脚本纳入序列化的范畴,确定第二脚本的匹配标识为第一匹配标识,可以通过编辑器设定第二脚本的成员变量的Public的值与第一脚本的成员变量的Public的值一致,这样使得第二脚本的hash值与第一脚本的hash值一致,进而达到确定第二脚本的匹配标识为第一匹配标识的目的。
步骤S303,将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中。
在本申请上述步骤S303提供的技术方案中,将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中。
在确定第二脚本的匹配标识为第一匹配标识之后,将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中。可选地,引擎会根据当前的第二脚本的Public的值,生成一个全局唯一的hash值,然后将这个全局唯一的hash值记录在第二资源文件中。
该实施例获取第二脚本,其中,第二脚本与第二资源相关联,第二资源文件由第二资源构建得到;在第一条件下,确定第二脚本的匹配标识为第一匹配标识;将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中,实现了在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识的目的,进而构建具有第二匹配标识的第二资源文件,达到了提高资源更新效率的技术效果。
作为一种可选的实施方式,步骤S302,在第一条件下,确定第二脚本的匹配标识为第一匹配标识包括:获取第一脚本的第一成员变量和第二脚本的第二成员变量;在第一条件下,确定第二成员变量的属性为第一成员变量的属性,以将第二脚本的匹配标识确定为第一匹配标识,其中,第二成员变量的属性用于确定第二脚本的匹配标识,第一成员变量的属性用于确定第一匹配标识。
图4是根据本发明实施例的一种确定第二脚本的匹配标识为第一匹配标识的方法的流程图。如图4所示,该方法包括以下步骤:
步骤S401,获取第一脚本的第一成员变量和第二脚本的第二成员变量。
在本申请上述步骤S401提供的技术方案中,获取第一脚本的第一成员变量和第二脚本的第二成员变量。
成员变量为全局变量,定义在类中,和类的方法处理同一个层次,包括公共成员变量和私有成员变量。其中,公共成员变量可以被项目中的任何方法访问,而私有变量只能在同一个类中使用。
第一脚本具有第一成员变量,该第一成员变量为公共成员变量,第二脚本具有第二成员变量,该第二成员变量为公共成员变量,脚本代码的匹配标识与公共成员变量有关,包括变量的类型、名字等。
在获取第二脚本之后,获取第一脚本的第一成员变量和第二脚本的第二成员变量。
步骤S402,在第一条件下,确定第二成员变量的属性为第一成员变量的属性,以将第二脚本的匹配标识确定为第一匹配标识。
在本申请上述步骤S402提供的技术方案中,在第一条件下,确定第二成员变量的属性为第一成员变量的属性,以将第二脚本的匹配标识确定为第一匹配标识,其中,第二成员变量的属性用于确定第二脚本的匹配标识,第一成员变量的属性用于确定第一匹配标识。
第一成员变量的属性可以由引擎的编辑器根据第一成员变量的Public值进行确定,通过Public值的类型、顺序、名称、数量等可以确定第一成员变量的属性,其中,Public值也即预设值,比如,该预设值为100。在宏代码开关HIDE_SCRIPT_DATA_IN_EDITOR关闭,使得命令System.NonSerialized不生效的第一条件下,也即,将第二成员变量纳入序列化的范畴,确定第二成员变量的属性为第一成员变量的属性,可以将第二成员变量的预设值设置为100,从而使得第二成员变量的属性为第一成员变量的属性,进而将第二脚本的匹配标识确定为第一匹配标识,将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中,使得第二资源文件的匹配标识与第一匹配标识一致。
该实施例通过获取第一脚本的第一成员变量和第二脚本的第二成员变量;在第一条件下,确定第二成员变量的属性为第一成员变量的属性,以将第二脚本的匹配标识确定为第一匹配标识,其中,第二成员变量的属性用于确定第二脚本的匹配标识,第一成员变量的属性用于确定第一匹配标识,达到了在第一条件下,确定第二脚本的匹配标识为第一匹配标识的目的,进而将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中,使得第二资源文件的匹配标识与第一匹配标识一致,构建具有第二匹配标识的第二资源文件,达到了提高资源更新效率的技术效果。
作为一种可选的实施方式,步骤S402,在第一条件下,确定第二成员变量的属性为第一成员变量的属性包括:在第一条件下,指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性;步骤S303,将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中包括:将第二成员变量的属性保存至第二资源中。
目标应用的引擎包括预设编辑器,用于编辑脚本的成员变量的预设值。在宏代码开关HIDE_SCRIPT_DATA_IN_EDITOR关闭,使得命令System.NonSerialized不生效的第一条件下,指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性,也即,将第二成员变量纳入序列化的范畴,可以直接通过预设编辑器设置第二成员变量的预设值为第一成员变量的预设值以实现设定第二成员变量的属性为第一成员变量的属性,不会影响正常使用。在将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中时,可以将第二成员变量的预设值保存至第二资源(prefab)中。
作为一种可选的实施方式,在步骤S402,指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性之后,该方法还包括:在编译第二脚本时,在第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间。
在指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性之后,在编译资源版本时,在HIDE_SCRIPT_DATA_IN_EDITOR宏打开,使得命令System.NonSerialized开始生效的第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间,也即,将第二成员变量不纳入序列化的范畴,第二成员变量不参与序列化,构建出的匹配标识依然为第一匹配标识。
作为一种可选的实施方式,在将第二成员变量的属性保存至第二资源中之后,且在指示预设编辑器不为第二成员变量的属性分配存储空间之前,该方法还包括:从第二资源中读取第二成员变量的属性;保存第二成员变量的属性至预设数据文件中,其中,在加载第二资源文件之后,将第二成员变量的属性从预设数据文件中还原至第二脚本中;在第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间包括:在保存第二成员变量的属性至预设数据文件中之后,在第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间。
第二成员变量的属性需要被目标应用在运行时使用。在构建第二资源文件的同时,为了使第二成员变量的属性可以保留下来,并在目标应用加载的时候可以恢复回去,在打开HIDE_SCRIPT_DATA_IN_EDITOR宏,使得System.NonSerialized开始生效之前,从第二资源中读取第二变量的属性,比如,读取第二变量的预设值100,保存第二成员变量的属性至预设数据文件中,其中,预设数据文件可以为自定义data结构的数据文件,第二成员变量的属性需要在加载第二资源文件之后从预设数据文件中还原至第二脚本中。在保存第二成员变量的属性至预设数据文件中之后,在打开HIDE_SCRIPT_DATA_IN_EDITOR宏,使得System.NonSerialized开始生效的第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间,也即,第二成员变量不会被序列化,第二成员变量不会影响第二匹配标识,因而构建出来的程序包和第二资源文件的匹配标识仍然与第一匹配标识一致。
作为一种可选的实施方式,步骤S208,构建具有第二匹配标识的第二资源文件包括:在预设编辑器不为第二成员变量的属性分配存储空间的情况下,构建具有第二匹配标识的第二资源文件。
在构建具有第二匹配标识的第二资源文件时,在预设编辑器部位第二成员变量的属性分配存储空间的情况下,也即,在第二成员变量不会被序列化的情况下,构建具有和第一匹配标识相一致的第二匹配标识的第二资源文件,更新第一资源文件为第二资源文件。
需要说明的是,上述自定义data结构的数据文件,里面可以包含所有预设值,该自定义数据文件可以由多种方式或者格式存在,此处不做限定。本发明实施例还可以采用与上述代码开关HIDE_SCRIPT_DATA_IN_EDITOR所起到的用于控制System.NonSerialized命令是否生效的其它形式代码开关,还可以采用与命令System.NonSerialized所起到的让引擎不默认序列化的作用相同的其它形式命令,此处不再一一举例说明。
该实施例可以实现在不对开发流程做任何修改的情况下,利用自定义的序列化,将第二资源文件的第二匹配标识确定为第一匹配标识,进而实现一个程序包兼容多个版本资源的功能,去规避多个版本资源同时更新所遇到的风险。绕过引擎内置的匹配标识的限制,使资源更容易被更新,一次修改便能轻松支持多个版本,提高资源更新效率,并减少出错率。
实施例2
下面结合优选的实施例对本发明的技术方案进行说明。具体以Unity游戏引擎进行举例说明。
Unity游戏引擎是基于组件的游戏引擎,逻辑由脚本驱动,而脚本(也即,代码)以组件挂接在各个资源对象上,根据Unity引擎既定的规则进行调用以运行,从而实现业务逻辑。在构建程序包的时候,脚本代码会自动地构建入程序包内,也即,程序包中包含当前所有的脚本代码,其中,程序包,也即游戏包,游戏程序包;在构建资源时,Unity游戏引擎打包ab资源,会将前ab资源所用到的所有脚本代码都记录在ab文件中,将一个或多个资源打包成.Unity3d格式的文件,其中,ab文件为独立于程序包外的资源文件,Unity游戏引擎可以将一个或多个资源打包成.Unity3d格式的文件,独立于程序包外。当游戏运行时,如果需要使用ab资源,再将其加载进来使用。
在获取到ab资源和程序包之后,同时发布ab资源和对应的程序包。当游戏运行加载起某一个ab资源时,Unity会读取当前ab中需要的所有脚本代码版本的标识。Unity游戏引擎会限制程序包和ab资源的对应关系,当且仅当ab内脚本代码标识和程序包内脚本代码标识完全一致的情况下,ab资源才能够被正常加载并使用,上面挂接的脚本也才能正确运行;当ab内脚本代码标识和程序包内脚本代码标识对应不上时,则会导致资源不能正常加载并使用。
该实施例在需要更新资源时,提前整理好资源与脚本的对应关系,对脚本和资源进行构建,绕开Unity强制的标识匹配,以使得在单独更新ab资源时,不受Unity游戏引擎的对应关系的限制,使得资源只需要修改一次,就可以被外网的多个版本的程序包通用,达到在降低时间成本和人力成本的情况下,稳定地、准确地更新资源的目的。下面对其进行详细描述:
当游戏应用在运行时,加载ab资源,首先会先获取ab资源上记录的哈希(hash)值,当且仅当这个hash值和游戏程序包内的hash值相等时,才能正确地加载ab资源,并将与该hash值对应的脚本还原到资源对象上挂接的组件。
脚本代码的hash值只和代码序列化的成员变量有关系,其中,成员变量是指定维度的成员变量,用于标识某个维度成员。
举例而言,一个c#脚本具有成员变量selfName和成员变量selfLevel:
Public UILable selfName;
Private UILable selfLevel;
上述两个成员变量的区别在于成员变量selfName是公共(Public)成员变量,可以被项目中的任何方法访问;而成员变量selfLevel是私有(Private)成员变量,只能在同一个类中使用。脚本的hash值只和Public的selfName有关系,包括和这个变量的类型、名字、数量等有关系。但hash值与Private的成员变量selfLevel没有任何关系,即使成员变量selfLevel改名为level,也不会对脚本的hash值产生影响。也即,脚本的hash值只与脚本的所有Public变量有关,只要保证前后两个版本的Public变量完全一致,就可以保证脚本的hash值不变。一旦修改过的ab资源的hash值与原来ab资源的hash值相同,则前后不同的版本都可以正常加载使用后面修改过的ab资源。
可选地,预先将脚本基类进行处理,比如,脚本基类为射击功能的基类CbaseShooter,其中的Public成员变量为mShootEffectID。对成员变量mShootEffectID进行处理,加入宏HIDE_SCRIPT_DATA_IN_EDITOR,并且在该宏HIDE_SCRIPT_DATA_IN_EDITOR下填入命令[System.NonSerialized],具体代码如下所示:
由上述代码可知,当前需要处理的成员变量为mShootEffectID,为Public的成员变量,也即,这个Public的成员变量会直接影响该脚本的hash值。
HIDE_SCRIPT_DATA_IN_EDITOR是一个自定义的代码宏,也即,为一个代码开关,决定了命令[System.NonSerialized]是否生效。当代码宏HIDE_SCRIPT_DATA_IN_EDITOR关闭时,System.NonSerialized失效,使得mShootEffectID这个成员变量纳入序列化的范畴;当HIDE_SCRIPT_DATA_IN_EDITOR开启时,System.NonSerialized生效,使得mShootEffectID这个成员变量不纳入序列化的范畴,也即,一旦标注了System.NonSerialized,则会使得成员变量mShootEffectID不会影响该脚本的hash值。
由于在Unity游戏引擎提供的编辑器中,在对象资源prefab上挂载脚本,可以直接通过编辑器来设定这个脚本的Public的属性,并将Public的属性保存在prefab资源中,可以通过预设值设定这个脚本的Public的属性。比如,成员变量mShootEffectID设置的预设值0,为预设值0开辟了存储空间,记录预设值0。
正是因为可以在游戏引擎的编辑器中预设的成员变量的Public的属性,最终决定了该脚本的hash值。
可选地,为了方便在编辑器中对成员变量进行预设,在开发期间内,首先会关掉HIDE_SCRIPT_DATA_IN_EDITOR这个代码宏,使得命令System.NonSerialized不生效,成员变量mShootEffectID这个成员变量纳入序列化的范畴,因而开发者可以直接在编辑器编辑变量的预设值Public的属性,为预设值开辟了存储空间,不会影响正常使用,比如,成员变量mShootEffectID的预设值设置为100。
在进行版本编译的时候,打开HIDE_SCRIPT_DATA_IN_EDITOR这个代码宏,使得命令System.NonSerialized开始生效,mShootEffectID这个成员变量不纳入序列化的范畴,也即,编译器会认为mShootEffectID这个成员变量不参与序列化,构建出来脚本的hash值假设为AAA。
在构建脚本的哈希值的同时,因为预设值需要在游戏运行时使用,因而成员变量mShootEffectID的预设值100需要保留,并且在加载的时候能够恢复回去。在设置HIDE_SCRIPT_DATA_IN_EDITOR这个代码宏之前,会先读取资源prefab里的脚本值,并将预设值100保存到另外一个自定义的数据(data)文件中。在保存好所有资源prefab上脚本的预设值之后,再打开HIDE_SCRIPT_DATA_IN_EDITOR代码宏,使得命令System.NonSerialized生效,进而使得mShootEffectID这个成员变量不纳入序列化的范畴,会使得成员变量mShootEffectID不会影响该脚本的hash值,最后进行资源的构建。由于成员变量mShootEffectID不会被序列化,因而此时构建出来的游戏程序包(称为程序包V1)和包外的ab资源(称为资源V1)都会认为此脚本的hash值为AAA。
随着项目的迭代开发,资源、脚本代码和预设值可能都会被修改,例如,增加了一个另外一个成员变量Public int mGunID。此时,如果不将mGunID设置为命令System.NonSerialized的话,则构建出来的ab资源包(称为资源V2)所认为的脚本hash值会变成BBB。当程序包V1尝试加载资源V2时,由于程序包V1的hash值(AAA)和资源V2的hash(BBB)无法对应,因而ab资源就无法加载。
而在该实施例中,会将成员变量mGunID和成员变量mShootEffectID做一样的处理,也即,会在构建程序包和ab资源之前,将程序包和ab资源的预设值都预先保存在自定义data文件中,然后打开代码宏HIDE_SCRIPT_DATA_IN_EDITOR,使得命令System.NonSerialized开始生效,mShootEffectID这个成员变量不纳入序列化的范畴,将成员变量mGunID确定为不被序列化,然后再构建ab资源包,此时构建出来的ab资源(称为资源V3),该脚本代码的hash值依然是AAA。
当程序包V1尝试加载资源V3时,由于程序包V1的hash值(AAA)和资源V3的hash值(AAA)一致,所以可以加载成功。在加载完之后,会从自定义data文件中,将所有保存的预设值都读取出来,再将这些预设值都还原回脚本内。
需要说明的是,上述自定义data文件包含了所有预设值,这个自定义的data文件可以由多种方式或者格式存在,此处不做限制,还可以使用别的方法替换上述命令System.NonSerialized所起到的使Unity不默认序列化的作用,此处不再一一举例说明。
通过上述方法在完全不改动开发流程的情况下,和以往一样在Unity游戏引擎的编辑器中进行制作和修改,可以在不对开发流程做任何修改的情况下,利用自定义的序列化,实现游戏程序包兼容多个ab版本资源的功能,并且达到只需修改一次,即可通用更新所有具有相同匹配标识的版本的效果,从技术层面去规避多个版本资源同时更新所遇到的风险,并且绕过了Unity游戏引擎内置的更新限制规则,使游戏资源更容易更新,一次修改便能轻松支持多个hash值一致的版本,减少了资源更新的出错率,大大降低了版本维护期间的时间成本和人力成本,准确地、稳定地更新资源的目的,并且多个版本的资源可以对应于同一个服务器,提高了资源更新的效率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例3
根据本发明实施例,还提供了一种用于实施上述资源处理方法的资源获取装置。图5是根据本发明实施例的一种资源获取装置的示意图。如图5所示,该装置可以包括:获取单元10、第一构建单元20、确定单元30和第二构建单元40。
获取单元10,用于获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联。
第一构建单元20,用于将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配。
确定单元30,用于在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同。
第二构建单元40,用于构建具有第二匹配标识的第二资源文件,其中,在目标应用调用具有与第一匹配标识相同的匹配标识的程序包时,正常加载第二资源文件。
可选地,该确定单元包括:获取模块,用于获取第二脚本,其中,第二脚本与第二资源相关联,第二资源文件由第二资源构建得到;确定模块,用于在第一条件下,确定第二脚本的匹配标识为第一匹配标识;记录模块,用于将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中。
可选地,该确定模块包括:获取子模块,用于获取第一脚本的第一成员变量和第二脚本的第二成员变量;确定子模块,用于在第一条件下,确定第二成员变量的属性为第一成员变量的属性,以将第二脚本的匹配标识确定为第一匹配标识,其中,第二成员变量的属性用于确定第二脚本的匹配标识,第一成员变量的属性用于确定第一匹配标识。
可选地,确定子模块用于在第一条件下,指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性;记录模块包括:保存子模块,用于将第二成员变量的属性保存至第二资源中。
可选地,该装置还包括:指示单元,用于在指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性之后,在编译第二脚本时,在第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间。
可选地,该装置还包括:读取单元,用于在将第二成员变量的属性保存至第二资源中之后,且在指示预设编辑器不为第二成员变量的属性分配存储空间之前,从第二资源中读取第二成员变量的属性;保存第二成员变量的属性至预设数据文件中,其中,在加载第二资源文件之后,将第二成员变量的属性从预设数据文件中还原至第二脚本中;指示单元包括:指示模块,用于在保存第二成员变量的属性至预设数据文件中之后,在第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间。
可选地,该装置还包括:第二构建单元40包括:构建模块,用于在预设编辑器不为第二成员变量的属性分配存储空间的情况下,构建第二匹配标识的第二资源文件。
可选地,上述第一成员变量和第二成员变量为公共成员变量。
需要说明的是,该实施例中的获取单元10可以用于执行本申请实施例1中的步骤S202,该实施例中的第一构建单元20可以用于执行本申请实施例1中的步骤S204,该实施例中的确定单元30可以用于执行本申请实施例1中的步骤S206,该实施例中的第二构建单元40可以用于执行本申请实施例1中的步骤S208。
该实施例通过获取单元10,用于获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;第一构建单元20,用于将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;确定单元30,用于在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;第二构建单元40,用于构建具有第二匹配标识的第二资源文件,其中,在目标应用调用具有与第一匹配标识相同的匹配标识的程序包时,正常加载第二资源文件,由于匹配标识相一致,可以使新资源加载成功,实现一个程序包兼容多个版本资源的功能,可以解决了相关技术存在资源更新效率低的技术问题,进而达到了提高资源更新效率的技术效果。
此处需要说明的是,上述模块单元和模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。其中,硬件环境包括网络环境。
实施例4
本发明实施例提供了一种资源处理系统。需要说明的是,该实施例的资源处理系统可以用于执行本发明实施例的资源处理方法。
图6是根据本发明实施例的一种资源处理系统的示意图。如图6所示,该资源处理系统包括:终端设备50和处理设备60。
终端设备50,在终端设备50上安装目标应用。
该实施例的资源处理系统可以通过引擎执行资源处理方法,该引擎可以为Unity游戏引擎,该Unity游戏引擎为用于创建三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具。资源处理系统包括终端设备50,安装有目标应用,该目标应用可以为游戏应用。
终端设备50安装的目标应用包括第一脚本和第一资源,其中,第一脚本也即脚本代码,可以为当前目标应用的所有脚本代码,以组件形式挂接在第一资源上,可以根据引擎的预设规则进行调用,用于驱动引擎的业务逻辑。第一资源也即资源对象,比如,第一资源为prefab资源。可选地,随着项目的迭代开发,上述终端设备50安装的目标应用具有多个版本的资源。
目标应用的程序包括两部分,一部分是安装在终端设备50中的程序包,该程序包包括了目标应用在运行时的可执行程序以及程序的包内资源等,另一部分是独立于程序包的资源文件,该资源文件在启动目标应用之后下载到终端设备50的硬盘上,供目标应用在运行时使用。
处理设备60,与终端设备50通信,用于获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;构建具有第二匹配标识的第二资源文件,其中,在目标应用调用具有与第一匹配标识相同的匹配标识的程序包时,正常加载第二资源文件。
在处理设备60获取目标应用的第一脚本之后,处理设备60通过引擎将第一脚本构建为第一程序包,将第一资源构建为目标格式的第一资源文件。目标格式的第一资源文件可以为Unity引擎支持的资源格式的程序包外资源,为独立于第一程序包的资源文件。在目标应用运行在终端设备50时,如果需要第一资源,则处理设备60可以将第一资源文件加载至目标应用中使用。在处理设备60将第一资源文件构建为第一资源文件时,挂接在第一资源上的第一脚本并不会跟随第一资源打包成第一资源文件,比如,Unity引擎在打包游戏ab资源时,挂接在prefab资源上的脚本代码并不会跟随prefab资源打包成ab资源。
可选地,游戏引擎会根据当前的第一脚本的序列化信息生成一个全局唯一的哈希(hash)值,然后处理设备60将这个hash值记录在第一资源文件中,这个hash值为第一程序包和第一资源文件的第一匹配标识。其中,序列化为在引擎构建第一资源文件时,根据挂载在第一资源上的第一脚本中的Public成员变量,对成员变量的预设值进行保存,序列化信息就是用于为预设值开辟存储空间以供保存的信息。
可选地,在游戏引擎提供的编辑器中,处理设备60可以直接通过编辑器来设定第一脚本的Public的值,并保存在第一资源中,其中,Public的值称为预设值。比如,在编辑器编辑变量的预设值100。
可选地,处理设备60为了使第一脚本中的Public的成员变量的预设值100能够保留下来,并在加载的时候能够恢复回去,所以在打开宏命令之前,会先读取这个第一资源里记录的预设值,并将这个预设值保存到另外一个自定义的数据(data)文件中。在保存好预设值之后,再打开宏命令,使得第一脚本中的Public的成员变量不参与序列化,然后对第一资源进行构建。通过第一脚本构建的第一程序包和通过第一资源构建的第一资源文件的hash值相同。
随着项目的迭代开发,脚本代码、资源可能会被修改,处理设备60需要更新资源,更新资源与第二资源文件相对应,第二资源文件与第一资源文件的版本不同。
在处理设备60将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件之后,在第一条件下,处理设备60将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,也即,可以为后缀为.Unity3d的资源文件。
在处理设备60将第二资源文件的第二匹配标识确定为第一匹配标识之后,然后构建第二资源文件,构建具有第二匹配标识的第二资源文件。当终端设备50上安装的目标应用在调用第一程序包时,由于第一程序包的第一匹配标识与第二资源文件的第二匹配标识相一致,因而会正常加载第二资源文件,从而在不对开发流程做任何修改的情况下,资源处理系统将第二资源文件的第二匹配标识确定为第一匹配标识,实现了一个第一程序包兼容第一资源文件和第二资源文件的功能。
需要说明的是,该实施例的上述终端设备50可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备等,此处不做限定。
该实施例的资源处理系统可以对外网同时存在的相同匹配标识的多个版本的程序包进行资源更新,且达到只需修改最新版本资源的匹配标识为之前多个版本的资源文件的匹配标识,即可通用更新所有版本的效果,大大降低了版本维护的时间成本和人力成本,稳定地、准确地进行更新资源。
实施例5
根据本发明实施例,还提供了一种用于实施上述资源处理方法的电子装置。
该电子装置包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器通过计算机程序执行本发明实施例中的资源处理方法。
图7是根据本发明实施例的一种电子装置的结构框图。如图7所示,该电子装置可以包括:一个或多个(图中仅示出一个)处理器701、存储器703。可选地,如图7所示,该电子装置还可以包括传输装置705、输入输出设备707。
其中,存储器703可用于存储软件程序以及模块,如本发明实施例中的资源处理方法和装置对应的程序指令/模块,处理器701通过运行存储在存储器703内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的资源处理方法。存储器703可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器703可进一步包括相对于处理器701远程设置的存储器,这些远程存储器可以通过网络连接至电子装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
上述的传输装置705用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置705包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置705为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
其中,具体地,存储器703用于存储应用程序。
处理器701可以通过传输装置705调用存储器703存储的应用程序,以执行下述步骤:
获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;
将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;
在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;
构建具有第二匹配标识的第二资源文件,其中,在目标应用调用具有与第一匹配标识相同的匹配标识的程序包时,正常加载第二资源文件。
处理器701还用于执行下述步骤:获取第二脚本,其中,第二脚本与第二资源相关联,第二资源文件由第二资源构建得到;在第一条件下,确定第二脚本的匹配标识为第一匹配标识;将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中。
处理器701还用于执行下述步骤:获取第一脚本的第一成员变量和第二脚本的第二成员变量;在第一条件下,确定第二成员变量的属性为第一成员变量的属性,以将第二脚本的匹配标识确定为第一匹配标识,其中,第二成员变量的属性用于确定第二脚本的匹配标识,第一成员变量的属性用于确定第一匹配标识。
处理器701还用于执行下述步骤:在第一条件下,指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性;将第二成员变量的属性保存至第二资源中。
处理器701还用于执行下述步骤:在指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性之后,在编译第二脚本时,在第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间。
处理器701还用于执行下述步骤:在将第二成员变量的属性保存至第二资源中之后,且在指示预设编辑器不为第二成员变量的属性分配存储空间之前,从第二资源中读取第二成员变量的属性;保存第二成员变量的属性至预设数据文件中,其中,在加载第二资源文件之后,将第二成员变量的属性从预设数据文件中还原至第二脚本中;在保存第二成员变量的属性至预设数据文件中之后,在第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间。
处理器701还用于执行下述步骤:在预设编辑器不为第二成员变量的属性分配存储空间的情况下,构建第二匹配标识的第二资源文件。
采用本发明实施例,提供了一种资源处理方法的方案。通过获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;构建具有第二匹配标识的第二资源文件,其中,在目标应用调用第一程序包时,正常加载第二资源文件,这样在原程序包加载新资源时,由于匹配标识相一致,可以使新资源加载成功,实现一个程序包兼容多个版本资源的功能,可以解决了相关技术存在资源更新效率低的技术问题,进而达到了提高资源更新效率的技术效果。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本领域普通技术人员可以理解,图7所示的结构仅为示意,电子装置可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图7其并不对上述电子装置的结构造成限定。例如,电子装置还可包括比图7中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图7所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令电子装置相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例6
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行资源处理方法的程序代码。
可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
获取目标应用的第一脚本和第一资源,其中,第一脚本和第一资源相关联;
将第一脚本构建为第一程序包,并将第一资源构建为目标格式的第一资源文件,其中,第一程序包和第一资源文件通过第一匹配标识相匹配;
在第一条件下,将第二资源文件的第二匹配标识确定为第一匹配标识,其中,第二资源文件的格式为目标格式,且与第一资源文件的版本不同;
构建具有第二匹配标识的第二资源文件,其中,在目标应用调用具有与第一匹配标识相同的匹配标识的程序包时,正常加载第二资源文件。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:获取第二脚本,其中,第二脚本与第二资源相关联,第二资源文件由第二资源构建得到;在第一条件下,确定第二脚本的匹配标识为第一匹配标识;将第二脚本的匹配标识作为第二匹配标识记录至第二资源文件中。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:获取第一脚本的第一成员变量和第二脚本的第二成员变量;在第一条件下,确定第二成员变量的属性为第一成员变量的属性,以将第二脚本的匹配标识确定为第一匹配标识,其中,第二成员变量的属性用于确定第二脚本的匹配标识,第一成员变量的属性用于确定第一匹配标识。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在第一条件下,指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性;将第二成员变量的属性保存至第二资源中。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在指示通过预设编辑器设定第二成员变量的属性为第一成员变量的属性之后,在编译第二脚本时,在第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在将第二成员变量的属性保存至第二资源中之后,且在指示预设编辑器不为第二成员变量的属性分配存储空间之前,从第二资源中读取第二成员变量的属性;保存第二成员变量的属性至预设数据文件中,其中,在加载第二资源文件之后,将第二成员变量的属性从预设数据文件中还原至第二脚本中;在保存第二成员变量的属性至预设数据文件中之后,在第二条件下,指示预设编辑器不为第二成员变量的属性分配存储空间。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在预设编辑器不为第二成员变量的属性分配存储空间的情况下,构建第二匹配标识的第二资源文件。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (15)

1.一种资源处理方法,其特征在于,包括:
获取目标应用的第一脚本和第一资源,其中,所述第一脚本和所述第一资源相关联;
将所述第一脚本构建为第一程序包,并将所述第一资源构建为目标格式的第一资源文件,其中,所述第一程序包和所述第一资源文件通过第一匹配标识相匹配;
在第一条件下,将第二资源文件的第二匹配标识确定为所述第一匹配标识,其中,所述第二资源文件的格式为所述目标格式,且与所述第一资源文件的版本不同;
构建具有所述第二匹配标识的所述第二资源文件,其中,在所述目标应用调用具有与所述第一匹配标识相同的匹配标识的程序包时,正常加载所述第二资源文件;
其中,所述第一条件用于指示自定义宏代码开关为关闭的情况。
2.根据权利要求1所述的方法,其特征在于,在所述第一条件下,确定所述第二资源文件的第二匹配标识为所述第一匹配标识包括:
获取第二脚本,其中,所述第二脚本与第二资源相关联,所述第二资源文件由所述第二资源构建得到;
在所述第一条件下,确定所述第二脚本的匹配标识为所述第一匹配标识;
将所述第二脚本的匹配标识作为所述第二匹配标识记录至所述第二资源文件中。
3.根据权利要求2所述的方法,其特征在于,在所述第一条件下,确定所述第二脚本的匹配标识为所述第一匹配标识包括:
获取所述第一脚本的第一成员变量和所述第二脚本的第二成员变量;
在所述第一条件下,确定所述第二成员变量的属性为所述第一成员变量的属性,以将所述第二脚本的匹配标识确定为所述第一匹配标识,其中,所述第二成员变量的属性用于确定所述第二脚本的匹配标识,所述第一成员变量的属性用于确定所述第一匹配标识。
4.根据权利要求3所述的方法,其特征在于,
在所述第一条件下,确定所述第二成员变量的属性为所述第一成员变量的属性包括:在所述第一条件下,指示通过预设编辑器设定所述第二成员变量的属性为所述第一成员变量的属性;
将所述第二脚本的匹配标识作为所述第二匹配标识记录至所述第二资源文件中包括:将所述第二成员变量的属性保存至所述第二资源中。
5.根据权利要求4所述的方法,其特征在于,在指示通过所述预设编辑器设定所述第二成员变量的属性为所述第一成员变量的属性之后,所述方法还包括:
在编译所述第二脚本时,在第二条件下,指示所述预设编辑器不为所述第二成员变量的属性分配存储空间;
其中,所述第二条件用于指示自定义宏代码开关为开启的情况。
6.根据权利要求5所述的方法,其特征在于,
在将所述第二成员变量的属性保存至所述第二资源中之后,且在指示所述预设编辑器不为所述第二成员变量的属性分配存储空间之前,所述方法还包括:从所述第二资源中读取所述第二成员变量的属性;保存所述第二成员变量的属性至预设数据文件中,其中,在加载所述第二资源文件之后,将所述第二成员变量的属性从所述预设数据文件中还原至所述第二脚本中;
在所述第二条件下,指示所述预设编辑器不为所述第二成员变量的属性分配存储空间包括:在保存所述第二成员变量的属性至所述预设数据文件中之后,在所述第二条件下,指示所述预设编辑器不为所述第二成员变量的属性分配存储空间。
7.根据权利要求6所述的方法,其特征在于,构建具有所述第二匹配标识的所述第二资源文件包括:
在所述预设编辑器不为所述第二成员变量的属性分配存储空间的情况下,构建所述第二匹配标识的所述第二资源文件。
8.根据权利要求3至7中任意一项所述的方法,其特征在于,所述第一成员变量和所述第二成员变量为公共成员变量。
9.一种资源处理装置,其特征在于,包括:
获取单元,用于获取目标应用的第一脚本和第一资源,其中,所述第一脚本和所述第一资源相关联;
第一构建单元,用于将所述第一脚本构建为第一程序包,并将所述第一资源构建为目标格式的第一资源文件,其中,所述第一程序包和所述第一资源文件通过第一匹配标识相匹配;
确定单元,用于在第一条件下,将第二资源文件的第二匹配标识确定为所述第一匹配标识,其中,所述第二资源文件的格式为所述目标格式,且与所述第一资源文件的版本不同;
第二构建单元,用于构建具有所述第二匹配标识的所述第二资源文件,其中,在所述目标应用调用具有与所述第一匹配标识相同的匹配标识的程序包时,正常加载所述第二资源文件;
其中,所述第一条件用于指示自定义宏代码开关为关闭的情况。
10.根据权利要求9所述的装置,其特征在于,所述确定单元包括:
获取模块,用于获取第二脚本,其中,所述第二脚本与第二资源相关联,所述第二资源文件由所述第二资源构建得到;
确定模块,用于在所述第一条件下,确定所述第二脚本的匹配标识为所述第一匹配标识;
记录模块,用于将所述第二脚本的匹配标识作为所述第二匹配标识记录至所述第二资源文件中。
11.根据权利要求10所述的装置,其特征在于,所述确定模块包括:
获取子模块,用于获取所述第一脚本的第一成员变量和所述第二脚本的第二成员变量;
确定子模块,用于在所述第一条件下,确定所述第二成员变量的属性为所述第一成员变量的属性,以将所述第二脚本的匹配标识确定为所述第一匹配标识,其中,所述第二成员变量的属性用于确定所述第二脚本的匹配标识,所述第一成员变量的属性用于确定所述第一匹配标识。
12.根据权利要求11所述的装置,其特征在于,
确定子模块用于在所述第一条件下,指示通过预设编辑器设定所述第二成员变量的属性为所述第一成员变量的属性;
所述记录模块包括:保存子模块,用于将所述第二成员变量的属性保存至所述第二资源中。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
指示单元,用于在指示通过所述预设编辑器设定所述第二成员变量的属性为所述第一成员变量的属性之后,在编译所述第二脚本时,在第二条件下,指示所述预设编辑器不为所述第二成员变量的属性分配存储空间;
其中,所述第二条件用于指示自定义宏代码开关为开启的情况。
14.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至8中任一项中所述的资源处理方法。
15.一种电子装置,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器通过所述计算机程序执行上述权利要求1至8中任一项中所述的资源处理方法。
CN201710644682.3A 2017-07-31 2017-07-31 资源处理方法、装置、存储介质和电子装置 Active CN107436787B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710644682.3A CN107436787B (zh) 2017-07-31 2017-07-31 资源处理方法、装置、存储介质和电子装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710644682.3A CN107436787B (zh) 2017-07-31 2017-07-31 资源处理方法、装置、存储介质和电子装置

Publications (2)

Publication Number Publication Date
CN107436787A CN107436787A (zh) 2017-12-05
CN107436787B true CN107436787B (zh) 2018-05-22

Family

ID=60460960

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710644682.3A Active CN107436787B (zh) 2017-07-31 2017-07-31 资源处理方法、装置、存储介质和电子装置

Country Status (1)

Country Link
CN (1) CN107436787B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108304178B (zh) * 2018-01-17 2021-03-30 珠海金山网络游戏科技有限公司 一种基于Unity3D的数据集引用方法及系统
CN109032631B (zh) * 2018-07-12 2020-12-18 腾讯科技(深圳)有限公司 应用程序补丁包获取方法、装置、计算机设备及存储介质
CN110152299B (zh) * 2018-11-22 2022-01-14 腾讯科技(深圳)有限公司 一种游戏资源的构建方法和装置
CN109840091A (zh) * 2018-12-12 2019-06-04 珠海西山居互动娱乐科技有限公司 一种基于Unity手游的资源动态替换出包的方法及其装置
CN110782525B (zh) * 2019-11-08 2023-04-25 腾讯科技(深圳)有限公司 对虚拟环境中的虚拟物体进行标识的方法、装置及介质
CN111061505B (zh) * 2019-11-29 2021-12-07 珠海金山网络游戏科技有限公司 基于机器学习的优化打ab包方法
CN111596935A (zh) * 2020-04-27 2020-08-28 五八有限公司 一种脚本打包方法、装置、电子设备及存储介质
CN111569427B (zh) * 2020-06-10 2023-04-25 网易(杭州)网络有限公司 资源的处理方法、装置、存储介质和电子装置
CN116107667B (zh) * 2023-04-13 2023-08-11 瞳见科技有限公司 一种基于虚幻引擎的模型管理方法、系统、终端及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103744673A (zh) * 2014-01-06 2014-04-23 北京乐动卓越科技有限公司 一种基于iOS平台的资源配置方法
CN105159188A (zh) * 2015-08-14 2015-12-16 广州智维电子科技有限公司 一种新能源整车异构网络仿真器及控制方法
CN106354647A (zh) * 2016-08-31 2017-01-25 腾讯科技(深圳)有限公司 一种应用检测方法及服务器

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103473173B (zh) * 2013-09-10 2016-03-09 成都品果科技有限公司 一种对iOS系统进行汇编级动态调试的方法及装置
CN105718279B (zh) * 2014-12-04 2019-12-03 Tcl集团股份有限公司 基于Firefox OS应用的生成方法及装置
CN104965764A (zh) * 2015-06-02 2015-10-07 百度在线网络技术(北京)有限公司 静态资源的处理方法及装置
CN106293675B (zh) * 2015-06-08 2020-12-25 腾讯科技(深圳)有限公司 系统静态资源加载方法及装置
CN105373396B (zh) * 2015-08-14 2018-01-05 腾讯科技(深圳)有限公司 插件平台中的插件更新加载方法和装置
CN105159788B (zh) * 2015-09-11 2020-10-27 Tcl科技集团股份有限公司 一种Android应用间动态共享资源的方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103744673A (zh) * 2014-01-06 2014-04-23 北京乐动卓越科技有限公司 一种基于iOS平台的资源配置方法
CN105159188A (zh) * 2015-08-14 2015-12-16 广州智维电子科技有限公司 一种新能源整车异构网络仿真器及控制方法
CN106354647A (zh) * 2016-08-31 2017-01-25 腾讯科技(深圳)有限公司 一种应用检测方法及服务器

Also Published As

Publication number Publication date
CN107436787A (zh) 2017-12-05

Similar Documents

Publication Publication Date Title
CN107436787B (zh) 资源处理方法、装置、存储介质和电子装置
CN102725733B (zh) 在平台之间移植虚拟机映像
CN105335253B (zh) 创建虚拟机系统盘快照的方法和装置
EP2333661B1 (en) Firmware update apparatus and program
CN105631337B (zh) 控制机器代码的本机图像访问操作系统资源的系统及方法
CN104598274B (zh) 一种自动插桩编译安装方法及系统
CN103559065B (zh) 一种ota升级的方法和系统
CN106502746A (zh) 应用程序的打包方法及装置
CN106802817A (zh) SQLite数据库的升级方法及装置
CN107545182B (zh) 一种ios应用中绕过函数调用链检测的方法及系统
CN108415821A (zh) 测试报告的生成方法及装置
CN104834541B (zh) 功能模块挂载方法、挂载系统及更新挂载系统的方法
CN107391219B (zh) 函数编译方法和装置
CN109408393A (zh) 应用测试方法、装置及设备和计算机可读存储介质
CN106960140A (zh) 虚拟机指令的混淆方法及装置、虚拟机保护系统
CN106101984A (zh) 一种nfc移动支付终端的安全模块管理方法及终端
CN103853535A (zh) 修改中间件的方法和装置
CN107592338A (zh) 一种动态库的更新系统、方法和相关设备
CN104679900A (zh) 一种应用程序搜索方法及装置
CN109960538A (zh) 一种配置界面管理方法、配置界面管理装置及电子设备
CN107797823A (zh) 业务规则管理方法、装置、存储介质和计算机设备
CN112015408A (zh) 组件渲染方法、装置、存储介质及电子装置
CN109739526A (zh) 代码更新方法和装置
CN109857432A (zh) 一种游戏应用的热更新方法和装置
CN108089870A (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