【译】我每周在构建Gradle时是如何节约出5小时的

原文链接

Gradle是一个基于JVM可以用于构建Android工程的编译工具。它和Ant以及Maven类似,但是比他们更优秀。随着Android项目变得越来越复杂,模块化地开发也越来越流行,所以构建的效率性能变得至关重要。每次构建项目中节省几秒,这对于整个项目和工作来说有极大的效率提升。

你们可能已经意识到,即使是最简单的Gradle调用也比较慢。在我的Mac上,大约需要6秒钟来简单地列出项目的可用gradlew。

下面是一些能够提升Gradle执行效率的提示:

Gradle Daemon(Gradle守护进程)

你可以减少Gradle的启动时间(在我的电脑上下降到2秒钟),下面是使用守护进程来构建项目:

org.gradle.daemon=true

Parallel Project Execution(并行项目执行)

如果你正在构建一个具有很多Module并且依赖比较关系比较复杂的项目,那么这个改动能对你产生比较重要的影响:

org.gradle.parallel=true

Configure projects on demand(根据需求配置项目)

Gradle在执行任务之前会配置每个项目,并且不管这个项目是否需要特定的构建。"Configure projects on demand"模式可以改变这种方式,只配置所需要的项目。像"Parallel Project Execution"一样,"Configure projects on demand"将对这种多项目并且依赖关系复杂的项目产生重要的影响。

Global gradle.properties(Gradle全局配置文件)

在Gradle主目录中定义或者配置的属性优先级高于在项目目录中文件定义的属性。原因是你想避免在你的构建服务器上使用Gradle守护进程,而内存消耗肯定是比启动时间更重要的:

/Users/cesarferreira/.gradle/gradle.properties

# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
org.gradle.daemon=true

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true

# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true

使用Module是有代价的...我的意思是真的有代价!

为了构建我目前的linkedcare项目,我不得不去寻找并且fork一些相对适合但不是特别适合我项目的一些依赖库。
如果这些模块没有被不断修改,考虑这一点非常重要:从头开始编译它们,或者甚至是检查以前的模块是否是最新版本的,所需的时间是直接将该依赖加载为二进制.jar / .aar的四倍,也就是说每次编译Gradle都要去检查依赖是不是最新的,这将花费大量时间。
提示:运行gradle build -profile获取HTML报告,显示构建过程的时间。
注意:在版本控制系统中保留“不必要的”模块,以便于对该依赖的快速修复/改进。

从4分钟到21秒

基于以上这些优化方式,我们来看看效果:

21秒?好吧,还不算太差

任务执行配置

lint任务

如果你看看你的任务执行配置文件,你会发现lint任务需要很多时间,你真的需要检查lint输出的增量构建吗? 把它取消吧:

gradle build -x lint

缩短到15秒了,很好!

12秒减少到8秒

lint vital release还是占用了比较多时间

另一个lint任务检查,这个任务几乎占据了我们目前构建项目总时间的90%。好吧,现在也将这个任务取消掉:

gradle build -x lint -x lintVitalRelease

哈哈哈哈啊哈哈!一直减少到8秒啦

提示:如果要从增量构建中永久跳过lint检查,可以将其添加到build.gradle中:

tasks.whenTaskAdded { task ->
    if (task.name.equals("lint")) {
        task.enabled = false
    }
}

总结一下:

  • 在Gradle目录下有一个全局gradle.properties,所有的项目将继承它(Android中Module的单个Gradle配置文件优先级低于全局的);
  • 运行Gradle build profile工具;
  • 坚持基本模块依赖(基于配置文件工具结果);
  • 跳过不成功的Gradle任务;

联系原文作者:

如果您有任何问题或想要分享您的结果->我的twitter @cesarmcferreira☺

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容