CN106569868B - 一种基于Gradle的编译优化方法及装置 - Google Patents
一种基于Gradle的编译优化方法及装置 Download PDFInfo
- Publication number
- CN106569868B CN106569868B CN201610988055.7A CN201610988055A CN106569868B CN 106569868 B CN106569868 B CN 106569868B CN 201610988055 A CN201610988055 A CN 201610988055A CN 106569868 B CN106569868 B CN 106569868B
- Authority
- CN
- China
- Prior art keywords
- class
- file
- entry
- default
- keep
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- 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/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开一种基于Gradle的编译优化方法及装置,其中方法包括如下步骤:根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件;获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到;采用所述自定义keep文件替换所述默认keep文件,并根据所述自定义keep文件生成入口类文件集合;根据所述入口类文件集合生成目标主dex列表。本发明实施例可以在Gradle编译过程中产生较小的主dex列表,提高了Gradle的编译通过率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于Gradle的编译优化方法及装置。
背景技术
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域专用语言(domain specific language,DSL)来声明项目设置,抛弃了基于可扩展标记语言(Extensible Markup Language,XML)的各种繁琐配置,其易适应性和丰富性允许在构建里直接套用通用的设计原理。Gradle可以自动化地进行软件构建、测试、发布、部署、软件打包,同时也可以完成静态网站生成、文档生成等项目。然而,在利用Gradle构建Android系统工程的过程中,当所构建的Android系统工程较大时,若执行默认的编译过程,可能会生成较大的主dex列表,这样极易造成编译不通过。
发明内容
本发明实施例提供一种基于Gradle的编译优化方法及装置,可以提高Gradle的编译通过率。
本发明实施例第一方面提供了一种基于Gradle的编译优化方法,可包括:
根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件;
获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到;
采用所述自定义keep文件替换所述默认keep文件,并根据所述自定义keep文件生成入口类文件集合;
根据所述入口类文件集合生成目标主dex列表。
本发明实施例第二方面提供了一种基于Gradle的编译优化装置,可包括:
分析单元,用于根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件;
获取单元,用于获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到;
替换单元,用于采用所述自定义keep文件替换所述默认keep文件;
文件生成单元,用于根据所述自定义keep文件生成入口类文件集合;
列表生成单元,用于根据所述入口类文件集合生成目标主dex列表。
在本发明实施例中,根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件,并获取默认keep文件,然后采用所述自定义keep文件替换所述默认keep文件,并根据所述自定义keep文件生成入口类文件集合,然后根据所述入口类文件集合生成目标主dex列表,采用自定义keep文件可以将不必要的继承类去除,从而减小了文件大小,进而产生较小的主dex列表,提高了Gradle的编译通过率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种基于Gradle的编译优化方法的流程示意图;
图2是本发明实施例提供的另一种基于Gradle的编译优化方法的流程示意图;
图3是本发明实施例提供的一种基于Gradle的编译优化装置的结构示意图;
图4是本发明实施例提供的另一种基于Gradle的编译优化装置的结构示意图;
图5是本发明实施例提供的又一种基于Gradle的编译优化装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面将结合附图1-附图2,对本发明实施例提供的基于Gradle的编译优化方法进行详细介绍。
请参见图1,为本发明实施例提供的一种基于Gradle的编译优化方法的流程示意图。如图1所示,本发明实施例的所述方法可以包括以下步骤S101-步骤S104。
S101,根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件。
具体的,在利用基于Gradle1.3.0版本构建安卓(Android)系统工程中,按照默认的编译规则,首先会采用CollectReleaseMutidexComponents的任务生成默认keep文件(即mainfest_keep.txt),该默认keep文件直接用来生成主dex文件。在编译过程中,Gradle会默认将所有如activity、service、receiver、provider以及instrumenter等继承类通过入口配置文件(AndroidManifest.xml文件)进行分析,生成默认keep文件,由于项目工程比较大,默认keep文件会使最后生成的主dex列表过大,编译难以通过。为了解决上述问题,本发明实施例采用自定义keep文件,即在生成自定义keep文件之前,首先会预设自定义继承类集合,例如可去除所有默认继承类的service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的activity以外的所有默认继承类。Gradle可以根据该预设的自定义继承类集合,通过自定义task,对入口配置文件(AndroidManifest.xml文件)进行分析,生成自定义keep文件。需要说明的是,本发明实施例中预设自定义继承类集合的生成方式,可以不局限于上述举例所列举的方式,也可以是按照实际需要对默认继承类集合进行适当增减、更改等处理。
S102,获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到。
具体的,本发明实施例中,在利用Gradle构建安卓(Android)系统工程中,除了生成自定义keep文件外,系统会按照默认的编译规则生成默认keep文件,该默认keep文件是由Gradle将所有如activity、service、receiver、provider以及instrumenter等默认继承类通过入口配置文件(AndroidManifest.xml文件)进行分析而自动生成。
S103,采用所述自定义keep文件替换所述默认keep文件,并根据所述自定义keep文件生成入口类文件集合。
具体的,本发明实施例中,Gradle采用自定义keep文件替换默认keep文件,然后可以将自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合。其中,所有类文件集合为class.jar;所述入口类文件集合为component.jar。可选的,Gradle采用自定义keep文件替换默认keep文件之后,还可以先对自定义keep文件进行混淆处理,然后通过预设的混淆处理后的所有类文件集合生成入口类文件集合。
S104,根据所述入口类文件集合生成目标主dex列表。
具体的,本发明实施例中,Gradle可以通过所述入口类文件集合生成目标主dex列表,该目标主dex列表中包括入口类直接依赖类和默认的入口类匿名内部类。可选的,可以进一步完善主dex列表中的入口类匿名内部类,例如将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到主dex列表中。
在本发明实施例中,根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件,并获取默认keep文件,然后采用所述自定义keep文件替换所述默认keep文件,并根据所述自定义keep文件生成入口类文件集合,然后根据所述入口类文件集合生成目标主dex列表,采用自定义keep文件可以将不必要的继承类去除,从而减小了文件大小,进而产生较小的主dex列表,提高了Gradle的编译通过率。
请参见图2,为本发明实施例提供的另一种基于Gradle的编译优化方法的流程示意图。如图2所示,所述方法可以包括以下步骤S201-步骤S208。
S201,获取预设的自定义继承类集合。
具体的,获取预设的自定义继承类集合,所述自定义继承类集合包括默认继承类集合中去除service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的activity以外的所有默认继承类。本发明实施例中,由于Gradle生成的默认keep文件较大会使最后生成的主dex列表过大,编译难以通过,因此本发明实施例对继承类集合进行调整,生成较小的自定义继承类集合以便于生成自定义keep文件,并由该自定义keep文件生成较小的主dex列表。在生成自定义继承类集合时,由于service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的activity可能并不是主dex的直接依赖类,因可以不需要添加进去,这些类可以在生成分dex列表时使用。
S202,根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件。
S203,获取默认keep文件。
其中,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到。
S204,采用所述自定义keep文件替换所述默认keep文件。
步骤S202-步骤S204的详细解释请参考图1对应的实施例中的步骤S101-步骤S103,在此不再赘述。
S205,按照混淆规则对所述自定义keep文件进行混淆处理。
S206,根据混淆处理后的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合。
具体的,Gradle生成自定义keep文件后,会根据未被混淆的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合,这会导致产生的该入口类文件集合不够准确。本发明实施例中,为了提高入口类文件集合的准确性,会在生成入口类文件集合之前,按照混淆规则将自定义keep文件进行混淆处理,然后和预设的混淆处理后的所有类文件集合生成入口类文件集合。可选的,混淆规则可以是将所述自定义keep文件中的变量、函数和/或类的名称替换为预设的映射标识(如简短的英文字母代号),并将包含所述映射标识的自定义keep文件确定为混淆处理后的自定义keep文件。需要说明的是,混淆规则可以按照实际情况进行自定义生成,本发明不做限定。
S207,根据所述入口类文件集合生成初始主dex列表。
其中,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部类。
S208,将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表。
其中,所述目标主dex列表包括所述入口类直接依赖类和所有入口类匿名内部类。
具体的,Gradle生成入口类文件集合之后,可以根据所述入口类文件集合生成初主dex列表,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部。然而,所生成的初始主dex列表中默认的入口类匿名内部类只是一部分入口类匿名内部类,这样的初始主dex列表并不完善。本发明实施例为了改善初始主dex列表,将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表,即最终完整的manidex_list.txt,这样,目标主dex列表中包括所有入口类匿名内部类,确保不遗漏需要的入口类匿名内部类。
在本发明实施例中,通过获取预设的自定义继承类集合,然后根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件,并获取默认keep文件之后,采用所述自定义keep文件替换所述默认keep文件,减小了keep文件大小,以便于产生较小的主dex列表,提高编译通过率,在此基础上,按照混淆规则对所述自定义keep文件进行混淆处理,根据混淆处理后的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合,提高了入口类文件集合的准确性,在此基础上,根据所述入口类文件集合生成初始主dex列表,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部类,然后将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表,所述目标主dex列表包括所述入口类直接依赖类和所有入口类匿名内部类,使主dex列表更加准确。综合上述,本发明实施例,提高了主dex列表的编译通过率和准确性。
下面将结合附图3-附图5,对本发明实施例提供的基于Gradle的编译优化装置进行详细接收。需要说明的是,附图3-附图5所示的编译优化装置,用于执行本发明图1-图2所示实施例的方法,为了便于说明,仅示除了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明图1-图2所示的实施例。
请参见图3,为本发明实施例提供的一种基于Gradle的编译优化装置的结构示意图。如图3所示,本发明实施例的所述编译优化装置1可以包括:分析单元11、获取单元12、替换单元13、文件生成单元14和列表生成单元15。
分析单元11,用于根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件。
具体的,在利用基于Gradle1.3.0版本构建安卓(Android)系统工程中,所述基于Gradle的编译优化装置1按照默认的编译规则,首先会采用CollectReleaseMutidexComponents的任务生成默认keep文件(即mainfest_keep.txt),该默认keep文件直接用来生成主dex文件。在编译过程中,其会默认将所有如activity、service、receiver、provider以及instrumenter等继承类通过入口配置文件(AndroidManifest.xml文件)进行分析,生成默认keep文件,由于项目工程比较大,默认keep文件会使最后生成的主dex列表过大,编译难以通过。为了解决上述问题,本发明实施例采用自定义keep文件,即在生成自定义keep文件之前,所述分析单元11首先会预设自定义继承类集合,例如可去除所有默认继承类的service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的activity以外的所有默认继承类。所述分析单元11可以根据该预设的自定义继承类集合,通过自定义task,对入口配置文件(AndroidManifest.xml文件)进行分析,生成自定义keep文件。需要说明的是,本发明实施例中预设自定义继承类集合的生成方式,可以不局限于上述举例所列举的方式,也可以是按照实际需要对默认继承类集合进行适当增减、更改等处理。
获取单元12,用于获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到。
具体的,本发明实施例中,在利用Gradle构建安卓(Android)系统工程中,除了生成自定义keep文件外,所述获取单元12会按照默认的编译规则生成默认keep文件,该默认keep文件是由Gradle将所有如activity、service、receiver、provider以及instrumenter等默认继承类通过入口配置文件(AndroidManifest.xml文件)进行分析而自动生成。
替换单元13,用于采用所述自定义keep文件替换所述默认keep文件。
文件生成单元14,用于根据所述自定义keep文件生成入口类文件集合。
具体的,本发明实施例中,所述替换单元13采用自定义keep文件替换默认keep文件,然后可以将自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合。其中,所有类文件集合为class.jar;所述入口类文件集合为component.jar。可选的,所述替换单元13采用自定义keep文件替换默认keep文件之后,还可以先对自定义keep文件进行混淆处理,然后所述文件生成单元14根据预设的混淆处理后的所有类文件集合生成入口类文件集合。
列表生成单元15,用于根据所述入口类文件集合生成目标主dex列表。
具体的,本发明实施例中,所述列表生成单元15可以通过所述入口类文件集合生成目标主dex列表,该目标主dex列表中包括入口类直接依赖类和默认的入口类匿名内部类。可选的,所述列表生成单元15可以进一步完善主dex列表中的入口类匿名内部类,例如将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到主dex列表中。
在本发明实施例中,根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件,并获取默认keep文件,然后采用所述自定义keep文件替换所述默认keep文件,并根据所述自定义keep文件生成入口类文件集合,然后根据所述入口类文件集合生成目标主dex列表,采用自定义keep文件可以将不必要的继承类去除,从而减小了文件大小,进而产生较小的主dex列表,提高了Gradle的编译通过率。
请参见图4,为本发明实施例提供的另一种基于Gradle的编译优化装置的结构示意图。如图3所示,本发明实施例的所述编译优化装置2可以包括:分析单元21、获取单元22、替换单元23、文件生成单元24和列表生成单元25。
获取单元22,用于获取预设的自定义继承类集合。
具体的,所述获取单元22获取预设的自定义继承类集合,所述自定义继承类集合包括默认继承类集合中去除service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的activity以外的所有默认继承类。本发明实施例中,由于Gradle生成的默认keep文件较大会使最后生成的主dex列表过大,编译难以通过,因此本发明实施例对继承类集合进行调整,采用所述获取单元22生成较小的自定义继承类集合以便于生成自定义keep文件,并由该自定义keep文件生成较小的主dex列表。在所述获取单元22生成自定义继承类集合时,由于service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的activity可能并不是主dex的直接依赖类,因可以不需要添加进去,这些类可以在生成分dex列表时使用。
分析单元21,用于根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件。
所述分析单元21所执行的动作的详细解释请参考图3对应的实施例中的相应单元,在此不再赘述。
所述获取单元22,还用于获取默认keep文件。
其中,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到。
所述获取单元21所执行的动作的详细解释请参考图3对应的实施例中的相应单元,在此不再赘述。
替换单元23,用于采用所述自定义keep文件替换所述默认keep文件。
所述替换单元23所执行的动作的详细解释请参考图3对应的实施例中的相应单元,在此不再赘述。
文件生成单元24,用于根据所述自定义keep文件生成入口类文件集合。其中,所述文件生成单元24具体包括:处理子单元241和第一生成子单元242。
所述处理子单元241,用于按照混淆规则对所述自定义keep文件进行混淆处理。
所述第一生成子单元242,用于根据混淆处理后的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合。
具体的,采用所述分析单元21生成自定义keep文件后,会根据未被混淆的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合,这会导致产生的该入口类文件集合不够准确。本发明实施例中,为了提高入口类文件集合的准确性,会在生成入口类文件集合之前,所述处理子单元241按照混淆规则将自定义keep文件进行混淆处理,然后采用所述第一生成子单元242和预设的混淆处理后的所有类文件集合生成入口类文件集合。可选的,混淆规则可以是将所述自定义keep文件中的变量、函数和/或类的名称替换为预设的映射标识(如简短的英文字母代号),并将包含所述映射标识的自定义keep文件确定为混淆处理后的自定义keep文件。需要说明的是,混淆规则可以按照实际情况进行自定义生成,本发明不做限定。
所述列表生成单元25,还用于根据所述入口类文件集合生成目标主dex列表。其中,所述列表生成单元25具体包括:第二生成子单元251和第三生成子单元252。
所述第二生成子单元251,用于根据所述入口类文件集合生成初始主dex列表。
其中,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部类。
所述第三生成子单元252,用于将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表。
其中,所述目标主dex列表包括所述入口类直接依赖类和所有入口类匿名内部类。
具体的,采用所述分析单元21生成入口类文件集合之后,所述第二生成子单元251可以根据所述入口类文件集合生成初主dex列表,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部。然而,所生成的初始主dex列表中默认的入口类匿名内部类只是一部分入口类匿名内部类,这样的初始主dex列表并不完善。本发明实施例为了改善初始主dex列表,所述第三生成子单元252将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表,即最终完整的manidex_list.txt,这样,目标主dex列表中包括所有入口类匿名内部类,确保不遗漏需要的入口类匿名内部类。
在本发明实施例中,通过获取预设的自定义继承类集合,然后根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件,并获取默认keep文件之后,采用所述自定义keep文件替换所述默认keep文件,减小了keep文件大小,以便于产生较小的主dex列表,提高编译通过率,在此基础上,按照混淆规则对所述自定义keep文件进行混淆处理,根据混淆处理后的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合,提高了入口类文件集合的准确性,在此基础上,根据所述入口类文件集合生成初始主dex列表,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部类,然后将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表,所述目标主dex列表包括所述入口类直接依赖类和所有入口类匿名内部类,使主dex列表更加准确。综合上述,本发明实施例,提高了主dex列表的编译通过率和准确性。
请参见图5,为本发明实施例提供的又一种基于Gradle的编译优化装置的结构示意图。如图3所示,本发明实施例的所述编译优化装置1000可以包括:至少一个处理器1001,例如CPU,至少一个用户接口1002,存储器1003,至少一个通信总线1004。其中,通信总线1004用于实现这些组件之间的连接通信。其中,用户接口1002可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1002还可以包括标准的有线接口、无线接口。存储器1003可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1003可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图5所示,作为一种计算机存储介质的存储器1003中可以包括操作系统、用户接口模块以及Gradle构建工具。
在图5所示的编译优化装置1000中,处理器1001可以用于调用存储器1005中存储的Gradle构建工具,并具体执行以下步骤:
根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件;
获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到;
采用所述自定义keep文件替换所述默认keep文件,并根据所述自定义keep文件生成入口类文件集合;
根据所述入口类文件集合生成目标主dex列表。
在一个实施例中,所述处理器1001在执行在根据预设的自定义继承类集合对入口配置文件进行分析之前,还执行以下步骤:
获取预设的自定义继承类集合,所述自定义继承类集合包括默认继承类集合中去除service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的activity以外的所有默认继承类。
在一个实施例中,所述处理器1001在执行根据所述自定义keep文件生成入口类文件集合步骤时,具体执行以下步骤:
按照混淆规则对所述自定义keep文件进行混淆处理;
根据混淆处理后的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合。
在一个实施例中,所述处理器1001在执行按照混淆规则对所述自定义keep文件进行混淆处理时,具体执行以下步骤:
将所述自定义keep文件中的变量、函数和/或类的名称替换为预设的映射标识,并将包含所述映射标识的自定义keep文件确定为混淆处理后的自定义keep文件。
在一个实施例中,所述处理器1001在执行根据所述入口类文件集合生成目标主dex列表步骤时,具体执行以下步骤:
根据所述入口类文件集合生成初始主dex列表,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部类;
将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表,所述目标主dex列表包括所述入口类直接依赖类和所有入口类匿名内部类。
在本发明实施例中,通过获取预设的自定义继承类集合,然后根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件,并获取默认keep文件之后,采用所述自定义keep文件替换所述默认keep文件,减小了keep文件大小,以便于产生较小的主dex列表,提高编译通过率,在此基础上,按照混淆规则对所述自定义keep文件进行混淆处理,根据混淆处理后的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合,提高了入口类文件集合的准确性,在此基础上,根据所述入口类文件集合生成初始主dex列表,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部类,然后将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表,所述目标主dex列表包括所述入口类直接依赖类和所有入口类匿名内部类,使主dex列表更加准确。综合上述,本发明实施例,提高了主dex列表的编译通过率和准确性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (8)
1.一种基于Gradle的编译优化方法,其特征在于,所述方法包括:
根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件;
获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到;所述自定义keep文件和所述默认keep文件的格式均为mainfest_keep.txt;
采用所述自定义keep文件替换所述默认keep文件,并按照混淆规则对所述自定义keep文件进行混淆处理;所述混淆规则是将所述自定义keep文件中的变量、函数和/或类的名称替换为预设的映射标识;
根据混淆处理后的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合;
根据所述入口类文件集合生成目标主dex列表。
2.根据权利要求1所述的方法,其特征在于,在根据预设的自定义继承类集合对入口配置文件进行分析之前,还包括:
获取预设的自定义继承类集合,所述自定义继承类集合包括默认继承类集合中去除service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的activity以外的所有默认继承类。
3.根据权利要求2所述的方法,其特征在于,所述按照混淆规则对所述自定义keep文件进行混淆处理,包括:
将所述自定义keep文件中的变量、函数和/或类的名称替换为预设的映射标识,并将包含所述映射标识的自定义keep文件确定为混淆处理后的自定义keep文件。
4.根据权利要求1或2所述的方法,其特征在于,所述根据所述入口类文件集合生成目标主dex列表,包括:
根据所述入口类文件集合生成初始主dex列表,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部类;
将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表,所述目标主dex列表包括所述入口类直接依赖类和所有入口类匿名内部类。
5.一种基于Gradle的编译优化装置,其特征在于,包括:
分析单元,用于根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件;
获取单元,用于获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到;所述自定义keep文件和所述默认keep文件的格式均为mainfest_keep.txt;
替换单元,用于采用所述自定义keep文件替换所述默认keep文件;
文件生成单元,用于根据所述自定义keep文件生成入口类文件集合;
列表生成单元,用于根据所述入口类文件集合生成目标主dex列表;
其中,所述文件生成单元包括:
处理子单元,用于按照混淆规则对所述自定义keep文件进行混淆处理;所述混淆规则是将所述自定义keep文件中的变量、函数和/或类的名称替换为预设的映射标识;
第一生成子单元,用于根据混淆处理后的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口类文件集合。
6.根据权利要求5所述的编译优化装置,其特征在于,所述获取单元还用于:
获取预设的自定义继承类集合,所述自定义继承类集合包括默认继承类集合中去除service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的activity以外的所有默认继承类。
7.根据权利要求6所述的编译优化装置,其特征在于,所述处理子单元具体用于:
将所述自定义keep文件中的变量、函数和/或类的名称替换为预设的映射标识,并将包含所述映射标识的自定义keep文件确定为混淆处理后的自定义keep文件。
8.根据权利要求5或6所述的编译优化装置,其特征在于,所述列表生成单元包括:
第二生成子单元,用于根据所述入口类文件集合生成初始主dex列表,所述初始主dex列表包括入口类直接依赖类和默认的入口类匿名内部类;
第三生成子单元,用于将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表,所述目标主dex列表包括所述入口类直接依赖类和所有入口类匿名内部类。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610988055.7A CN106569868B (zh) | 2016-11-09 | 2016-11-09 | 一种基于Gradle的编译优化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610988055.7A CN106569868B (zh) | 2016-11-09 | 2016-11-09 | 一种基于Gradle的编译优化方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106569868A CN106569868A (zh) | 2017-04-19 |
CN106569868B true CN106569868B (zh) | 2019-12-31 |
Family
ID=58540984
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610988055.7A Active CN106569868B (zh) | 2016-11-09 | 2016-11-09 | 一种基于Gradle的编译优化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106569868B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108052314B (zh) * | 2017-12-26 | 2020-05-01 | 无线生活(杭州)信息科技有限公司 | 一种基于Gradle的插件打包的方法及装置 |
CN108073406A (zh) * | 2018-01-05 | 2018-05-25 | 世纪龙信息网络有限责任公司 | 生成主Dex的方法及装置 |
CN111966357B (zh) * | 2019-05-20 | 2024-02-27 | 北京车和家信息技术有限公司 | 一种操作系统应用编译方法、装置及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104992083A (zh) * | 2015-07-09 | 2015-10-21 | 广州视源电子科技股份有限公司 | 应用程序的代码混淆方法和系统 |
EP3021216A1 (en) * | 2014-11-14 | 2016-05-18 | Semmle Limited | Incremental source code analysis |
CN105843899A (zh) * | 2016-03-23 | 2016-08-10 | 炫彩互动网络科技有限公司 | 一种可简化编程的大数据自动化解析方法及系统 |
CN105975311A (zh) * | 2016-05-09 | 2016-09-28 | 腾讯科技(深圳)有限公司 | 一种应用启动方法及装置 |
-
2016
- 2016-11-09 CN CN201610988055.7A patent/CN106569868B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3021216A1 (en) * | 2014-11-14 | 2016-05-18 | Semmle Limited | Incremental source code analysis |
CN104992083A (zh) * | 2015-07-09 | 2015-10-21 | 广州视源电子科技股份有限公司 | 应用程序的代码混淆方法和系统 |
CN105843899A (zh) * | 2016-03-23 | 2016-08-10 | 炫彩互动网络科技有限公司 | 一种可简化编程的大数据自动化解析方法及系统 |
CN105975311A (zh) * | 2016-05-09 | 2016-09-28 | 腾讯科技(深圳)有限公司 | 一种应用启动方法及装置 |
Non-Patent Citations (2)
Title |
---|
Android MuItiDex实践:如何绕过那些坑?;徐冬Android程序员;《https://mp.weixin.qq.com/s?_biz=MzA4MjU5N》;20160406;第1-10页 * |
android傻瓜式MuItiDex插件,从此再也不用担心方法数问题!;Wei_Leng;《hops://blog.csdn.net/u014608640/article/details/53080216》;20161108;第1-8页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106569868A (zh) | 2017-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9525706B2 (en) | Apparatus and method for diagnosing malicious applications | |
CN107450941B (zh) | 自动打包方法、装置、存储介质和计算机设备 | |
US9747187B2 (en) | Simulating black box test results using information from white box testing | |
US8387017B2 (en) | Black box testing optimization using information from white box testing | |
US10878086B2 (en) | Dynamic code extraction-based automatic anti analysis evasion and code logic analysis apparatus | |
US8671397B2 (en) | Selective data flow analysis of bounded regions of computer software applications | |
CN106569868B (zh) | 一种基于Gradle的编译优化方法及装置 | |
US10496818B2 (en) | Systems and methods for software security scanning employing a scan quality index | |
CN106055375B (zh) | 应用程序安装方法及装置 | |
CN111124480B (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
US9571557B2 (en) | Script caching method and information processing device utilizing the same | |
CN103810096A (zh) | 混合程序分析方法和系统 | |
CN113688134A (zh) | 基于多维数据的可视化变量管理方法、系统及设备 | |
US9880813B2 (en) | RTE code generating method and apparatus performing the same | |
CN109040089B (zh) | 网络策略审计方法、设备及计算机可读存储介质 | |
CN105912466B (zh) | 应用异常信息的处理方法及装置 | |
CN112543104A (zh) | 应用程序打包方法、装置、电子设备及存储介质 | |
CN113535270B (zh) | 一种软件启动方法和装置 | |
CN110737911A (zh) | 数据处理方法、装置和计算机可读存储介质 | |
CN110262787B (zh) | 语句替换方法、装置和电子设备 | |
CN113312880B (zh) | 文本形式转换方法、装置及电子设备 | |
WO2022123763A1 (ja) | コールグラフ作成装置、コールグラフ作成方法及びプログラム | |
US20230385188A1 (en) | Method, non-transitory computer-readable medium, and apparatus for analyzing source code | |
US10949536B1 (en) | Field-loadable input/output tables for avionics hardware units | |
CN117971647A (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 |