CN112083930A - 安卓项目编译过程的优化方法 - Google Patents
安卓项目编译过程的优化方法 Download PDFInfo
- Publication number
- CN112083930A CN112083930A CN202010960085.3A CN202010960085A CN112083930A CN 112083930 A CN112083930 A CN 112083930A CN 202010960085 A CN202010960085 A CN 202010960085A CN 112083930 A CN112083930 A CN 112083930A
- Authority
- CN
- China
- Prior art keywords
- annotation
- file
- class
- compiling
- information
- 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 48
- 238000005457 optimization Methods 0.000 title claims abstract description 14
- 238000009434 installation Methods 0.000 claims abstract description 6
- 238000013507 mapping Methods 0.000 claims description 3
- 230000000284 resting effect Effects 0.000 abstract description 3
- 238000004904 shortening Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 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/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了安卓项目编译过程的优化方法,包括新建安卓项目的编译源文件,使用注解处理器收集源文件下各个子模块注解的类信息并生成对应的类文件;扫描获取所述类文件对应的注解类信息;判断所获取的所述注解类信息是否与上一次编译过程所获取的注解类信息相同,并根据判断结果确定是否重新生成可执行文件;将所述可执行文件转化成安装包并生成应用程序。本发明的安卓项目编译过程的优化方法,通过只将部分修改的注解类信息重新转换成可执行文件,减少工作量,从而优化编译速度,缩短至原来没有进行优化的50%,提高开发效率,以更少的时间解决更多的需求,另外,缩短了编译时间后也减少了安卓开发工具休息时间的比例。
Description
技术领域
本发明属于编译优化技术领域,具体涉及一种安卓项目编译过程的优化方法。
背景技术
如今,安卓项目编译项目十分缓慢,特别是对于百万行代码级别的大项目来说,进行一次全量Rebuild Project(重新连编项目)至少需要5分钟。在某些快速验证某个功能的场景,只改动几行代码的增量编译,也需要3分钟左右的运行时间,对于代码开发来说,严重影响了开发效率和体验,因此针对安卓项目编译构建耗时进行优化显得尤为重要。
虽然现在市面上有一些编译优化的方案,例如1:项目组件化和模块化,拆分出多个子模块,将子模块列入编译进项目,进行增量编译的时候只需要编译子模块即可;例如2:搭建私有仓库,大部分依赖包只需要在此仓库查找,降低编译时间,但是,最多也只能将编译时间优化至原来的70%左右,这还远远不够,所以我们需要对此进行优化。
发明内容
为了解决上述问题,本发明提供一种安卓项目编译过程的优化方法,减少工作量,优化编译速度,大大缩短编译安卓项目的时间,提高开发效率。
本发明所采用的技术方案是:
一种安卓项目编译过程的优化方法,包括如下步骤:
S1、新建安卓项目的编译源文件,使用注解处理器收集源文件下各个子模块注解的类信息并生成对应的类文件;
S2、扫描获取所述类文件对应的注解类信息;
S3、判断所获取的所述注解类信息是否与上一次编译过程所获取的注解类信息相同,并根据判断结果确定是否重新生成可执行文件;
S4、将所述可执行文件转化成安装包并生成应用程序。
优选地,所述S3具体为:
判断所获取的所述注解类信息是否与上一次编译过程所获取的注解类信息相同,若相同,则采用上一次编译生成的可执行文件,若不同,则将获取的注解类信息重新转换生成对应的可执行文件。
优选地,所述S2具体包括如下步骤:
S21、新建一自定义的类文件,通过类库工具将本次编译收到的所述注解类信息插桩注入所述自定义的类文件的内存中;
S22、通过业务代码扫描获取所述内存中各个模块动态生成的所有注解类信息。
优选地,所述类库工具是用于在源文件中编辑字节码的类库的工具。
优选地,所述安卓项目的编译源文件包括java文件、jar文件和资源文件。
优选地,若所述编译源文件为jar文件,则S3中,将获取的注解类信息重新转换生成对应的可执行文件具体为:
将所述安卓项目中的jar文件映射为目录输入文件,将所述目录输入文件中不相同的注解类信息所对应的类文件转换生成对应的可执行文件。
优选地,所述S1中,模块注解的类信息为一个或多个。
与现有技术相比,本发明的安卓项目编译过程的优化方法,通过只将部分修改的注解类信息重新转换成可执行文件,减少工作量,从而优化编译速度,大大缩短编译安卓项目的时间,缩短至原来没有进行优化的50%,提高开发效率,以更少的时间解决更多的需求,另外,缩短了编译时间后也减少了安卓开发工具休息时间的比例。
附图说明
图1是本发明实施例提供的一种安卓项目编译过程的优化方法的流程图;
图2是本发明实施例提供的一种安卓项目编译过程的优化方法的具体流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例提供一种安卓项目编译过程的优化方法,如图1-2所示,包括如下步骤:
S1、新建安卓项目的编译源文件,使用注解处理器收集源文件下各个子模块注解的类信息并生成对应的类文件;
S2、扫描获取所述类文件对应的注解类信息;
S3、判断所获取的所述注解类信息是否与上一次编译过程所获取的注解类信息相同,并根据判断结果确定是否重新生成可执行文件;
S4、将所述可执行文件转化成安装包并生成应用程序。
这样,通过新建安卓项目的编译源文件,使用注解处理器收集源文件下各个子模块注解的类信息(即class信息)并生成对应的类文件;扫描获取所述类文件对应的注解类信息;判断所获取的所述注解类信息是否与上一次编译过程所获取的注解类信息相同,并根据判断结果确定是否重新生成可执行文件;将所述可执行文件转化成安装包并生成应用程序。即通过只将部分修改的注解类信息重新转换成可执行文件,减少工作量,从而优化编译速度,大大缩短编译安卓项目的时间,缩短至原来没有进行优化的50%,提高开发效率,以更少的时间解决更多的需求,另外,缩短了编译时间后也减少了安卓开发工具休息时间的比例。
其中,所述安卓项目包括java文件、jar文件和资源文件。模块注解的类信息为一个或多个。注解处理器,即APT(Annotation Processing Tool),用于收集模块注解的类信息;类库工具,即JAVA programming ASSISTant是在Java文件中编辑字节码的类库的工具;可执行文件,即dex文件。
注解处理器(Annotation Processing Tool)是javac内置的工具,用于在编译时期扫描和处理注解信息,从JDK6开始,apt暴露了可用的API。一个特定的处理器接收一个Java源代码或已编译的字节码作为输入,然后输出一些文件(通常是.java文件)。这就意味着你可以使用apt动态生成代码逻辑,需要注意的是apt仅可以生成新的Java类而不能对已存在的Java类进行修改。所有生成的Java类将和其他源代码一起被javac编译。
Jar文件,(Java Archive,Java归档文件)是一种软件包文件格式。它允许将许多文件组合成一个压缩文件,以流行的ZIP文件格式为基础,不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和JVM这样的工具直接使用。
具体工作过程:
S1、新建安卓项目的编译源文件(包括java文件、jar文件和资源文件),使用注解处理器收集源文件下各个子模块注解的类信息并生成对应的类文件,其中,模块注解的类信息为一个或多个;
S21、新建一自定义的类文件,通过类库工具将本次编译收到的所述注解类信息插桩注入所述自定义的类文件的内存中,其中类库工具是用于在源文件中编辑字节码的类库的工具;
S22、通过业务代码扫描获取所述内存中各个模块动态生成的所有注解类信息;
S3、判断所获取的所述注解类信息是否与上一次编译过程所获取的注解类信息相同,若相同,则采用上一次编译生成的可执行文件,省去生成可执行文件(dex文件)的时间,若不同,则将获取的注解类信息重新转换生成对应的可执行文件;
若所述编译源文件为jar文件,将获取的注解类信息重新转换生成对应的可执行文件具体为:将所述安卓项目中的jar文件映射为目录输入文件,将所述目录输入文件中不相同的注解类信息(即class文件)所对应的类文件转换生成对应的可执行文件(即dex文件),即子模块修改代码时,只需要重新编译目录中被修改的注解类信息为执行文件,而不是将原来的整个jar文件内所有注解类信息重新执行执行文件编译,从而节省生成可执行文件的时间。
S4、将所述可执行文件转化成安装包(即APK文件)并生成应用程序(即APP)。
本发明的安卓项目编译过程的优化方法,通过只将部分修改的注解类信息重新转换成可执行文件,减少工作量,解决了安卓项目编译缓慢的问题,从而优化编译速度,大大缩短编译安卓项目的时间,缩短至原来没有进行优化的50%,提高开发效率,以更少的时间解决更多的需求,另外,缩短了编译时间后也减少了安卓开发工具休息时间的比例。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (7)
1.一种安卓项目编译过程的优化方法,其特征在于,包括如下步骤:
S1、新建安卓项目的编译源文件,使用注解处理器收集源文件下各个子模块注解的类信息并生成对应的类文件;
S2、扫描获取所述类文件对应的注解类信息;
S3、判断所获取的所述注解类信息是否与上一次编译过程所获取的注解类信息相同,并根据判断结果确定是否重新生成可执行文件;
S4、将所述可执行文件转化成安装包并生成应用程序。
2.根据权利要求1所述的安卓项目编译过程的优化方法,其特征在于,所述S3具体为:
判断所获取的所述注解类信息是否与上一次编译过程所获取的注解类信息相同,若相同,则采用上一次编译生成的可执行文件,若不同,则将获取的注解类信息重新转换生成对应的可执行文件。
3.根据权利要求1或2所述的安卓项目编译过程的优化方法,其特征在于,所述S2具体包括如下步骤:
S21、新建一自定义的类文件,通过类库工具将本次编译收到的所述注解类信息插桩注入所述自定义的类文件的内存中;
S22、通过业务代码扫描获取所述内存中各个模块动态生成的所有注解类信息。
4.根据权利要求1所述的安卓项目编译过程的优化方法,其特征在于,所述类库工具是用于在源文件中编辑字节码的类库的工具。
5.根据权利要求3所述的安卓项目编译过程的优化方法,其特征在于,所述安卓项目的编译源文件包括java文件、jar文件和资源文件。
6.根据权利要求5所述的安卓项目编译过程的优化方法,其特征在于,若所述编译源文件为jar文件,则S3中,将获取的注解类信息重新转换生成对应的可执行文件具体为:
将所述安卓项目中的jar文件映射为目录输入文件,将所述目录输入文件中不相同的注解类信息所对应的类文件转换生成对应的可执行文件。
7.根据权利要求1所述的安卓项目编译过程的优化方法,其特征在于,所述S1中,模块注解的类信息为一个或多个。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010960085.3A CN112083930B (zh) | 2020-09-14 | 2020-09-14 | 安卓项目编译过程的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010960085.3A CN112083930B (zh) | 2020-09-14 | 2020-09-14 | 安卓项目编译过程的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112083930A true CN112083930A (zh) | 2020-12-15 |
CN112083930B CN112083930B (zh) | 2024-06-14 |
Family
ID=73737654
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010960085.3A Active CN112083930B (zh) | 2020-09-14 | 2020-09-14 | 安卓项目编译过程的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112083930B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612477A (zh) * | 2020-12-29 | 2021-04-06 | 广州亚美信息科技有限公司 | 业务实现方法、装置、设备和存储介质 |
CN112882718A (zh) * | 2021-02-26 | 2021-06-01 | 百果园技术(新加坡)有限公司 | 编译处理方法、装置、设备及存储介质 |
CN112925562A (zh) * | 2021-02-19 | 2021-06-08 | 京东方科技集团股份有限公司 | 基于安卓系统的应用生成的方法、装置及存储介质 |
CN112965940A (zh) * | 2021-03-04 | 2021-06-15 | 中国邮政储蓄银行股份有限公司 | 项目文件的展示方法及展示装置、电子设备、处理器 |
CN116107585A (zh) * | 2023-02-17 | 2023-05-12 | 广州市保伦电子有限公司 | 一种服务器端编译时期xml生成方法及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20110114754A (ko) * | 2010-04-14 | 2011-10-20 | (주)앵글스톤테크놀러지 | 에스케이브이엠 및 위피자바 응용프로그램을 안드로이드 응용프로그램으로 변환하는 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 |
CN104573416A (zh) * | 2013-10-25 | 2015-04-29 | 腾讯科技(深圳)有限公司 | 一种生成应用安装包、执行应用的方法及装置 |
CN106648786A (zh) * | 2016-12-28 | 2017-05-10 | 深圳Tcl数字技术有限公司 | Android应用程序构建方法及系统 |
CN107391218A (zh) * | 2017-07-07 | 2017-11-24 | 北京小米移动软件有限公司 | 编译方法及装置、电子设备和计算机可读存储介质 |
CN109298860A (zh) * | 2018-09-27 | 2019-02-01 | 高新兴科技集团股份有限公司 | 基于Android系统的线程切换方法、装置及计算机存储介质 |
CN109408354A (zh) * | 2018-11-14 | 2019-03-01 | 拉扎斯网络科技(上海)有限公司 | 应用组件的数据处理方法和装置 |
CN110007925A (zh) * | 2019-04-01 | 2019-07-12 | 睿驰达新能源汽车科技(北京)有限公司 | 一种提升应用程序运行性能的方法及装置 |
CN111367510A (zh) * | 2020-02-24 | 2020-07-03 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种安卓功能模块开发的方法及装置 |
-
2020
- 2020-09-14 CN CN202010960085.3A patent/CN112083930B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20110114754A (ko) * | 2010-04-14 | 2011-10-20 | (주)앵글스톤테크놀러지 | 에스케이브이엠 및 위피자바 응용프로그램을 안드로이드 응용프로그램으로 변환하는 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 |
CN104573416A (zh) * | 2013-10-25 | 2015-04-29 | 腾讯科技(深圳)有限公司 | 一种生成应用安装包、执行应用的方法及装置 |
CN106648786A (zh) * | 2016-12-28 | 2017-05-10 | 深圳Tcl数字技术有限公司 | Android应用程序构建方法及系统 |
CN107391218A (zh) * | 2017-07-07 | 2017-11-24 | 北京小米移动软件有限公司 | 编译方法及装置、电子设备和计算机可读存储介质 |
CN109298860A (zh) * | 2018-09-27 | 2019-02-01 | 高新兴科技集团股份有限公司 | 基于Android系统的线程切换方法、装置及计算机存储介质 |
CN109408354A (zh) * | 2018-11-14 | 2019-03-01 | 拉扎斯网络科技(上海)有限公司 | 应用组件的数据处理方法和装置 |
CN110007925A (zh) * | 2019-04-01 | 2019-07-12 | 睿驰达新能源汽车科技(北京)有限公司 | 一种提升应用程序运行性能的方法及装置 |
CN111367510A (zh) * | 2020-02-24 | 2020-07-03 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种安卓功能模块开发的方法及装置 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612477A (zh) * | 2020-12-29 | 2021-04-06 | 广州亚美信息科技有限公司 | 业务实现方法、装置、设备和存储介质 |
CN112612477B (zh) * | 2020-12-29 | 2024-05-24 | 亚美智联数据科技有限公司 | 业务实现方法、装置、设备和存储介质 |
CN112925562A (zh) * | 2021-02-19 | 2021-06-08 | 京东方科技集团股份有限公司 | 基于安卓系统的应用生成的方法、装置及存储介质 |
WO2022174613A1 (zh) * | 2021-02-19 | 2022-08-25 | 京东方科技集团股份有限公司 | 基于安卓系统的应用生成的方法、装置及存储介质 |
CN112882718A (zh) * | 2021-02-26 | 2021-06-01 | 百果园技术(新加坡)有限公司 | 编译处理方法、装置、设备及存储介质 |
CN112882718B (zh) * | 2021-02-26 | 2024-03-01 | 百果园技术(新加坡)有限公司 | 编译处理方法、装置、设备及存储介质 |
CN112965940A (zh) * | 2021-03-04 | 2021-06-15 | 中国邮政储蓄银行股份有限公司 | 项目文件的展示方法及展示装置、电子设备、处理器 |
CN112965940B (zh) * | 2021-03-04 | 2024-05-28 | 中国邮政储蓄银行股份有限公司 | 项目文件的展示方法及展示装置、电子设备、处理器 |
CN116107585A (zh) * | 2023-02-17 | 2023-05-12 | 广州市保伦电子有限公司 | 一种服务器端编译时期xml生成方法及装置 |
CN116107585B (zh) * | 2023-02-17 | 2024-03-08 | 广东保伦电子股份有限公司 | 一种服务器端编译时期xml生成方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112083930B (zh) | 2024-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112083930B (zh) | 安卓项目编译过程的优化方法 | |
US7472375B2 (en) | Creating managed code from native code | |
CN111078290B (zh) | 一种用于可扩展指令集的编译器及编译方法 | |
CN113872948A (zh) | 一种执行智能合约的方法、区块链节点和节点设备 | |
CN109032631B (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
US8001518B2 (en) | Configuring a shared library to accommodate relocatable data in a pervasive device | |
US6934940B2 (en) | Source code transformation-temporary object reduction | |
US7213237B2 (en) | Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code | |
KR19980080502A (ko) | 템플릿 오브젝트 파일들을 최적화하기 위한 시스템과 방법 | |
EP1728155A2 (en) | Method and system for performing link-time code optimization without additional code analysis | |
CN106648755B (zh) | 一种在安卓art环境中动态加载dex的方法及装置 | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
CN112882718B (zh) | 编译处理方法、装置、设备及存储介质 | |
CN111770204B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
JP3813087B2 (ja) | プログラム変換方法、コンピュータ装置及びプログラム | |
US20060101437A1 (en) | Data processing device and method | |
CN111770116A (zh) | 一种执行智能合约的方法、区块链节点、存储介质 | |
CN110659088B (zh) | 一种嵌入式环境下程序扩展的方法及系统 | |
JPH10507016A (ja) | ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ | |
CN111061486B (zh) | 一种安卓应用程序增量方法 | |
CN113360156B (zh) | 一种ios编译方法及相关设备 | |
CN116594622A (zh) | 基于类型推导与数据流分析的Python程序编译方法及系统 | |
CN113220327B (zh) | 智能合约升级方法及区块链系统 | |
US20050125783A1 (en) | Program optimization with intermediate code | |
JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム |
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 |