1.daemonize
配置org.gradle.daemon=true or –daemon
目标:使用守护进程
Gradle 守护进程是一个后台进程,它运行着繁重的构建,然后在等待下一次构建之间保持自身存在,这使得数据和代码在下一次构建之前已经准备好,并存在内存中,这显著的提升了下一次的构建的性能。启用Gradle守护进程,是一种廉价的提升Gradle构建效率的方式。2.Parallelize
配置org.gradle.parallel=true or –parallel
Parallelize是指来自于同一个项目的多个构建任务并行执行。
org.gradle.parallel实在project目录下的gradle.properties中进行配置。
–parallel可以值在android studio中的preferences->gradle->complier->command Line中进行配置。 如下图:3.configure on Demand
如果你有多个项目构建,这一点会比较用用。
配置org.gradle.configrueondemand=true or –configuredemand。4.做以上三个配置的全部配置
在下面的目录下面创建gradle.properties文件:
- /home//.gradle/ (Linux)
- /Users//.gradle/ (Mac)
- C:\Users\.gradle (Windows)
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# 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=-Xmx4608m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:-UseGCOverheadLimit -Dfile.encoding=UTF-8
#org.gradle.jvmargs=-Xmx1024m
# 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
org.gradle.daemon=true
org.gradle.configureondemand=true
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
5.去掉一些构建任务:当你使用build来替代assemble,但是你又不需要执行lint和test等任务的时候,可以执行的时候,去掉指定任务的执行。
设置的方法
-x nameOfTaskToExclude or –exclude-task nameOfTaskToExclude
举个例子:./gradlew -x lint -x test6.在运行是设置不同的最低版本。这个对提升gradle构建的提速有着非常显著的效果。在我的改进过程中,大概提升了30%的构建时间。
在我们项目的主module的build.gradle文件中,做如下配置
android {
...
productFlavors {
dev {
minSdkVersion 21
}
release {
minSdkVersion 14
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
当然如果你做了如上的设置,你可以在command line中执行如下的命令
./gradlew assembleDebug -PminSdk=21
其实就是预先设置minSdk的值。minSdk在gradle脚本中是一个可用的变量而已。
当某些特殊情况导致我们不方便在productFlavors中配置不同的minSdk的时候,还有一种另外一种变通的方法,在gradle脚本中配置如下:
def minSdk=hasPorperty('minSdk')?minSdk:14
android{
compiledSdkVersion 21
buildToolVersion 21.0.0
defaultConfig{
....
minSdkVesion=minSdk
....
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
然后在android studio的Preferences中配置minSdk,配置的截图如下:
这里需要说明一下:API 不小于21,使用 ART,在 Build 时只做 class to dex,不做 mergeing dex,所以会省下大量的时间。
当然,如果采用了第二种方式,当我们去打正式的release包的时候,我们需要把minSdk的值设为固定的我们的app所需要适配的最低android系统的版本,否则当然就是低版本的机器上不能运行了,这是不能接受的。
7.go offline
如果你发现,你的gradle构建的过程中在访问一些网络资源,但是有并不是这些访问,每次都是必要的。(什么时候是必要的呢,比如当我们第一次去引入一个第三方的依赖)这个时候,我们可以通过offline option来设置。
–offline
我们其实可以保持这种设置常在,虽然我们有时候会需要去访问网络资源。我们在同步或构建的时候android studio 也会给出相应的提示。在上面的截图中,其实我也已经配置了offline。同时也可以在android studio的Prefereces中直接设置上。如图所示
8.将你的gradle版本更新到最新版本,这个没什么可说的了。理论上,版本的升级,都会带来一些性能的提升。
另外,如果通过以上8个技巧,仍然没有达到你想要的提升效果,也可以通过配置profile来生成profile文件,来查看具体的构建时间,来确认我们构建脚本可优化的地方。
配置了–profile 之后的构建,在构建完成后,会在项目的build文件夹中生成reports文件夹。porfile文件就保存在其中。刷新可见。如图,某次执行的profile输出