显著减少项目gradle编译时间

news/2024/7/5 21:38:56

原文来自https://zeroturnaround.com/rebellabs/making-gradle-builds-faster/


1.对build过程进行配置实现编译优化:

(1)首先了解如何用命令行进行编译:

使用git命令行进入项目根目录,然后执行

./gradlew :app:assembleDebug --dry-run
这样显示编译成功后也会在底部显示编译的总时间。

第一次编译会对依赖等进行处理,时间会长一些。

(2)显示编译的详细时间

只需要在命令行中加入--profile,也就是

./gradlew :app:assembleDebug --dry-run --profile
项目目录的build/reports/profile下就会出现一个html文件,里面显示了编译的几个环节以及所需的时间:


(3)设置按需编译:

我们可以设置gradle只在需要编译的地方进行编译,这个功能是graldle的一个隐藏功能,只需要在命令行中加入--config-on-demand即可

再次编译后就会发现编译时间有明显减少。


(4)设置daemon:

gradle是通过jvm进行编译的,而daemon可以大大减少加载jvm和classes等的时间,使用只需要加入--daemon


2.使用最新版本的gradle:

gradlex每次更新工程师都会对它进行优化,所以使用最新的gradle自然会获得最快的速度

(文档里的更新部分没有看懂,待指教)

同理也应该使用最新的java


3.固定依赖版本:

在gradle文件里设置的各种依赖库的版本是可以动态指定的,版本号使用+代替。但是这样的话会带来很多问题,首先,编译时编译器会连接网络寻找这个库的最新版本,然后有可能会进行更新,耗费很多时间。其次,由于版本的不确定,在将项目移植到别的地方时也会出现版本不对应编译不通过的问题。所以,将库的版本写死是最好的选择。



4.将项目模块化:

将项目进行模块化的架构设计有什么好处呢,gradle拥有将这些模块进行并行编译的能力,这显然会大大提高效率。为了支持这种并行操作,需要在命令行中加入--parallel。



http://www.niftyadmin.cn/n/4646363.html

相关文章

CVE-2018-12613(远程文件包含)

问题在index.php的55~63行// If we have a valid target, lets load that script instead if (! empty($_REQUEST[target])&& is_string($_REQUEST[target])&& ! preg_match(/^index/, $_REQUEST[target])&& ! in_array($_REQUEST[target], $target_bl…

Support Design库中的BottomSheetDialog组件使用

首先来看这个组件使用的经典案例,微信公众号文章操作功能显示: 首先要知道BottomSheetDialog有两种,第一种弹出后不影响主界面交互,第二种弹出后主界面变暗不能交互,这里分别进行使用。 1.首先是普通的BottomSheetDia…

Netty内存池ByteBuf 内存回收

内存池ByteBuf 内存回收: 在前面的章节中我们有提到, 堆外内存是不受JVM 垃圾回收机制控制的, 所以我们分配一块堆外内存进行ByteBuf 操作时, 使用完毕要对对象进行回收, 本节就以PooledUnsafeDirectByteBuf 为例讲解有关内存分配的相关逻辑。PooledUnsafeDirectByteBuf 中内存…

Android 导入库文件在主工程使用不了库文件的代码

主工程不识别这个文件 但是我明明加入这个lib库了为什么使用不了呢? 原因在这里 将库文件里面的build.gradle中的依赖implementation转换成api 然后sync一下 酱酱酱~~~不报错啦 是不是超级简单?

SocketChannel 读取ByteBuf 的过程

SocketChannel 读取ByteBuf 的过程: 我们首先看NioEventLoop 的processSelectedKey 方法: private void processSelectedKey(SelectionKey k, AbstractNioChannel ch) {//获取到channel 中的unsafefinal AbstractNioChannel.NioUnsafe unsafe ch.unsafe…

ReactNative学习实例(八) 第三方组件TabNavigator底部导航栏

TabNavigator是github上开源的一个rn组件,是适用于ios和安卓两个平台的底部导航栏。 组件地址:https://github.com/expo/react-native-tab-navigator 1.首先通过命令行将组件引入项目: 进入项目根目录并执行 npm install react-native-tab-…

switch-case内不能定义变量?

1. 报错 switch(something) { case a: int a 0; break; default: break;   } 结果报错: error: cannot jump from switch statement to this case label…… 2. 错误原因 究其根本原因,是C的一条规则:在任何作用域内…

RestTemplate-记录

org.springframework.web.client.RestTemplate 1、从使用功能上看,是一种简化请求响应的工具类,从发送请求,到对返回的结果进行json解析。格式不对会有异常。 转载于:https://www.cnblogs.com/fateSpace/p/11319311.html