CN114594987A - 一种多模块项目源码分离方法及设备 - Google Patents

一种多模块项目源码分离方法及设备 Download PDF

Info

Publication number
CN114594987A
CN114594987A CN202011414375.4A CN202011414375A CN114594987A CN 114594987 A CN114594987 A CN 114594987A CN 202011414375 A CN202011414375 A CN 202011414375A CN 114594987 A CN114594987 A CN 114594987A
Authority
CN
China
Prior art keywords
source code
code file
file
actually used
project
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.)
Pending
Application number
CN202011414375.4A
Other languages
English (en)
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.)
Wuhan Antiy Mobile Security Co ltd
Original Assignee
Wuhan Antiy Mobile Security 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 Wuhan Antiy Mobile Security Co ltd filed Critical Wuhan Antiy Mobile Security Co ltd
Priority to CN202011414375.4A priority Critical patent/CN114594987A/zh
Publication of CN114594987A publication Critical patent/CN114594987A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供一种多模块项目源码分离方法及设备。所述方法包括:获取目标项目相关的源码文件集合,所述源码文件集合是基于多模块框架开发的;基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件;将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码。通过本发明实施例方法,既能享受模块开发带来的便利,又可以很方便的从体积庞大的多模块项目中分离功能完整的目标源代码,分离源码时投入维护成本低。

Description

一种多模块项目源码分离方法及设备
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种多模块项目源码分离方法及设备。
背景技术
当前无论是公司还是个人开发者,基本都会使用模块化方式来开发项目。这种开发方式有诸多优势:分工明确,可以协同开发;职责单一,可降低代码耦合;代码复用,可以减少重复代码。
模块化开发中的公共模块是大量公共方法的集合体,这些公共方法职责单一,分工明确,就像积木搭建中的基础积木块,使用频率和数量都非常大。公共方法和公共积木块不同的是,公共积木块需要多少就需要生产多少积木块,但是公共方法不管在多少地方需要调用,只需要在公共模块中声明一次,就能无限次使用。这种一次声明,无限次复用的方式,可以大大减少代码的体积。
以多模块框架进行软件开发,可以快速且大数量的制作计算机项目,在一些需要可编译的源代码的场景中,需要分离出单个系统的精炼代码,这时多模块开发的弊端就会展露出来。公共模块中会包含大量公共代码,单个系统使用的只是其中一部分,若将未使用的代码也包括在单个系统的源代码中,则未使用的代码及代码中的注释会暴露一些不必要的信息,同时也会造成交付源码的体积臃肿。
这个时候往往需要花费大量的人力做手动删除和代码适配。如果遇到需求变更的情况,那人力的投入将会呈现倍数的上升;如果将分离出的代码单独开发,又不利于和其他项目同步最新的公共模块代码,如果单独拉分支开发,又会消耗过多的时间成本在同步代码修改到差异不大的分支上。
发明内容
针对现有技术存在的问题,本发明实施例提供一种多模块项目源码分离方法,通过自动化的手段,可以很方便的从体积庞大的多模块项目中分离功能完整的目标源代码。
第一方面,本发明实施例提供一种多模块项目源码分离方法,包括:
获取目标项目相关的源码文件集合,所述源码文件集合是基于多模块框架开发的;
基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件;
将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码。
进一步,所述多模块项目源码分离方法还包括:
识别所述目标项目实际使用的源码文件中的第一代码块,并删除所述第一代码块;所述第一代码块是所述目标项目实际使用的源码文件中未使用的代码。
进一步,所述多模块项目源码分离方法还包括:
识别所述目标项目实际使用的源码文件中的第二代码块,并恢复所述第二代码块;所述第二代码块是所述目标项目实际使用的源码文件中被注释的代码。
进一步,所述基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件,具体包括:
对所述源码文件集合进行优化和混淆,获取已混淆的类集合,所述已混淆的类集合是所述目标项目中实际使用的类的集合;
根据所述已混淆的类集合获取对应的源码文件,获得所述目标项目实际使用的源码文件;
判定所述源码文件集合中非所述目标项目实际使用的源码文件为冗余文件。
进一步,所述对所述源码文件集合进行优化和混淆,获取已混淆的类集合,具体包括:
根据预先设置的入口函数,对所述源码文件集合中的源码文件进行递归遍历,移除其中无用的类、字段、方法及属性;
对剩余源码文件中的类名进行名称混淆,获取已混淆的类集合。
进一步,所述根据所述已混淆的类集合获取对应的源码文件,获得所述目标项目实际使用的源码文件,还包括:
基于所述已混淆的类集合,根据原始类与混淆类的映射关系获取原始类;根据原始类获取第一类源码文件,所述第一类源码文件是原始类对应源码文件;
查找第二类源码文件,所述第二类源码文件是所述目标项目实际使用但未包含在第一类源码文件中;
将第一类源码文件和第二类源码文件作为所述目标项目实际使用的源码文件。
进一步,所述识别所述目标项目实际使用的源码文件中的第一代码块,并删除所述第一代码块,具体包括:
遍历所述目标项目实际使用的源码文件,识别所有第一代码块,分别对识别出的每个第一代码块的起始位置和结束位置进行删除标记;
根据所有删除标记,删除所有第一代码块。
进一步,所述识别所述目标项目实际使用的源码文件中的第二代码块,并恢复所述第二代码块,具体包括:
遍历所述目标项目实际使用的源码文件,识别所有第二代码块,分别对识别出的每个第二代码块的起始位置和结束位置进行恢复标记;
根据所有恢复标记,恢复所有第二代码块。
第二方面,本发明实施例提供一种电子设备,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行本发明实施例第一方面所述多模块项目源码分离方法及其任一可选实施例所述的方法。
第三方面,本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令执行本发明实施例第一方面所述多模块项目源码分离方法及其任一可选实施例的方法。
本发明实施例提供的多模块项目源码分离方法,通过自动化的手段,根据目标项目相关的源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件,将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码;通过本发明实施例方法,既能享受模块开发带来的便利,又可以很方便的从体积庞大的多模块项目中分离功能完整的目标源代码,分离源码时投入维护成本低。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一种多模块项目源码分离方法流程示意图;
图2为本发明实施例一种多模块项目源码分离装置示意图;
图3为本发明实施例电子设备的框架示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一种多模块项目源码分离方法流程示意图,其一般应用场景包括但不限于:存在软件项目A,软件项目B。A和B都使用到了公共模块C。同时项目B可以看成是在项目A的基础上做的二次开发,有大量的代码复用,但是B相对A又存在差异。应用本发明实施例的方法,可以将项目A实际使用的公共模块C的源代码分离出来,获得项目A的全部源码;也可以将项目B实际使用的公共模块C及项目A的源代码分离出来,获得项目B的全部源码。
如图1所示的多模块项目源码分离方法,包括:
100,获取目标项目相关的源码文件集合,所述源码文件集合是基于多模块框架开发的;
101,基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件;
102,将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码。
本发明实施例获取目标项目相关的源码文件集合,例如文件列表或文件集合等等,所述源码文件集合包括目标项目依赖的公共模块源码文件、目标项目主体自身的源码文件等。在一个实施例中,可以将源码文件集合中的文件复制到目标目录下,在目标目录下执行对所有源码文件的标记、删除等,不会对原始产生影响。
本发明实施例通过自动化方法识别目标项目实际使用的源码文件,例如根据目标项目自身的特点,通过脚本程序,结合编译器和/或第三方工具,对源码文件集合中的源码文件进行有策略的遍历分析,识别出目标项目实际使用的源码文件,未使用的源码文件即为冗余文件,清除冗余文件获得剩余文件,即分离出目标项目源码。
对于不同的目标项目以及源码分离需求的差异,只需要对脚本程序进行调整,即可方便的实现多模块项目的源码分离。
本发明实施例提供的多模块项目源码分离方法,通过自动化的手段,根据目标项目相关的源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件,将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码;通过本发明实施例方法,既能享受模块开发带来的便利,又可以很方便的从体积庞大的多模块项目中分离功能完整的目标源代码,分离源码时投入维护成本低。
基于上述实施例,步骤101,所述基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件,具体包括:
101.1,对所述源码文件集合进行优化和混淆,获取已混淆的类集合,所述已混淆的类集合是所述目标项目中实际使用的类的集合;
101.2,根据所述已混淆的类集合获取对应的源码文件,获得所述目标项目实际使用的源码文件;
101.3,判定所述源码文件集合中非所述目标项目实际使用的源码文件为冗余文件。
本发明实施例对源码文件集合进行优化和混淆,主要是通过预先设置自动化遍历分析的入口函数,根据入口函数,查找入口函数调用的所有方法和类,并一层一层的递归,从而实现对所述源码文件集合中的源码文件的递归遍历,所有被调用的类、方法、字段及属性都会被找到,可以得到对应的源码文件,即为目标项目实际使用的源码文件;没有被调用的类、方法、字段及属性是目标项目没有使用的,可以标记为无用的类、字段、方法及属性,在遍历完成后将被移除,源码文件会在一定程度上精简,若一个源码文件的所有类、字段、方法及属性全部被移除,则该源码文件会被删除。
剩余源码文件即目标项目实际使用的源码文件,剩余源码文件可能是被优化精简过的。对剩余源码文件中的类名进行名称混淆,将原始的类名替换为无意义的简短字符,这样可以防止代码信息泄露从而被轻易逆向破解,同时也可进一步精简代码,但在程序功能上与原始保持等价。分别对每个类名进行混淆,可获得已混淆的类集合,已混淆的类集合是所述目标项目中实际使用的类的集合。
本发明实施例基于已混淆的类集合,获得所述目标项目实际使用的源码文件,包括两类源码文件:
第一类源码文件:是根据原始类与混淆类的映射关系获取的原始类对应的源码文件;
第二类源码文件:在优化过程中可能会存在被误删除的有用文件,可以通过编译器等查找项目中实际使用但已被删除的文件,第二类源码文件可能存在也可能不存在;
识别出所有的第一类源码文件和第二类源码文件,即为所述目标项目实际使用的源码文件。
通过以上步骤,已经将目标项目实际使用的源码文件从公共模块中分离出来,包括目标项目主体自身的源码文件,目标项目所使用的公共模块的源码文件。本发明实施例所述多模块项目源码分离方法可以在投入很少的人力维护的基础上,很便捷的分离出无冗余的目标源码文件。
进一步,本发明实施例可以对分离出的源码文件作精细化处理,除去冗余代码块,恢复有用代码块等,使处理后的源码文件简洁无冗余并且功能不受任何影响。
基于上述任一实施例,所述多模块项目源码分离方法还包括:
识别所述目标项目实际使用的源码文件中的第一代码块,并删除所述第一代码块;所述第一代码块是所述目标项目实际使用的源码文件中未使用的代码。
由于在上述步骤已经移除冗余源码文件,因此剩余源码文件是目标项目实际使用的源码文件,虽然在整体优化阶段已经移除了源码文件的部分冗余代码块,但在剩余源码文件中依然存在无用的代码块。此时可针对剩余源码文件,可通过脚本程序,结合编译器和/或第三方工具,遍历所述目标项目实际使用的源码文件,识别所有第一代码块,即剩余源码文件中实际未使用的代码块,分别对识别出的每个第一代码块的起始位置和结束位置进行删除标记,例如通过“//项目名_clear_start”、“//项目名_clear_end”标记需要清除的代码块,脚本程序将删除clear_start标签与clear_end标签之间的代码块。
基于上述任一实施例,所述多模块项目源码分离方法还包括:
识别所述目标项目实际使用的源码文件中的第二代码块,并恢复所述第二代码块;所述第二代码块是所述目标项目实际使用的源码文件中被注释的代码。
如前所述,在源码分离的整体优化阶段,可能会误删除一些源码文件,同样,也可能误删除一些代码块。基于本发明实施例精细化处理,在整体优化阶段移除代码块时,可以不作实质删除而是注释掉代码块。此时针对剩余源码文件,可通过脚本程序,结合编译器和/或第三方工具,遍历所述目标项目实际使用的源码文件,识别所有第二代码块,即剩余源码文件中实际使用但被注释的代码块,分别对识别出的每个第二代码块的起始位置和结束位置进行恢复标记,例如通过“//项目名_add_start”、“//项目名_add_end”标记需要恢复被注释的代码,脚本程序会将add_start标签与add_end标签范围内注释掉的代码块去除注释符号,恢复成有效代码。
本发明实施例提供的多模块项目源码分离方法,通过自动化的手段,根据目标项目相关的源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件,将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码;同时进一步对分离出的源码文件做精细化处理,清除冗余代码块,恢复误移除代码块,实现代码级的精简与修复。通过本发明实施例方法,既能享受模块开发带来的便利,又可以很方便的从体积庞大的多模块项目中分离功能完整的目标源代码,在保持代码功能等价的同时,文件精简且代码精简,分离源码时投入维护成本低,具有良好的有益效果。
下面以Android项目为例,编译器选择Android Studio,第三方工具选择ProGuard,自定义脚本程序,来说明本发明实施例所述多模块项目源码分离方法。
ProGuard是一款Java类文件压缩器、优化器和混淆器。在混淆过程中它能发现并删除无用类、字段(field)、方法和属性值(attribute)。它也能优化字节码并删除无用的指令。最后,它使用简单无意义的名字来重命名你的类名、字段名和方法名。经过以上操作的jar文件会变得更小,并很难进行逆向工程。ProGuard的处理的顺序是先压缩,然后优化,最后才进行混淆。
Java源代码(.java文件)通常被编译为字节码(.class文件),而完整的程序或程序库通常被压缩和发布成Java文档(.jar文件)。字节码比Java源文件更简洁,但是它仍然包含大量的无用代码,尤其它是一个程序库的时候。ProGuard的压缩程序操作能分析字节码,并删除无用的类、字段和方法,程序只保留功能上的等价,包括异常堆栈描述所需要的信息。ProGuard除了在压缩操作删除的无用类,字段和方法外,ProGuard也能在字节码级提供性能优化,例如删除不必要的字段存取。
通常情况下,编译后的字节码仍然包含了大量的调试信息:源文件名,行号,字段名,方法名,参数名,变量名等等。这些信息使得它很容易被反编译和通过逆向工程获得完整的程序。ProGuard在混淆阶段能删除这些调试信息,并用无意义的字符序列来替换所有名字,使得它很难进行逆向工程,它进一步免费的精简代码。除了异常堆栈信息所需要的类名,方法名和行号外,程序只会保留功能上的等价。
本发明实施例将多模块项目复制到目标目录下进行处理,经过ProGuard压缩、优化以及混淆后,可生成混淆产物mapping.txt文件,mapping.txt文件中包含已混淆的类集合,其中记录着混淆前后类、方法、变量的对照关系,根据这一关系可以推断出,被混淆的代码一定是目标项目中使用到的。所以本发明实施例通过ProGuard技术可获取到绝大部分目标项目会使用到的源码文件。
例如,在mapping.txt文件中形如“com.my.project.MainClass->com.my.project.a:”的一行字符串,表示原始未混淆的类“com.my.project.MainClass”在混淆后,会转换成“com.my.project.a”的映射关系。可以使用自定义脚本程序将“com.my.project.MainClass”包名转换为“com/my/project/MainClass.java”的形式,将映射包名转换为该类的相对路径,并存放在脚本程序的集合数据结构中,方便脚本程序确认这些需要保留的类,此时即已获得第一类源码文件名单。
由于ProGuard技术在优化处理的过程中,会对项目压缩和发布成的Java文档(.jar文件)进行优化,一部分源码文件会被优化移除掉,所以使用ProGuard工具,需要找到由于优化导致缺失的文件,本发明实施例使用Android Studio的代码提示功能(AndroidStudio会对项目缺失的代码做出提示,方便使用脚本程序捕获提示信息)来获取到缺失的代码文件,并将这些缺失但会被用到的代码文件加入白名单,此时获得第二类源码文件名单。
通过自定义脚本程序遍历目标目录,寻找既不在第一类源码文件名单也不在第二类源码文件名单中的文件,将这些文件加入黑名单。
通过自定义脚本程序删除黑名单中的文件,剩余源码文件便是目标项目实际使用的源码文件。
进一步做精细化处理,本发明实施例使用Android Studio工具,查找剩余文件中需要修改的代码块,包括需清除和需恢复的代码块,使用标记标注,同步这些标记到原始多模块项目中。
Android Studio工具会对没有使用到的代码块有提示(比如不会使用到的方法或者变量会变灰色)。剩余源码文件中可能还存在一些不会被使用到的变量或者方法(函数),这些代码块可以使用Android Studio工具打开项目后,根据提示获取到。如果是需要清除的代码块使用清除标记来标注,如果是需要添加的代码块使用添加标记来标注,使用这2种标记的组合可以对源代码文件进行精确的修改。
例如“//项目名_clear_start”、“//项目名_clear_end”用于包裹需要清除的代码块。脚本程序当遇clear标签后,将删除源代码文件中的这部分代码块。
例如“//项目名_add_start”、“//项目名_add_end”用于包裹需要恢复被注释的代码。脚本程序遇到add标签后,会将范围内注释掉的代码块去除注释符号,恢复成有效代码。
对剩余源码文件都标注好了后,通过脚本程序移除需要移除的代码块,恢复需要恢复的代码块,同时移除需要移除的注释。
另外,经过对源代码文件的移除,可能会产生一些空的目录,可使用脚本程序移除这部分目录。该步骤只需要在移除黑名单文件之后进行即可。
完成上述步骤之后,目标目录中的项目,便是移除了冗余源码文件、冗余代码块后的目标项目的源码了,功能完整代码精炼。本实施例只需要配置ProGuard参数,定义脚本程序,配置少,维护成本低,在分离源码同时实现文件级精简及代码级精简,自动化程度高,效率高。
图2为本发明实施例一种多模块项目源码分离装置示意图,如图2所示的多模块项目源码分离装置,包括源码集合模块200、源码识别模块201和源码分离模块202;
所述源码集合模块200,用于获取目标项目相关的源码文件集合,所述源码文件集合是基于多模块框架开发的;
所述源码识别模块201,用于基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件;
所述源码分离模块202,用于将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码
本发明实施例多模块项目源码分离装置用于执行图1所示的多模块项目源码分离方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图3为本发明实施例电子设备框架示意图。请参考图3,本发明实施例提供一种电子设备,包括:处理器(processor)310、通信接口(Communications Interface)320、存储器(memory)330和总线340,其中,处理器310,通信接口320,存储器330通过总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行如下方法,包括:获取目标项目相关的源码文件集合,所述源码文件集合是基于多模块框架开发的;基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件;将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码。
本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:获取目标项目相关的源码文件集合,所述源码文件集合是基于多模块框架开发的;基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件;将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码。
本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:获取目标项目相关的源码文件集合,所述源码文件集合是基于多模块框架开发的;基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件;将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码。
本领域普通技术人员可以理解:实现上述设备实施例或方法实施例仅仅是示意性的,其中所述处理器和所述存储器可以是物理上分离的部件也可以不是物理上分离的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如U盘、移动硬盘、ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种多模块项目源码分离方法,其特征在于,包括:
获取目标项目相关的源码文件集合,所述源码文件集合是基于多模块框架开发的;
基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件;
将所述冗余文件从源码文件集合中删除,从而分离出所述目标项目源码。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
识别所述目标项目实际使用的源码文件中的第一代码块,并删除所述第一代码块;所述第一代码块是所述目标项目实际使用的源码文件中未使用的代码。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
识别所述目标项目实际使用的源码文件中的第二代码块,并恢复所述第二代码块;所述第二代码块是所述目标项目实际使用的源码文件中被注释的代码。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述基于所述源码文件集合,识别所述目标项目实际使用的源码文件并判定冗余文件,具体包括:
对所述源码文件集合进行优化和混淆,获取已混淆的类集合,所述已混淆的类集合是所述目标项目中实际使用的类的集合;
根据所述已混淆的类集合获取对应的源码文件,获得所述目标项目实际使用的源码文件;
判定所述源码文件集合中非所述目标项目实际使用的源码文件为冗余文件。
5.根据权利要求4所述的方法,其特征在于,所述对所述源码文件集合进行优化和混淆,获取已混淆的类集合,具体包括:
根据预先设置的入口函数,对所述源码文件集合中的源码文件进行递归遍历,移除其中无用的类、字段、方法及属性;
对剩余源码文件中的类名进行名称混淆,获取已混淆的类集合。
6.根据权利要求4或5所述的方法,其特征在于,所述根据所述已混淆的类集合获取对应的源码文件,获得所述目标项目实际使用的源码文件,还包括:
基于所述已混淆的类集合,根据原始类与混淆类的映射关系获取原始类;根据原始类获取第一类源码文件,所述第一类源码文件是原始类对应源码文件;
查找第二类源码文件,所述第二类源码文件是所述目标项目实际使用但未包含在第一类源码文件中;
将第一类源码文件和第二类源码文件作为所述目标项目实际使用的源码文件。
7.根据权利要求2所述的方法,其特征在于,所述识别所述目标项目实际使用的源码文件中的第一代码块,并删除所述第一代码块,具体包括:
遍历所述目标项目实际使用的源码文件,识别所有第一代码块,分别对识别出的每个第一代码块的起始位置和结束位置进行删除标记;
根据所有删除标记,删除所有第一代码块。
8.根据权利要求3所述的方法,其特征在于,所述识别所述目标项目实际使用的源码文件中的第二代码块,并恢复所述第二代码块,具体包括:
遍历所述目标项目实际使用的源码文件,识别所有第二代码块,分别对识别出的每个第二代码块的起始位置和结束位置进行恢复标记;
根据所有恢复标记,恢复所有第二代码块。
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至8任一所述的方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至8任一所述的方法。
CN202011414375.4A 2020-12-04 2020-12-04 一种多模块项目源码分离方法及设备 Pending CN114594987A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011414375.4A CN114594987A (zh) 2020-12-04 2020-12-04 一种多模块项目源码分离方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011414375.4A CN114594987A (zh) 2020-12-04 2020-12-04 一种多模块项目源码分离方法及设备

Publications (1)

Publication Number Publication Date
CN114594987A true CN114594987A (zh) 2022-06-07

Family

ID=81813538

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011414375.4A Pending CN114594987A (zh) 2020-12-04 2020-12-04 一种多模块项目源码分离方法及设备

Country Status (1)

Country Link
CN (1) CN114594987A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115292203A (zh) * 2022-09-30 2022-11-04 平安银行股份有限公司 一种源代码分析方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115292203A (zh) * 2022-09-30 2022-11-04 平安银行股份有限公司 一种源代码分析方法及装置
CN115292203B (zh) * 2022-09-30 2022-12-16 平安银行股份有限公司 一种源代码分析方法及装置

Similar Documents

Publication Publication Date Title
US20160179495A1 (en) Device and method for packaging application
CN105589725B (zh) 一种电子设备的升级包制作方法和升级方法、升级包
CN108563444B (zh) 一种安卓系统固件源代码还原方法及存储介质
CN106445476B (zh) 一种代码变更信息确定方法、装置及电子设备
CN104036187A (zh) 计算机病毒类型确定方法及其系统
CN106547782A (zh) 日志信息的获取方法及装置
CN109426515A (zh) 升级包的生成方法及装置
CN108446110B (zh) Lua脚本生成方法、装置、终端及计算机可读介质
CN111857810A (zh) 一种前端开发文件创建方法、装置及电子设备
CN114594987A (zh) 一种多模块项目源码分离方法及设备
CN109101244A (zh) 一种ios系统一体化自动打包方法
CN111045698A (zh) 冗余图片的删除方法、装置、电子设备及存储介质
CN111273942A (zh) 一种代码生成方法、存储介质、电子设备及系统
CN112068981B (zh) Linux操作系统中基于知识库的故障扫描恢复方法及系统
CN108664255B (zh) 一种软件升级方法及装置
CN104090924B (zh) 一种隐私数据的清理方法和装置
CN111949303A (zh) 升级包处理方法、装置、电子设备及存储介质
CN110750310B (zh) 基于ios系统组件化开发的二进制和源码切换方法
CN113031944B (zh) 基于模板的业务开通装置及方法
US20200285630A1 (en) Systems and methods for application data transaction auditing
CN109068286B (zh) 一种信息解析的方法、介质及设备
CN111984595A (zh) 一种文件处理方法及装置、存储介质
CN115016782A (zh) vue组件生成方法及装置
CN114417347A (zh) 应用程序的漏洞检测方法、装置、设备、存储介质和程序
CN109614443B (zh) 针对v9.7版本db2数据库的ddl同步方法及设备

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