CN111984300A - 代码复制方法及装置、电子设备和计算机可读存储介质 - Google Patents
代码复制方法及装置、电子设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN111984300A CN111984300A CN202010936308.2A CN202010936308A CN111984300A CN 111984300 A CN111984300 A CN 111984300A CN 202010936308 A CN202010936308 A CN 202010936308A CN 111984300 A CN111984300 A CN 111984300A
- Authority
- CN
- China
- Prior art keywords
- target
- initial
- code
- module file
- resource
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 60
- 238000004458 analytical method Methods 0.000 claims description 42
- 230000006870 function Effects 0.000 claims description 32
- 230000010076 replication Effects 0.000 claims description 26
- 238000013507 mapping Methods 0.000 claims description 25
- 238000012986 modification Methods 0.000 claims description 14
- 230000004048 modification Effects 0.000 claims description 14
- 230000008859 change Effects 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 11
- 238000011161 development Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 14
- 238000012545 processing Methods 0.000 description 8
- 108010001267 Protein Subunits Proteins 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 102000002067 Protein Subunits Human genes 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开是关于一种代码复制方法及装置、电子设备以及计算机可读存储介质,涉及软件开发技术领域,可以应用于对已开发完成的旧版本代码进行复制操作的场景。该代码复制方法包括:获取初始模块文件;其中,初始模块文件包括初始代码以及初始资源;针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;对初始代码进行复制操作,生成中间代码,并对中间代码进行改名操作,以生成目标代码;获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。本公开可以解决代码复制过程中可能出现的命名冲突问题和资源引用问题。
Description
技术领域
本公开涉及软件开发技术领域,具体而言,涉及一种代码复制方法、代码复制装置、电子设备以及计算机可读存储介质。
背景技术
在游戏开发中,有时可能需要基于某些旧版本代码制作新的功能逻辑。当旧版本的代码已经能够稳定运行,但却难以维护和修改时,可以拷贝旧的功能模块代码,在复制得到的代码基础上进行修改。采用这种方式进行代码开发,可以避免修改到后续的功能逻辑,给旧版本的模块引入新的错误(bug)。
在基于Unity3D游戏开发工具进行游戏开发时,由于Unity开发工程中可以包括图片资源、代码资源、预制资源等多种类型的资源,因此,在复制一个功能模块时,需要将功能模块中涉及到的各类资源都进行复制操作。
由于资源之间可能存在相互引用关系,另外,由于代码中可能存在类的重名问题,因此,在进行复制操作时,还需解决上述可能存在的问题以避免资源复制操作时可能造成的问题。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种代码复制方法、代码复制装置、电子设备以及计算机可读存储介质,进而至少在一定程度上克服代码复制过程中可能出现的命名冲突和资源之间相互引用的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。
根据本公开的第一方面,提供一种代码复制方法,包括:获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源;针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源;对中间代码进行改名操作,以生成目标代码;获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。
可选的,针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置,包括:读取初始配置文件;其中,初始配置文件包括初始模块文件的初始目录路径、目标目录路径和名称映射关系;根据初始目录路径获取初始模块文件的原始名称,并根据原始名称和名称映射关系确定目标模块文件的目标名称;根据目标名称和目标目录路径生成目标模块文件的目标存储路径;针对初始模块文件执行复制操作以得到目标模块文件,并按照目标存储路径将目标模块文件存储至目标存储位置。
可选的,针对初始模块文件执行复制操作以得到目标模块文件,包括:确定初始模块文件对应的资源类型;根据资源类型确定与初始模块文件对应的目标复制操作;针对初始模块文件执行目标复制操作,以得到目标模块文件。
可选的,若资源类型为图片类型,针对初始模块文件执行目标复制操作,以得到目标模块文件,包括:确定初始模块文件中的待复制图片,并获取待复制图片的图片属性;针对待复制图片执行复制操作,得到目标图片;将待复制图片的图片属性添加至目标图片;目标模块文件包括目标图片。
可选的,对中间代码进行改名操作,以生成目标代码,包括:对中间代码进行代码分析,得到中间代码的初始语法分析树;根据初始语法分析树确定中间代码的初始对象名称,并获取初始对象名称对应的目标对象名称;采用目标对象名称替换初始语法分析树中的初始对象名称,以生成目标语法分析树,并根据目标语法分析树生成目标代码。
可选的,获取初始模块文件与目标模块文件之间的标识符对照列表,包括:获取初始模块文件的初始存储路径,并根据初始存储路径生成初始模块文件中初始资源对应的初始资源标识符;根据目标存储位置确定目标存储路径,并根据目标存储路径生成目标模块文件中目标资源对应的目标资源标识符;根据初始资源标识符和目标资源标识符生成标识符对照列表。
可选的,目标资源包括预制体资源,根据标识符对照列表对目标资源执行重绑定操作,包括:从标识符对照列表中获取预制体资源的预制体标识符信息;其中,预制体标识符信息包括预制体资源对应的初始预制体标识符、预制体资源对应的目标预制体标识符以及标识符映射关系;通过标识符替换函数并采用目标预制体标识符替换初始预制体标识符,以执行重绑定操作。
根据本公开的第二方面,提供一种代码复制装置,包括:资源文件获取模块,用于获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源;资源文件复制模块,用于针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源;命名修改模块,用于对中间代码进行改名操作,以生成目标代码;重绑定模块,用于获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。
可选的,资源文件复制模块包括资源文件复制单元,用于读取初始配置文件;其中,初始配置文件包括初始模块文件的初始目录路径、目标目录路径和名称映射关系;根据初始目录路径获取初始模块文件的原始名称,并根据原始名称和名称映射关系确定目标模块文件的目标名称;根据目标名称和目标目录路径生成目标模块文件的目标存储路径;针对初始模块文件执行复制操作以得到目标模块文件,并按照目标存储路径将目标模块文件存储至目标存储位置。
可选的,资源文件复制单元包括文件复制子单元,确定初始模块文件对应的资源类型;根据资源类型确定与初始模块文件对应的目标复制操作;针对初始模块文件执行目标复制操作,以得到目标模块文件。
可选的,文件复制子单元包括图片复制子单元,用于确定初始模块文件中的待复制图片,并获取待复制图片的图片属性;针对待复制图片执行复制操作,得到目标图片;将待复制图片的图片属性添加至目标图片;目标模块文件包括目标图片。
可选的,命名修改模块包括命名修改单元,用于对中间代码进行代码分析,得到中间代码的初始语法分析树;根据初始语法分析树确定中间代码的初始对象名称,并获取初始对象名称对应的目标对象名称;采用目标对象名称替换初始语法分析树中的初始对象名称,以生成目标语法分析树,并根据目标语法分析树生成目标代码。
可选的,命名修改模块包括标识符列表确定单元,用于获取初始模块文件的初始存储路径,并根据初始存储路径生成初始模块文件中初始资源对应的初始资源标识符;根据目标存储位置确定目标存储路径,并根据目标存储路径生成目标模块文件中目标资源对应的目标资源标识符;根据初始资源标识符和目标资源标识符生成标识符对照列表。
可选的,重绑定模块包括重绑定单元,用于从标识符对照列表中获取预制体资源的预制体标识符信息;其中,预制体标识符信息包括预制体资源对应的初始预制体标识符、预制体资源对应的目标预制体标识符以及标识符映射关系;通过标识符替换函数并采用目标预制体标识符替换初始预制体标识符,以执行重绑定操作。
根据本公开的第三方面,提供一种电子设备,包括:处理器;以及存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据上述任意一项所述的代码复制方法。
根据本公开的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据上述任意一项所述的代码复制方法。
本公开提供的技术方案可以包括以下有益效果:
本公开的示例性实施例中的代码复制方法,获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源;针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源;对中间代码进行改名操作,以生成目标代码;获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。一方面,根据标识符对照列表进行改名操作和资源重绑定操作,可以解决采用现有技术进行代码或资源复制时产生的人工工作量大的问题,可以减少大量的工作时间,提高代码复制效率。另一方面,通过对中间代码执行改名操作,极大程度上避免了开发者需要手动修改代码的操作,可以有效避免由于人工操作造成的误操作和漏操作,提高了代码复制的准确性。再一方面,根据标识符对照列表执行重绑定操作,无需开发者了解资源数据所在的功能模块,降低了开发门槛,降低了开发难度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示意性示出了根据本公开的示例性实施方式的代码复制方法的流程图;
图2示意性示出了根据本公开的示例性实施方式的复制并存储目标模块文件的流程图;
图3示意性示出了根据本公开的示例性实施方式的执行代码复制操作的基类的类图;
图4示意性示出了根据本公开的示例性实施方式的根据资源文件的资源类型确定对应的复制操作的流程图;
图5示意性示出了根据本公开的示例性实施方式的对中间代码执行改名操作的流程图;
图6示意性示出了根据本公开的示例性实施方式的生成标识符对照列表的流程图;
图7示意性示出了根据本公开的示例性实施方式的对目标资源进行重绑定操作的流程图;
图8示意性示出了根据本公开的示例性实施方式的代码复制装置的方框图;
图9示意性示出了根据本公开一示例性实施例的电子设备的框图;
图10示意性示出了根据本公开一示例性实施例的计算机可读存储介质的示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而没有所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现、材料或者操作以避免模糊本公开的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个软件硬化的模块中实现这些功能实体或功能实体的一部分,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
在游戏开发中,有时可能需要基于某些旧版本代码制作新的功能逻辑。当旧版本的代码已经能够稳定运行,但却难以维护和修改时,可以拷贝旧的功能模块代码,在复制得到的代码基础上进行修改。采用这种方式进行代码开发,可以避免修改到后续的功能逻辑,避免给旧版本的模块引入新的错误(bug)。在基于Unity3D游戏开发工具进行游戏开发时,Unity中的资源可能包括图片、代码、预制体等多种类型的资源,在复制一个功能模块时,需要将功能模块中涉及到的各类资源都进行复制。然而采用现有的代码复制方法可能产生下述问题。
一是由于资源之间可能存在相互引用关系。比如,预制体可能引用代码,这导致复制出来的新预制体继续引用老的代码。而预制体中的代码又可能引用图片资源,也将产生类似的问题。例如,在A代码中,可能引用了全局唯一标识符(Globally UniqueIdentifier,GUID)为001的图片B。如果只是进行简单的复制,那么得到的代码A’的GUID引用还是GUID为001的图片B,而不是新复制出来的GUID为另一个的图片B’。另外一个就是类的重名问题。同一个C#模块,不允许在同一个命名空间中出现名字相同的两个类。如果只是简单的复制,将可能导致产生冲突,进而导致无法编译。
首先,在解决代码的命名冲突问题时,需要逐一打开各个文件,然后使用编辑器的“全局替换”功能,把其中的类名或者命名空间名替换成新的版本。其次,打开预制体,删除预制体与旧版本代码之间的绑定,然后找到新版本的代码,并绑定上去。再次,由于复制得到的新的预制体中的代码可能绑定原功能中的图片或者其他预制体,因此,同样需要将其与新版本的图片和预制体重新绑定。同时,由于新的代码是重新被绑定到预制体中的,所以原有的预设字段都会消失,这需要开发者把各种预设字段都还原到与原来相同。
上述提到的复制之后的步骤,每一步均需要耗费巨大的人力。例如,在第一步中,如果代码繁多复杂,且代码之间有相互引用的问题,那么开发者对于存在的n个类,可能最多需要进行重命名操作O(n2)次。每次修改完之后都需要使用编译器对其重新编译,才能发现隐藏的错误。然后再去修改这些隐藏的错误,再编译检查,周而复始。尽管如此,还是有很大的可能性出现改漏或者改错的情况,导致功能出现问题或者根本无法运行。
在第二步中,需要打开新的预制体,删除对旧代码的引用,并增加对新代码的引用。同样这里也不是简单地将引用代码删除,由于有些代码属于公用模块,不需要重新绑定,因此需要开发者对原有的功能有一定的认识,提高了开发门槛。
第三步中需要改变预制体的引用代码对资源的绑定。开发者常需要对照原功能的预制体,逐个将新资源拖进预制体。由于预制体对资源的引用是常事,预制体中一个模块可能就会引用好几个资源,导致开发者的工作量特别大。同时,预制体中代码的预设字段可能也会非常的多,这使得开发者的工作量进一步增多。
基于此,在本示例实施例中,首先提供了一种代码复制方法,可以利用服务器来实现本公开的用代码复制方法,也可以利用终端设备来实现本公开所述的方法,其中,本公开中描述的终端可以包括诸如笔记本电脑、掌上电脑等移动终端,以及诸如台式计算机等固定终端;并且,服务器和终端设备需预先安装游戏开发引擎,诸如Unity等游戏开发引擎。图1示意性示出了根据本公开的一些实施例的代码复制方法流程的示意图。参考图1,该代码复制方法可以包括以下步骤:
步骤S110,获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源。
步骤S120,针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源。
步骤S130,对中间代码进行改名操作,以生成目标代码。
步骤S140,获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。
根据本示例实施例中的代码复制方法,一方面,根据标识符对照列表进行改名操作和资源重绑定操作,可以解决采用现有技术进行代码或资源复制时产生的人工工作量大的问题,可以减少大量的工作时间,提高代码复制效率。另一方面,通过对中间代码执行改名操作,极大程度上避免了开发者需要手动修改代码的操作,可以有效避免由于人工操作造成的误操作和漏操作,提高了代码复制的准确性。再一方面,根据标识符对照列表执行重绑定操作,无需开发者了解资源数据所在的功能模块,降低了开发门槛,降低了开发难度。
下面,将对本示例实施例中的代码复制方法进行进一步的说明。
在步骤S110中,获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源。
在本公开的一些示例性实施方式中,初始模块文件可以是现有的代码功能模块中包含的各类资源文件。初始代码可以是功能模块中包含的代码段。初始资源可以是与初始代码对应的资源文件,初始代码和初始资源共同构成特定的功能模块。例如,在一个Unity开发工程中,初始资源可以包括图片资源、预制体资源等;其中,预制体资源可以把一个界面以文本或二进制的形式保存下来。在游戏进行的过程中,引擎可以读入这些预制,也就是用户界面(User Interface,UI)配置,从而生成UI界面。预制体可以引用图片、脚本代码等资源的标识符GUID,以使用这些资源。
在代码开发过程中,在进行代码拷贝之前,可以先确定并获取需要进行复制操作的初始模块文件,初始模块文件可以包括初始代码,图片、预制体等资源数据等。例如,可以在代码复制之前,针对旧版本功能模块中的资源文件添加对应的配置文件,配置文件中包括了功能模块中需要被复制的资源。
在步骤S120中,针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源。
在本公开的一些示例性实施方式中,复制操作可以是针对初始代码和初始资源分别进行的复制操作。目标模块文件可以是对初始代码和初始资源执行复制操作后得到的资源文件。目标模块文件可以包括中间代码以及目标资源;其中,对初始代码执行复制操作可以得到对应的中间代码,复制初始资源后得到对应的目标资源。即,资源文件可以包括代码段和资源;资源可以包括预制体和图片等。具体的,中间代码中的代码内容与初始代码中的代码内容相同,两者的存储位置不同,在后续操作中,可以对中间代码进行重命名操作,以得到目标代码。目标存储位置可以是目标模块文件所处的存储位置。
在确定出初始代码和初始资源后,可以复制初始代码以及初始资源,并将复制得到的目标模块文件存储至目标存储位置。
根据本公开的一些示例性实施例,读取初始配置文件;其中,初始配置文件包括初始模块文件的初始目录路径、目标目录路径和名称映射关系;根据初始目录路径获取初始模块文件的原始名称,并根据原始名称和名称映射关系确定目标模块文件的目标名称;根据目标名称和目标目录路径生成目标模块文件的目标存储路径;针对初始模块文件执行复制操作以得到目标模块文件,并按照目标存储路径将目标模块文件存储至目标存储位置。初始配置文件可以是针对初始模块文件执行复制操作时所使用的配置文件。初始目录路径可以是初始模块文件对应的目录路径。目标目录路径可以是得到的目标模块文件对应的目录路径。名称映射关系可以是初始模块文件与目标模块文件之间对应的文件命名映射规则。原始名称可以是初始模块文件对应的文件名称。目标名称可以是目标模块文件对应的文件名称。目标存储路径可以是目标模块文件的完整存储路径。
参考图2,图2示意性示出了根据本公开的示例性实施方式的复制并存储目标模块文件的流程图。在步骤S210中,在对初始模块文件进行复制操作之前,可以先获取初始模块文件的初始配置文件,开发者可以在初始配置文件中配置初始目录路径、目标目录路径和名称映射关系等字段。例如,在Unity开发工程中,可以采用抽象函数GetConfigPath()读入配置文件的目录,这个虚函数要求派生类必须重写,返回派生类所负责的复制业务所使用的配置路径。配置文件可以采用JS对象简谱(JavaScript Object Notation,JSON)格式保存。在获取到配置文件后,可以通过基类CopierBase控制初始模块文件的复制(拷贝)过程。参考图3,图3示意性示出了根据本公开的示例性实施方式的执行代码复制操作的基类的类图。基类CopierBase中的字段可以包括:用于保存初始模块文件的初始目录路径的字段m_resSrcPathList;用于保存目标模块文件的目标目录路径m_resDstPathList,并且目标目录路径的数量与初始目录路径的数量相等;以及用于存储初始模块文件与目标模块文件之间名称映射关系的字段m_resNameMap。
在步骤S220中,根据初始目录路径可以获取到初始模块文件的原始名称,在获取到原始名称之后,通过参照名称映射关系,可以得到目标模块文件对应的目标名称。举例而言,在基于基类CopierBase对初始模块文件进行复制操作时,可以先遍历m_resSrcPathList中的每个文件夹,找到其中所有的文件,使用GetResPostfix()这个函数返回的文件后缀以过滤得到对应的原始资源文件的原始名称,具体的,文件后缀可以包括图片类型文件对应的后缀“*.png”、代码类型文件对应的后缀“*cs”、预制体类型文件对应的后缀“*prefab”等。得到原始名称之后,可以获取m_resNameMap中存储的初始模块文件与目标模块文件的名称映射关系,按照名称映射关系更改资源名称,以得到对应的目标名称,需要注意的是,如果m_resNameMap为空字典,则目标名称与原始名称相同。
另外,Copy()函数是派生类不可重写的函数;OutputGUID可以用于输出模块文件中资源的GUID,GetGUIDOutputPath()可以用于获取资源GUID的路径。
在步骤S230中,在确定出目标名称之后,可以根据目标名称和目标目录路径生成目标存储路径。例如,可以获取目标模块文件对应的目标目录路径,将目标模块文件的目标目录路径与目标名称进行拼接,得到目标存储路径。
在步骤S240中,在确定出目标存储路径后,可以对初始模块文件执行复制操作,按照目标存储路径将得到目标模块文件存储至目标存储位置。举例而言,在Unity平台中,可以采用Unity提供的AssetDatabase.CopyAsset(src,dst)方法,传入参数原始存储路径和目标存储路径,拷贝目标模块文件旧资源至目标存储位置。
根据本公开的一些示例性实施例,确定初始模块文件对应的资源类型;根据资源类型确定与初始模块文件对应的目标复制操作;针对初始模块文件执行目标复制操作,以得到目标模块文件。资源类型可以是初始模块文件中不同文件分别对应的类型,例如,资源类型可以包括图片类型、代码类型和预制体类型等。资源类型可以是初始模块文件对应的资源类型。目标复制操作可以是根据资源类型确定出的与初始模块文件的对应的复制操作,不同资源类型的初始模块文件可以对应不同的复制操作。
由于初始模块文件包括多种不同的资源类型,因此,可以根据不同资源类型调用对应的派生函数执行对应资源类型的初始模块文件。参考图3,根据不同的资源类型可以根据基类CopierBase派生出针对不同资源类型执行复制操作的复制函数,例如,基于基类CopierBase得到的派生类可以包括CopierPng类、CopierCode类、CopierPrefab类;具体的,CopierPng类可以用于拷贝便携式网络图形(Portable Network Graphics,PNG)类型的图片;CopierCode类可以用于拷贝代码文件;CopierPrefab类可以用于拷贝预制体资源。由于图片可以包括多种不同的图片格式,因此,可以根据不同的图片格式定义对应的图片复制函数。
需要说明的是,由于初始模块文件中也可以包括其他资源类型的文件,如视频、音频等,因此,可以基于基类并根据具体的资源类型派生出对应的复制函数,以执行对该资源类型的初始模块文件的复制操作,本公开对此不作任何特殊限定。
在派生类可以基于基类继承,由于本方案中提供的基类CopierBase类可以实现主要的复制流程,因此基类将实现几个必要的函数,基类所要实现的必要的函数包括:GetConfigPath(),可以负责返回初始配置文件的路径;GetResPostfix(),可以返回所负责拷贝的初始模块文件的后缀名,例如,调用CopierPng类复制资源文件返回png,调用CopierCode类复制资源文件返回cs,调用CopierPrefab类复制资源文件返回prefab和scene等。
参考图4,图4示意性示出了根据本公开的示例性实施方式的根据资源文件的资源类型确定对应复制操作的流程图。在步骤S410中,由于初始模块文件中可以包括代码类资源、图片类资源、预制体类资源,因此在复制初始模块文件之前,可以先确定初始模块文件的资源类型。在步骤S420中,在确定出初始模块文件对应的资源类型后,可以根据资源类型确定出与之对应的目标复制操作。举例而言,当资源类型为代码类型时,则可以确定与用于复制代码类型文件的类,即CopierCode类。在步骤S430中,在确定出与目标模块文件对应的目标复制操作后,可以针对初始模块文件执行目标复制操作,以得到目标模块文件。例如,当资源类型为代码类型时,可以通过调用CopierCode类执行与代码文件对应的目标复制操作,以得到对应的目标代码。
根据本公开的另一示例性实施例,确定初始模块文件中的待复制图片,并获取待复制图片的图片属性;针对待复制图片执行复制操作,得到目标图片;将待复制图片的图片属性添加至目标图片;目标模块文件包括目标图片。待复制图片可以是待执行复制操作的图片资源。图片属性可以是待复制图片自身具有的属性,例如,图片属性可以包括待复制图片的图集属性、九宫格属性等。
本公开中的基类CopierBase还可以实现OnCopy()函数,此函数在某个资源被拷贝后被调用,派生类可以根据自身需求实现一些自定义的操作,以实现自定义的效果。例如,当对图片资源执行复制操作时,在CopierPng类中,除了拷贝PNG图片文件以外,还可以通过调用OnCopy()函数复制定义于源资源中的图集和九宫格等属性。具体的,图集属性可以用于将多张图片合成到一张大图中,用于提高渲染的效率。九宫格属性可以通过定义图片的边界来控制图片拉伸时的可拉伸区域,使得图片被拉伸的时候边缘不被拉伸变形。通过复制待复制图片和图片属性,可以得到目标图片以及对应的图片属性,将目标图片和图片属性作为目标模块文件。
另外,对于一些纹理资源的属性需要通过Unity中的应用程序接口(ApplicationProgramming Interface,API)实现,例如,可以通过TextureImporter类和Sprite类复制纹理资源的属性,具体的,针对图片进行复制操作的部分代码如下。
//分别获取到原始图片和目标图片分别对应的TextureImporter
TextureImporter importerFrom=AssetImporter.GetAtPath(pathFromTo.FromWhere)as TextureImporter;
TextureImporter importerTo=AssetImporter.GetAtPath(pathFromTo.ToWhere)as TextureImporter;
//判断两个图片是否都存在,若不存在则不执行下一步操作
if(importerFrom==null||importerTo==null)
{
Debug.LogError(string.Format("One of the png files may not exsit:{0},{1}",pathFromTo.FromWhere,pathFromTo.ToWhere));
return;
}
//获取到目标图片的图片精灵信息
Sprite spriteTo=AssetDatabase.LoadAssetAtPath<Sprite>(pathFromTo.ToWhere);
//更新目标图片的九宫格信息
importerTo.spriteBorder=importerFrom.spriteBorder;
//更新目标图片的图集信息
importerTo.spritePackingTag=importerFrom.spritePackingTag;
//设置目标图片为需要更新的状态
EditorUtility.SetDirty(spriteTo);
//保存目标图片信息并刷新
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
上述代码中,首先新建原始资源和目标资源分别对应的importer,从原始图片资源复制九宫格属性和图集属性到目标图片资源,再把新资源的资源设置为dirty,并调用AssetDatabase.SaveAssets()和AssetDatabase.Refresh()来保存和刷新资源。
在步骤S130中,对中间代码进行改名操作,以生成目标代码。
在本公开的一些示例性实施方式中,中间代码可以是对初始代码进行复制操作,且未进行改名操作之前的代码段。目标代码可以是对中间代码执行改名操作之后得到的代码段。改名操作可以是针对中间代码中的相关对象名称进行的修改操作。
根据本公开的一些示例性实施例,对中间代码进行代码分析,得到中间代码的初始语法分析树;根据初始语法分析树确定中间代码的初始对象名称,并获取初始对象名称对应的目标对象名称;采用目标对象名称替换初始语法分析树中的初始对象名称,以生成目标语法分析树,并根据目标语法分析树生成目标代码。代码分析可以是针对中间代码进行的代码结构分析过程。初始语法分析树是对中间代码进行代码分析后得到的与其对应的语法分析树。初始对象名称可以是初始代码中的代码元素对应的名称,例如,初始对象名称可以包括初始代码中包含的命名空间名称、类名、变量名等。目标对象名称可以是目标代码中的代码元素对应的名称,例如,目标对象名称可以包括目标代码中包含的命名空间名称、类名、变量名等。目标语法分析树是对目标代码进行代码分析后得到的与目标代码对应的语法分析树。
在对初始代码执行复制操作得到中间代码后,可以对得到的中间代码进行命名修改处理,以避免可能产生的命名冲突问题。具体的,对中间代码进行命名修改处理可以通过以下步骤进行。参考图5,图5示意性示出了根据本公开的示例性实施方式的对目标代码执行改名操作的流程图。在步骤S510中,对中间代码进行代码分析,得到中间代码对应的初始语法分析树。在步骤S520中,根据初始语法分析树可以得到中间代码对应的初始对象名称,即初始代码中包含的命名空间名称、类名、变量名等,并确定出目标代码对应的目标对象名称,即目标代码中包含的命名空间名称、类名和变量名。在步骤S530中,采用目标代码对应的目标对象名称替换掉中间代码对应的初始对象名称,以进行针对目标代码的改名操作。在完成针对目标代码的改名操作后,可以输出经过改名操作后的目标代码对应的目标语法分析树,并根据目标语法分析树生成目标代码。
举例而言,在Unity开发工程中,可以采用Roslyn编译器,Roslyn编译器是一种微软公司开发的C SHARP(即C#)语言语法分析工具。它能够载入一份C#文件或者直接载入整个C#工程,并输出这些C#文件或工程的抽象语法树。此外,Roslyn编译器还提供了一些简便的方法,让使用者可以方便地修改C#代码中的特定内容,比如修改类的名称、变量的名称、命名空间的名称。具体的,在从C#文件中载入文本形式的数据之后,即可使用Roslyn编译器的API生成语法分析树和CompilationUnitSyntax,Roslyn编译器的API生成语法分析树和CompilationUnitSyntax的代码如下。
SyntaxTree tree=CSharpSyntaxTree.ParseText(programText);
CompilationUnitSyntax root=tree.GetCompilationUnitRoot();
Roslyn编译器中用于分析C#代码的基类是CSharpSyntaxWalker,本公开可以新建一个类IdentifierNameSyntaxWalker继承该基类,并重写VisitIdentifierName方法,该方法在遍历到对象名称(identifier)时将被调用。Identifer不仅可以包括类名和命名空间名称,还包括了其他标识符比如变量名的名称。另外,CSharpSyntaxWalker的VisitIdentifierName方法需要一个CompilationUnitSyntax类型的参数,可以将上述生成的CompilationUnitSyntax传入至VisitIdentifierName方法中,具体代码如下。
public override void VisitIdentifierName(IdentifierNameSyntax node)
{
base.VisitIdentifierName(node);
IdentifierNameSyntaxList.Add(node);
}
采用上述方法,每遍历到一个identifier均可以将其加入到列表IdentifierNameSyntaxList中。调用CSharpSyntaxWalker的VisitIdentifierName方法之后,所有的identifier都可以加入到IdentifierNameSyntaxList中,此时再遍历这个列表,将得到所有的identifier的名字,然后输出到逗号分隔值(Comma-Separated Values,CSV)文件即可,输出的格式是“名称,New+名称”。由于CSV文件是采用逗号做分隔符的,因此把输出文件的后缀名改成CSV即可,编辑的时候可以使用Office或者文字编辑***(WordProcessing System,WPS)等软件打开。开发者可以通过软件编辑CSV文件。CSV文件的第二列代表在新代码中命名空间、类以及变量的每个名字对应的新版本,开发者可以根据开发需求修改CSV文件,否则CSV文件仍将维持“New+原名称”的形式。
根据CSV文件可以再次遍历关于代码的GUID表,得到所有新代码的路径。采用Roslyn编辑器定位到所有的类和命名空间,并进行替换;然后执行cs代码输出命令,重新输出抽象语法树,并根据新生成的抽象语法树生成目标代码。
在步骤S140中,获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。
在本公开的一些示例性实施方式中,标识符对照列表可以是初始模块文件对应的GUID与目标模块文件对应的GUID的对照表。重绑定操作是将复制得到的预制体资源重新绑定对应的代码和图片的操作,重绑定操作的目的是重新绑定复制得到的预制体与代码、图片的关系,重新绑定的核心原理是把预制体中对于初始模块文件的GUID绑定,替换成目标模块文件的GUID。
在完成初始模块文件的复制操作时,可以获取初始模块文件与目标模块文件之间的标识符对照列表;其中,标识符对照列表可以是在初始资源复制阶段生成的。在获取到标识符对照列表后,可以标识符对照列表中的GUID对目标资源进行重新绑定,以将目标代码绑定至对应的目标资源中。
根据本公开的一些示例性实施例,获取初始模块文件的初始存储路径,并根据初始存储路径生成初始模块文件中初始资源对应的初始资源标识符;根据目标存储位置确定目标存储路径,并根据目标存储路径生成目标模块文件中目标资源对应的目标资源标识符;根据初始资源标识符和目标资源标识符生成标识符对照列表。初始存储路径可以是初始模块文件对应的存储路径。初始资源标识符可以是初始模块文件中包含的各类资源对应的资源标识符,即初始模块文件中各个资源对应的GUID。目标存储路径可以是目标模块文件对应的存储路径。目标资源标识符可以是目标模块文件中包含的各类资源对应的资源标识符,即目标模块文件中各个资源对应的GUID。
参考图6,图6示意性示出了生成标识符对照列表的流程图。在步骤S610中,获取到初始模块文件的初始存储路径后,可以通过调用Unity的AssetDatabase.AssetPathToGUID(string path)方法,将初始资源路径输入至该方法中,得到初始模块文件中初始资源的初始资源标识符,即初始GUID。在步骤S620中,根据目标模块文件的目标存储位置得到目标存储路径,并将目标存储路径输入至AssetDatabase.AssetPathToGUID(string path)方法中,输出得到目标模块文件中目标资源的目标资源标识符,即目标GUID。在步骤S630中,在得到初始GUID和目标GUID后,可以将初始GUID和目标GUID的映射关系存储至词典Dict<string,string>中,以生成标识符对照列表。
在本方案中,Copy函数的伪代码如下:
根据本公开的一些示例性实施例,从标识符对照列表中获取预制体资源的预制体标识符信息;其中,预制体标识符信息包括预制体资源对应的初始预制体标识符、预制体资源对应的目标预制体标识符以及标识符映射关系;通过标识符替换函数并采用目标预制体标识符替换初始预制体标识符,以执行重绑定操作。资源标识符信息可以是与预制体资源的标识符相关的信息。初始资源标识符可以是初始模块文件中包含的预制体资源对应的标识符。目标资源标识符可以是目标模块文件中包含的预制体资源对应的标识符。标识符映射关系可以是初始资源标识符与目标资源标识符之间的对应关系。
对初始模块文件进行复制操作,实现代码、图片、预制体的拷贝之后,可以输出初始模块文件和目标模块文件的GUID对照表。在得到GUID对照表之后,可以执行以下操作来进行重绑定操作。参考图7,图7示意性示出了根据本公开的示例性实施方式的对目标资源进行重绑定操作的流程图。在步骤S710中,获取上述得到的初始模块文件与目标模块文件的标识符对照列表,即预制体、图片、代码的GUID对照表。读取目标模块文件中预制体资源的标识符对照列表,并从读取到的标识符对照列表中确定已经被执行复制操作的目标模块文件的GUID,可以通过AssetDatabase.GUIDToAssetPath(guid)来得到目标模块文件的目标存储路径。在步骤S720中,遍历得到所有预制体的目标存储路径,并以文本的形式打开。通过遍历所有的预制体、图片、代码的GUID对照表,得到初始模块文件和目标模块文件的映射关系,根据打开的预制体文本信息,通过string.replace(src,dst)方法并采用目标资源标识符(目标模块文件的GUID)替换初始资源标识符(初始模块文件的GUID),并输出新的预制体资源,重绑定操作完成。
需要说明的是,被修改的预制体资源中,只有代表绑定关系的GUID被替换,而其他的信息包括代码的预设字段、图片大小等设置均不会被改动到,因此减免了开发者需要一个一个对照旧预制体,并手动输入参数的工作量。
综上所述,本公开的代码复制方法,首先,获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源;其次,针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源;再次,对中间代码进行改名操作,以生成目标代码;接下来,获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。一方面,根据标识符对照列表进行改名操作和资源重绑定操作,可以解决采用现有技术进行代码或资源复制时产生的人工工作量大的问题,可以减少大量的工作时间,提高代码复制效率。另一方面,通过对中间代码执行改名操作,极大程度上避免了开发者需要手动修改代码的操作,可以有效避免由于人工操作造成的误操作和漏操作,提高了代码复制的准确性。再一方面,根据标识符对照列表执行重绑定操作,无需开发者了解资源数据所在的功能模块,降低了开发门槛,降低了开发难度。
需要说明的是,尽管在附图中以特定顺序描述了本发明中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
此外,在本示例实施例中,还提供了一种代码复制装置。参考图8,该代码复制装置800可以包括:资源文件获取模块810、资源文件复制模块820、命名修改模块830以及重绑定模块840。
具体的,资源文件获取模块810可以用于获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源;资源文件复制模块820可以用于针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源;命名修改模块830可以用于对中间代码进行改名操作,以生成目标代码;重绑定模块840可以用于获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。
代码复制装置在进行代码复制和资源复制时,根据初始模块文件和目标模块文件之间的标识符对照列表进行改名操作和资源重绑定操作,可以解决采用现有技术进行代码或资源复制时产生的人工工作量大的问题,可以减少大量的工作时间,提高代码复制效率;对中间代码执行改名操作,极大程度上避免了开发者需要手动修改代码的操作,可以有效避免由于人工操作造成的误操作和漏操作,提高了代码复制的准确性;另外,代码复制装置进行代码及资源复制操作时,无需开发者了解资源数据所在的功能模块,降低了开发门槛,降低了开发难度。
在本公开的一种示例性实施方案中,资源文件复制模块包括资源文件复制单元,用于读取初始配置文件;其中,初始配置文件包括初始模块文件的初始目录路径、目标目录路径和名称映射关系;根据初始目录路径获取初始模块文件的原始名称,并根据原始名称和名称映射关系确定目标模块文件的目标名称;根据目标名称和目标目录路径生成目标模块文件的目标存储路径;针对初始模块文件执行复制操作以得到目标模块文件,并按照目标存储路径将目标模块文件存储至目标存储位置。
在本公开的一种示例性实施方案中,资源文件复制单元包括文件复制子单元,用于确定初始模块文件对应的资源类型;根据资源类型确定与初始模块文件对应的目标复制操作;针对初始模块文件执行目标复制操作,以得到目标模块文件。
在本公开的一种示例性实施方案中,文件复制子单元包括图片复制子单元,用于确定初始模块文件中的待复制图片,并获取待复制图片的图片属性;针对待复制图片执行复制操作,得到目标图片;将待复制图片的图片属性添加至目标图片;目标模块文件包括目标图片。
在本公开的一种示例性实施方案中,命名修改模块包括命名修改单元,用于对中间代码进行代码分析,得到中间代码的初始语法分析树;根据初始语法分析树确定中间代码的初始对象名称,并获取初始对象名称对应的目标对象名称;采用目标对象名称替换初始语法分析树中的初始对象名称,以生成目标语法分析树,并根据目标语法分析树生成目标代码。
在本公开的一种示例性实施方案中,命名修改模块包括标识符列表确定单元,用于获取初始模块文件的初始存储路径,并根据初始存储路径生成初始模块文件中初始资源对应的初始资源标识符;根据目标存储位置确定目标存储路径,并根据目标存储路径生成目标模块文件中目标资源对应的目标资源标识符;根据初始资源标识符和目标资源标识符生成标识符对照列表。
在本公开的一种示例性实施方案中,重绑定模块包括重绑定单元,用于从标识符对照列表中获取预制体资源的预制体标识符信息;其中,预制体标识符信息包括预制体资源对应的初始预制体标识符、预制体资源对应的目标预制体标识符以及标识符映射关系;通过标识符替换函数并采用目标预制体标识符替换初始预制体标识符,以执行重绑定操作。
上述中各代码复制装置的虚拟模块的具体细节已经在对应的代码复制方法中进行了详细的描述,因此此处不再赘述。
应当注意,尽管在上文详细描述中提及了代码复制装置的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为***、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施例、完全的软件实施例(包括固件、微代码等),或硬件和软件方面结合的实施例,这里可以统称为“电路”、“模块”或“***”。
下面参考图9来描述根据本发明的这种实施例的电子设备900。图9显示的电子设备900仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图9所示,电子设备900以通用计算设备的形式表现。电子设备900的组件可以包括但不限于:上述至少一个处理单元910、上述至少一个存储单元920、连接不同***组件(包括存储单元920和处理单元910)的总线930、显示单元940。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元910执行,使得所述处理单元910执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。
存储单元920可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)921和/或高速缓存存储单元922,还可以进一步包括只读存储单元(ROM)923。
存储单元920可以包括具有一组(至少一个)程序模块925的程序/实用工具924,这样的程序模块925包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线930可以表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、***总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备900也可以与一个或多个外部设备970(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备900交互的设备通信,和/或与使得该电子设备900能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口950进行。并且,电子设备900还可以通过网络适配器960与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器960通过总线930与电子设备900的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备900使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施例的方法。
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施例中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。
参考图10所示,描述了根据本发明的实施例的用于实现上述方法的程序产品1000,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。
Claims (10)
1.一种代码复制方法,其特征在于,包括:
获取初始模块文件;其中,所述初始模块文件包括初始代码以及与所述初始代码相关的初始资源;
针对所述初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,所述目标模块文件包括与所述初始代码对应的中间代码以及与所述初始资源对应的目标资源;
对所述中间代码进行改名操作,以生成目标代码;
获取所述初始模块文件与所述目标模块文件之间的标识符对照列表,并根据所述标识符对照列表对所述目标资源执行重绑定操作,以将所述目标代码绑定至所述目标资源。
2.根据权利要求1所述的代码复制方法,其特征在于,所述针对所述初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置,包括:
读取初始配置文件;其中,所述初始配置文件包括所述初始模块文件的初始目录路径、目标目录路径和名称映射关系;
根据所述初始目录路径获取所述初始模块文件的原始名称,并根据所述原始名称和所述名称映射关系确定目标模块文件的目标名称;
根据所述目标名称和所述目标目录路径生成所述目标模块文件的目标存储路径;
针对所述初始模块文件执行复制操作以得到所述目标模块文件,并按照所述目标存储路径将所述目标模块文件存储至所述目标存储位置。
3.根据权利要求2所述的代码复制方法,其特征在于,所述针对所述初始模块文件执行复制操作以得到所述目标模块文件,包括:
确定所述初始模块文件对应的资源类型;
根据所述资源类型确定与所述初始模块文件对应的目标复制操作;
针对所述初始模块文件执行所述目标复制操作,以得到所述目标模块文件。
4.根据权利要求3所述的代码复制方法,其特征在于,若所述资源类型为图片类型,所述针对所述初始模块文件执行所述目标复制操作,以得到所述目标模块文件,包括:
确定所述初始模块文件中的待复制图片,并获取所述待复制图片的图片属性;
针对所述待复制图片执行复制操作,得到目标图片;
将所述待复制图片的图片属性添加至所述目标图片;所述目标模块文件包括所述目标图片。
5.根据权利要求1所述的代码复制方法,其特征在于,所述对所述中间代码进行改名操作,以生成目标代码,包括:
对所述中间代码进行代码分析,得到所述中间代码的初始语法分析树;
根据所述初始语法分析树确定所述中间代码的初始对象名称,并获取所述初始对象名称对应的目标对象名称;
采用所述目标对象名称替换所述初始语法分析树中的所述初始对象名称,以生成目标语法分析树,并根据所述目标语法分析树生成所述目标代码。
6.根据权利要求1所述的代码复制方法,其特征在于,所述获取所述初始模块文件与所述目标模块文件之间的标识符对照列表,包括:
获取所述初始模块文件的初始存储路径,并根据所述初始存储路径生成所述初始模块文件中初始资源对应的初始资源标识符;
根据所述目标存储位置确定目标存储路径,并根据所述目标存储路径生成所述目标模块文件中目标资源对应的目标资源标识符;
根据所述初始资源标识符和所述目标资源标识符生成所述标识符对照列表。
7.根据权利要求6所述的代码复制方法,其特征在于,所述目标资源包括预制体资源,所述根据所述标识符对照列表对所述目标资源执行重绑定操作,包括:
从所述标识符对照列表中获取所述预制体资源的预制体标识符信息;其中,所述预制体标识符信息包括所述预制体资源对应的初始预制体标识符、所述预制体资源对应的目标预制体标识符以及标识符映射关系;
通过标识符替换函数并采用所述目标预制体标识符替换所述初始预制体标识符,以执行所述重绑定操作。
8.一种代码复制装置,其特征在于,包括:
资源文件获取模块,用于获取初始模块文件;其中,所述初始模块文件包括初始代码以及与所述初始代码相关的初始资源;
资源文件复制模块,用于针对所述初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,所述目标模块文件包括与所述初始代码对应的中间代码以及与所述初始资源对应的目标资源;
命名修改模块,用于对所述中间代码进行改名操作,以生成目标代码;
重绑定模块,用于获取所述初始模块文件与所述目标模块文件之间的标识符对照列表,并根据所述标识符对照列表对所述目标资源执行重绑定操作,以将所述目标代码绑定至所述目标资源。
9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据权利要求1至7中任一项所述的代码复制方法。
10.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据权利要求1至7中任一项所述的代码复制方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010936308.2A CN111984300B (zh) | 2020-09-08 | 2020-09-08 | 代码复制方法及装置、电子设备和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010936308.2A CN111984300B (zh) | 2020-09-08 | 2020-09-08 | 代码复制方法及装置、电子设备和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111984300A true CN111984300A (zh) | 2020-11-24 |
CN111984300B CN111984300B (zh) | 2024-01-23 |
Family
ID=73448569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010936308.2A Active CN111984300B (zh) | 2020-09-08 | 2020-09-08 | 代码复制方法及装置、电子设备和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111984300B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113760361A (zh) * | 2021-08-17 | 2021-12-07 | 中科曙光国际信息产业有限公司 | 代码文件生成方法、计算机设备及可读存储介质 |
CN114564919A (zh) * | 2022-02-17 | 2022-05-31 | 成都飞机工业(集团)有限责任公司 | 无人机控制文件的转换方法、装置、设备及存储介质 |
Citations (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040215628A1 (en) * | 2003-04-23 | 2004-10-28 | International Business Machines Corporation | Apparatus and method to copy computer files |
CN1574014A (zh) * | 2003-06-03 | 2005-02-02 | 株式会社东芝 | 数据转换装置和数据转换*** |
US20100023563A1 (en) * | 2008-07-23 | 2010-01-28 | Nvidia Corporation | Copying Files From One Directory To Another |
CN102033962A (zh) * | 2010-12-31 | 2011-04-27 | 中国传媒大学 | 一种快速去重的文件数据复制方法 |
US8984097B1 (en) * | 2012-05-23 | 2015-03-17 | Symantec Corporation | Efficient file replication which preserves the underlying extent structure |
CN104935966A (zh) * | 2015-06-03 | 2015-09-23 | 无锡天脉聚源传媒科技有限公司 | 一种分类视频信息的复制方法及装置 |
CN107066266A (zh) * | 2017-03-22 | 2017-08-18 | 北京潘达互娱科技有限公司 | 安卓应用中支持Unity的数据处理方法及装置 |
CN107832403A (zh) * | 2017-11-02 | 2018-03-23 | 武汉斗鱼网络科技有限公司 | 目录文件管理方法、装置、电子终端及可读存储介质 |
CN108089880A (zh) * | 2017-12-28 | 2018-05-29 | 北京奇虎科技有限公司 | 对应用程序安装文件进行预处理的方法、装置和服务器 |
CN108376072A (zh) * | 2016-11-14 | 2018-08-07 | 平安科技(深圳)有限公司 | 类名更改方法和装置 |
CN109189384A (zh) * | 2018-07-27 | 2019-01-11 | 武汉斗鱼网络科技有限公司 | 一种代码的复用方法及装置 |
CN109542459A (zh) * | 2018-09-29 | 2019-03-29 | 中国平安人寿保险股份有限公司 | 应用程序打包方法及装置、计算机装置及计算机存储介质 |
CN109683955A (zh) * | 2018-12-29 | 2019-04-26 | 北京奇艺世纪科技有限公司 | 版本库复制方法及*** |
CN110532029A (zh) * | 2019-09-04 | 2019-12-03 | 深圳前海微众银行股份有限公司 | 小程序生成方法、装置、设备及计算机可读存储介质 |
CN110659063A (zh) * | 2019-08-08 | 2020-01-07 | 平安科技(深圳)有限公司 | 软件项目重构方法、装置、计算机装置及存储介质 |
CN111068336A (zh) * | 2019-12-20 | 2020-04-28 | 腾讯科技(深圳)有限公司 | 游戏译文版本的生成方法、装置、电子设备及存储介质 |
US10649744B1 (en) * | 2018-11-30 | 2020-05-12 | The Mathworks, Inc. | Systems and methods for handling renaming of programming constructs in programming environments |
-
2020
- 2020-09-08 CN CN202010936308.2A patent/CN111984300B/zh active Active
Patent Citations (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040215628A1 (en) * | 2003-04-23 | 2004-10-28 | International Business Machines Corporation | Apparatus and method to copy computer files |
CN1574014A (zh) * | 2003-06-03 | 2005-02-02 | 株式会社东芝 | 数据转换装置和数据转换*** |
US20100023563A1 (en) * | 2008-07-23 | 2010-01-28 | Nvidia Corporation | Copying Files From One Directory To Another |
CN102033962A (zh) * | 2010-12-31 | 2011-04-27 | 中国传媒大学 | 一种快速去重的文件数据复制方法 |
US8984097B1 (en) * | 2012-05-23 | 2015-03-17 | Symantec Corporation | Efficient file replication which preserves the underlying extent structure |
CN104935966A (zh) * | 2015-06-03 | 2015-09-23 | 无锡天脉聚源传媒科技有限公司 | 一种分类视频信息的复制方法及装置 |
CN108376072A (zh) * | 2016-11-14 | 2018-08-07 | 平安科技(深圳)有限公司 | 类名更改方法和装置 |
CN107066266A (zh) * | 2017-03-22 | 2017-08-18 | 北京潘达互娱科技有限公司 | 安卓应用中支持Unity的数据处理方法及装置 |
CN107832403A (zh) * | 2017-11-02 | 2018-03-23 | 武汉斗鱼网络科技有限公司 | 目录文件管理方法、装置、电子终端及可读存储介质 |
CN108089880A (zh) * | 2017-12-28 | 2018-05-29 | 北京奇虎科技有限公司 | 对应用程序安装文件进行预处理的方法、装置和服务器 |
CN109189384A (zh) * | 2018-07-27 | 2019-01-11 | 武汉斗鱼网络科技有限公司 | 一种代码的复用方法及装置 |
CN109542459A (zh) * | 2018-09-29 | 2019-03-29 | 中国平安人寿保险股份有限公司 | 应用程序打包方法及装置、计算机装置及计算机存储介质 |
US10649744B1 (en) * | 2018-11-30 | 2020-05-12 | The Mathworks, Inc. | Systems and methods for handling renaming of programming constructs in programming environments |
CN109683955A (zh) * | 2018-12-29 | 2019-04-26 | 北京奇艺世纪科技有限公司 | 版本库复制方法及*** |
CN110659063A (zh) * | 2019-08-08 | 2020-01-07 | 平安科技(深圳)有限公司 | 软件项目重构方法、装置、计算机装置及存储介质 |
CN110532029A (zh) * | 2019-09-04 | 2019-12-03 | 深圳前海微众银行股份有限公司 | 小程序生成方法、装置、设备及计算机可读存储介质 |
CN111068336A (zh) * | 2019-12-20 | 2020-04-28 | 腾讯科技(深圳)有限公司 | 游戏译文版本的生成方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
DANDREA: "Can I duplicate folder with internal dependencies between objects?", 《HTTPS://ANSWERS.UNITY.COM/QUESTIONS/807164/CAN-I-DUPLICATE-FOLDER-WITH-INTERNAL- DEPENDENCIES.HTML》, pages 1 - 3 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113760361A (zh) * | 2021-08-17 | 2021-12-07 | 中科曙光国际信息产业有限公司 | 代码文件生成方法、计算机设备及可读存储介质 |
CN114564919A (zh) * | 2022-02-17 | 2022-05-31 | 成都飞机工业(集团)有限责任公司 | 无人机控制文件的转换方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111984300B (zh) | 2024-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9965259B2 (en) | System for translating diverse programming languages | |
US10684846B2 (en) | Using semantic annotations to control compatibility behaviors | |
US9928156B2 (en) | Missing include suggestions for external files | |
TWI536263B (zh) | 將作業系統之原始應用程式介面投射至其它程式語言 | |
US20140157243A1 (en) | System for Translating Diverse Programming Languages | |
US10083016B1 (en) | Procedurally specifying calculated database fields, and populating them | |
US10409559B2 (en) | Single-source-base compilation for multiple target environments | |
WO2019005228A1 (en) | AUTOMATED ADAPTATION OF A SOURCE CODE IN ORDER TO INJECT FUNCTIONS BETWEEN VERSIONS OF A PLATFORM | |
CN103034486B (zh) | 移动终端操作***基于全***扩展调用图的自动优化方法 | |
Bolin | Closure: The definitive guide: Google tools to add power to your JavaScript | |
JP6338713B2 (ja) | 柔軟性の高いメタデータの合成 | |
US20230113783A1 (en) | Cross-platform code conversion method and device | |
CN111984300B (zh) | 代码复制方法及装置、电子设备和计算机可读存储介质 | |
US20110271248A1 (en) | Converting controls into source code | |
CN112818176B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
WO2024066995A1 (zh) | 一种文本代码的编辑方法及*** | |
KR20180131009A (ko) | 대용량 애플리케이션 변환 장치 및 방법 | |
US20230004477A1 (en) | Providing a pseudo language for manipulating complex variables of an orchestration flow | |
WO2023038715A1 (en) | Hot reloading a running application with an unsaved source code change | |
CN110058876B (zh) | 扩展wireshark软件兼容性的方法、装置、服务器及存储介质 | |
CN103116514A (zh) | 基于***扩展调用图的操作***自动优化方法和*** | |
US11934810B2 (en) | Translating an edit from a child computer language to a parent computer language while maintaining a semantic meaning of the edit | |
US20230418574A1 (en) | Using a semantic tree of a compiler to execute a semantic code query against source code | |
US20230401182A1 (en) | Migrating deployment infrastructure containers across different databases | |
Himschoot et al. | Introduction to WebAssembly and Blazor |
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 |