增量编译方法、装置、存储介质及电子设备与流程

文档序号:36225849发布日期:2023-11-30 12:40阅读:105来源:国知局
增量编译方法与流程

本公开的实施方式涉及软件开发,更具体地,本公开的实施方式涉及一种增量编译方法、增量编译装置、计算机可读存储介质及电子设备。


背景技术:

1、本部分旨在为权利要求中陈述的本公开的实施方式提供背景或上下文,此处的描述不因为包括在本部分中就承认是现有技术。

2、增量编译,也称为差量编译或部分编译,指的是只编译源码中发生更改的部分,而不用重新编译整个应用程序。增量编译可以显著减少编译时间。

3、gradle是一个构建项目的工具,将它用来编译android app,能够简化编译、打包、测试过程。比如:eclipse最初是用来做java开发的,google为了能在eclipse上进行android开发,开发了adt插件(android developer tools),正是因为有了adt,才可以在eclipse上进行编译、运行、签名、打包等一些列流程,adt就是构建工具。

4、为了支持gradle能在as上使用,google开发了一个as的插件叫android gradleplugin,能在as上使用google完全是因为这个插件的原因。它一边调用gradle本身的代码和批处理工具来构建项目,一边调用android sdk的编译、打包功能,从而能够顺畅的在as上进行开发。android gradle plugin会有版本号,每个版本号又对应有一个或一些gradle发行版本(一般是限定一个最低版本)。

5、相关技术中,大多增量编译方案适用于android gradle plugin 4.1及以下版本。


技术实现思路

1、然而,现有的增量编译方案大多适用于android gradle plugin 4.1及以下版本,如此,使得android gradle plugin 4.2及以上版本的增量编译耗时较长,效率较低。

2、为此,非常需要一种改进的增量编译方法,以减少android gradle plugin 4.2及以上版本的增量编译耗时,提高效率。

3、在本上下文中,本公开的实施方式期望提供一种增量编译方法、增量编译装置、计算机可读存储介质及电子设备。

4、根据本公开的第一方面,提供一种增量编译方法,所述方法包括:对dexmerge编译流程中增量编译的变化量进行hook挂钩,得到hook后的增量编译的变化量;将所述hook后的增量编译的变化量作为dexmerge编译流程的输入,执行dexmerge编译流程,得到dexmerge编译流程的变化输出,并将所述dexmerge编译流程的变化输出存储至预设目录;基于所述dexmerge编译流程的变化输出,对package编译流程进行hook,以使应用程序包apk运行时先加载所述dexmerge编译流程的变化输出。

5、在一种实施方式中,所述对dexmerge编译流程中增量编译的变化量进行hook,得到hook后的增量编译的变化量,包括:通过agp流程获取dexmerge编译流程中增量编译的变化量;所述增量编译的变化量为发生变化的jar文件和/或包括dex文件的文件夹;对所述增量编译的变化量进行hook,得到hook后的增量编译的变化量。

6、在一种实施方式中,所述方法还包括:在存在多次增量编译的变化量时,对于每一次增量编译的变化量,按照执行的先后顺序在所述预设目录中存储所述dexmerge编译流程的变化输出。

7、在一种实施方式中,所述基于所述dexmerge编译流程的变化输出,对package编译流程进行hook,包括:建立dexmerge编译流程的输出中的dex文件与apk中dex文件之间的映射关系,得到映射表;将所述dexmerge编译流程的变化输出中的dex文件排列在所述映射表中原dexmerge编译流程的输出中的dex文件之前,得到更新后的映射表。

8、在一种实施方式中,所述方法还包括:记录所述dexmerge编译流程中发生变化的dex文件;根据所述dexmerge编译流程中发生变化的dex文件与apk中dex文件的对应关系,确定所述映射表。

9、在一种实施方式中,所述方法还包括:通过字节码插桩技术将原输入中状态为变更的输入修改为transform编译流程的输入。

10、在一种实施方式中,所述通过字节码插桩技术修改transform编译流程的输入,包括:通过字节码插桩技术将所述transform编译流程中状态为未变更的输入移除,将其余输入作为transform编译流程的输入。

11、在一种实施方式中,所述dexmerge编译流程或者所述transform编译流程通过agp插件执行。

12、根据本公开的第二方面,提供一种增量编译装置,所述装置包括:第一hook模块,被配置为对dexmerge编译流程中增量编译的变化量进行hook挂钩,得到hook后的增量编译的变化量;dexmerge编译流程执行模块,被配置为将所述hook后的增量编译的变化量作为dexmerge编译流程的输入,执行dexmerge编译流程,得到dexmerge编译流程的变化输出,并将所述dexmerge编译流程的变化输出存储至预设目录;第二hook模块,被配置为基于所述dexmerge编译流程的变化输出,对package编译流程进行hook,以使应用程序包apk运行时先加载所述dexmerge编译流程的变化输出。

13、在一种实施方式中,所述第一hook模块被配置为:通过agp流程获取dexmerge编译流程中增量编译的变化量;所述增量编译的变化量为发生变化的jar文件和/或包括dex文件的文件夹;对所述增量编译的变化量进行hook,得到hook后的增量编译的变化量。

14、在一种实施方式中,所述dexmerge编译流程执行模块还被配置为:在存在多次增量编译的变化量时,对于每一次增量编译的变化量,按照执行的先后顺序在所述预设目录中存储所述dexmerge编译流程的变化输出。

15、在一种实施方式中,所述第二hook模块还被配置为:建立dexmerge编译流程的输出中的dex文件与apk中dex文件之间的映射关系,得到映射表;将所述dexmerge编译流程的变化输出中的dex文件排列在所述映射表中原dexmerge编译流程的输出中的dex文件之前,得到更新后的映射表。

16、在一种实施方式中,所述第二hook模块还被配置为:记录所述dexmerge编译流程中发生变化的dex文件;根据所述dexmerge编译流程中发生变化的dex文件与apk中dex文件的对应关系,确定所述映射表。

17、在一种实施方式中,所述装置还包括transform编译流程执行模块,被配置为:通过字节码插桩技术将原输入中状态为变更的输入修改为transform编译流程的输入。

18、在一种实施方式中,所述transform编译流程执行模块还被配置为:通过字节码插桩技术将所述transform编译流程中状态为未变更的输入移除,将其余输入作为transform编译流程的输入。

19、在一种实施方式中,所述dexmerge编译流程或者所述transform编译流程通过agp插件执行。

20、根据本公开的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种方法。

21、根据本公开的第四方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一种方法。

22、根据本公开实施方式的增量编译方法、增量编译装置、计算机可读存储介质及电子设备,通过hook dexmerge编译流程,将原本agp的输入修改为hook后的增量编译的变化量,在gradle运行前,将修改后的增量编译的变化量插入agp组件中,实现dexmerge增量编译的优化,减少dexmerge增量编译的耗时,提高dexmerge增量编译的效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1