• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 17
    • 下载费用:30 金币  

    重庆时时彩官方开奖视频直播: 一种基于GRADLE的编译优化方法及装置.pdf

    关 键 词:
    一种 基于 GRADLE 编译 优化 方法 装置
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201610988055.7

    申请日:

    2016.11.09

    公开号:

    CN106569868A

    公开日:

    2017.04.19

    当前法律状态:

    实审

    有效性:

    审中

    法律详情: 实质审查的生效IPC(主分类):G06F 9/45申请日:20161109|||公开
    IPC分类号: G06F9/45 主分类号: G06F9/45
    申请人: 腾讯音乐娱乐(深圳)有限公司
    发明人: 潘志舟
    地址: 518052 广东省深圳市前海深港合作区前湾一路1号A栋201室
    优先权:
    专利代理机构: 广州三环专利代理有限公司 44202 代理人: 郝传鑫;熊永强
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201610988055.7

    授权公告号:

    |||

    法律状态公告日:

    2017.05.17|||2017.04.19

    法律状态类型:

    实质审查的生效|||公开

    摘要

    本发明实施例公开一种基于Gradle的编译优化方法及装置,其中方法包括如下步骤:根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件;获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析所得到;采用所述自定义keep文件替换所述默认keep文件,并根据所述自定义keep文件生成入口类文件集合;根据所述入口类文件集合生成目标主dex列表。本发明实施例可以在Gradle编译过程中产生较小的主dex列表,提高了Gradle的编译通过率。

    权利要求书

    1.一种基于Gradle的编译优化方法,其特征在于,所述方法包括:
    根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定义keep文件;
    获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配置文件进行分析
    所得到;
    采用所述自定义keep文件替换所述默认keep文件,并根据所述自定义keep文件生成入
    口类文件集合;
    根据所述入口类文件集合生成目标主dex列表。
    2.根据权利要求1所述的方法,其特征在于,在根据预设的自定义继承类集合对入口配
    置文件进行分析之前,还包括:
    获取预设的自定义继承类集合,所述自定义继承类集合包括默认继承类集合中去除
    service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的
    activity以外的所有默认继承类。
    3.根据权利要求1或2所述的方法,其特征在于,所述根据所述自定义keep文件生成入
    口类文件集合,包括:
    按照混淆规则对所述自定义keep文件进行混淆处理;
    根据混淆处理后的自定义keep文件和预设的混淆处理后的所有类文件集合生成入口
    类文件集合。
    4.根据权利要求3所述的方法,其特征在于,所述按照混淆规则对所述自定义keep文件
    进行混淆处理,包括:
    将所述自定义keep文件中的变量、函数和/或类的名称替换为预设的映射标识,并将包
    含所述映射标识的自定义keep文件确定为混淆处理后的自定义keep文件。
    5.根据权利要1或2所述的方法,其特征在于,所述根据所述入口类文件集合生成目标
    主dex列表,包括:
    根据所述入口类文件集合生成初始主dex列表,所述初始主dex列表包括入口类直接依
    赖类和默认的入口类匿名内部类;
    将所有入口匿名内部类中处理所述默认的入口类匿名内部类以外的入口匿名内部类
    均添加到所述初始主dex列表,生成目标主dex列表,所述目标主dex列表包括所述入口类直
    接依赖类和所有入口类匿名内部类。
    6.一种基于Gradle的编译优化装置,其特征在于,包括:
    分析单元,用于根据预设的自定义继承类集合对入口配置文件进行分析,以生成自定
    义keep文件;
    获取单元,用于获取默认keep文件,所述默认keep文件是由默认继承类集合对入口配
    置文件进行分析所得到;
    替换单元,用于采用所述自定义keep文件替换所述默认keep文件;
    文件生成单元,用于根据所述自定义keep文件生成入口类文件集合;
    列表生成单元,用于根据所述入口类文件集合生成目标主dex列表。
    7.根据权利要求6所述的编译优化装置,其特征在于,所述获取单元还用于:
    获取预设的自定义继承类集合,所述自定义继承类集合包括默认继承类集合中去除
    service及其对应的继承类、receiver及其对应的继承类以及export属性不为true的
    activity以外的所有默认继承类。
    8.根据权利要求6或7所述的编译优化装置,其特征在于,所述文件生成单元包括:
    处理子单元,用于按照混淆规则对所述自定义keep文件进行混淆处理;
    第一生成子单元,用于根据混淆处理后的自定义keep文件和预设的混淆处理后的所有
    类文件集合生成入口类文件集合。
    9.根据权利要求8所述的编译优化装置,其特征在于,所述处理子单元具体用于:
    将所述自定义keep文件中的变量、函数和/或类的名称替换为预设的映射标识,并将包
    含所述映射标识的自定义keep文件确定为混淆处理后的自定义keep文件。
    10.根据权利要6或7所述的编译优化装置,其特征在于,所述列表生成单元包括:
    第二生成子单元,用于根据所述入口类文件集合生成初始主dex列表,所述初始主dex
    列表包括入口类直接依赖类和默认的入口类匿名内部类;
    第三生成子单元,用于将所有入口匿名内部类中处理所述默认的入口类匿名内部类以
    外的入口匿名内部类均添加到所述初始主dex列表,生成目标主dex列表,所述目标主dex列
    表包括所述入口类直接依赖类和所有入口类匿名内部类。

    说明书

    一种基于Gradle的编译优化方法及装置

    技术领域

    本发明涉及计算机技术领域,尤其涉及一种基于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的编译优化装置的结构示意图。

    具体实施方式

    下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完
    整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例?;?br />本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
    实施例,都属于本发明?;さ姆段?。

    下面将结合附图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中可以包括操作系统、用户接口??橐?br />及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 Access
    Memory,RAM)等。

    以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范
    围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

    关于本文
    本文标题:一种基于GRADLE的编译优化方法及装置.pdf
    链接地址://www.4mum.com.cn/p-6092859.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 多彩贵州蓝球杀号 南京麻将三打四包规则 云南时时彩走势图表 移动棋牌大厅下载 2016开滴滴还赚钱吗 大乐透规则 排列三走势图2元 吉林时时彩在哪购买 福建体育彩票官网 江西快3今天开奖结果走势图 湖北11选5开奖直播 象棋在线 山西快乐十分开奖派彩 牛牛娱乐棋牌 竞彩足球指数分析法 企业投资什么项目赚钱