8个技巧倍速提升Gradle构建

8个技巧倍速提升Gradle构建

其中已“-”开头的是配置在命令行或者command line中生效的。类似org.gradle.deamon=true配置在项目或者全局gradle.properties中。

我们的android端项目生成apk20m大小,构建任务在我的mac pro 16g内存 512硬盘的机器上执行构建时间平均在150s,通过提升之后,项目构建时间保持在50s以内。下面就是具体技巧的说明。

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中进行配置。 如下图:
8个技巧倍速提升Gradle构建_第1张图片

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

5.去掉一些构建任务:当你使用build来替代assemble,但是你又不需要执行lint和test等任务的时候,可以执行的时候,去掉指定任务的执行。
设置的方法
-x nameOfTaskToExclude or –exclude-task nameOfTaskToExclude
举个例子:./gradlew -x lint -x test

6.在运行是设置不同的最低版本。这个对提升gradle构建的提速有着非常显著的效果。在我的改进过程中,大概提升了30%的构建时间。
在我们项目的主module的build.gradle文件中,做如下配置

android {
    ...
    productFlavors {
        dev {
            minSdkVersion 21
        }

        release {
            minSdkVersion 14
        }
    }
}

当然如果你做了如上的设置,你可以在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
    ....
    }
}

然后在android studio的Preferences中配置minSdk,配置的截图如下:
8个技巧倍速提升Gradle构建_第2张图片

这里需要说明一下: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构建_第3张图片
8.将你的gradle版本更新到最新版本,这个没什么可说的了。理论上,版本的升级,都会带来一些性能的提升。

另外,如果通过以上8个技巧,仍然没有达到你想要的提升效果,也可以通过配置profile来生成profile文件,来查看具体的构建时间,来确认我们构建脚本可优化的地方。
配置了–profile 之后的构建,在构建完成后,会在项目的build文件夹中生成reports文件夹。porfile文件就保存在其中。刷新可见。如图,某次执行的profile输出
8个技巧倍速提升Gradle构建_第4张图片

正如文章的标题所说倍速提升。最终这些配置,使用原来构建时间由平均150s提升至50s,将近提升了2倍。也希望这些配置,能提高开发者的开发效率。如果有其它提升方法,欢迎留言交流。

欢迎关注我的微信公众号
8个技巧倍速提升Gradle构建_第5张图片

你可能感兴趣的:(android开发)