原文地址:https://medium.com/@cesarmcferreira/speeding-up-gradle-builds-619c442113cb#.1vekus12m
新的Android项目构建系统Gradle是基于JVN为基础的构建工具的进化。它从已经发布的工具(如Ant和Maven)中吸取经验,并将它们最好的观念提升到了新的高度。随着Android项目变得愈加复杂,模块化开发习惯也日渐流行,构建效率便受到了诟病。每次编译节省几秒钟将给生产效率带来巨大的不同。
你可能意识到了即便是最简单的Gradle请求也很慢。在我的mac上,它需要花费六秒钟来构建我的一个简单的可用任务项目列表。
这里有一些提升gradle任务执行效率的小技巧:
Gradle Daemon
如果你告诉Gradle使用daemon来构建,那么你就可以减少Gradle的启动时间(在我的电脑上减到了两秒钟)
org.gradle.daemon=true
Parallel Project Execution
这个可以让你在构建有多个子模块依赖的复杂项目上有大不同:
org.gradle.parallel=true
Configure projects on demand
Gradle在执行任务前会配置每个项目,无论它是否需要额外的编译。
“Configuration on demand”模式改变了这种方式,只有需要配置的项目才会被配置。和平行模式类似,配置要求模式会在多模块依赖构建时带来巨大的影响。
全局的gradle.properties
在我们的根目录属性文件中定义的属性优先于我们项目目录属性文件中定义的属性。这背后的原因是你想要在你的构建服务中避免使用Gradle daemon,启动时间较内存消耗便显得不那么重要了:
/Users/cesarferreira/.gradle/gradle.properties
gradle.properties
模块化的代价很高,真的很高
在我现在的项目中我必须要从头编译一些类库,并且需要关联一些不是完全符合我需要的类库。
如果这些模块不适经常修改,那么就要仔细的想一想,从头编译它们,或者检查先前的独立模块是否已经不是最新版本的时间很可能是简单加载.jar/.aar依赖的4倍以上。
提示:运行gradle构建-profile会提供一个HTML报告来显示编译进程的耗时。
注意:在你的版本控制系统中保留不必要的模块来已被不时之需。
从4分钟要21秒
基于这些技巧让我们看看性能报告:
21秒?嗯,这很不错。
任务执行概述
LINT TASK
如果你先看看任务执行的数据,你可能会注意到lint任务花了很长时间,你真的需要在你的新增编译中检查lint输出吗?
gradle build -x lint
到15秒了?很好的提升!
从12秒到8秒
lint vital release
有一个lint检查?它化了大约90%的时间来编译各个模块?
gradle build -x lint -x lintVitalRelease
到了8秒钟!
提示:如果你想要在你的新增编译中永久地略过lint检查,你可以将它添加到你的build.gradle中
总结:
有一个全局的gradle.properties让你的项目都能够继承;
运行gradle构建概述工具;
固定基本的模块依赖(基于概述工具的结果);
略过无关紧要的gradle任务;