提升Gradle构建

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中进行配置。 如下图: 
commandLine 界面

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 test

6.在运行是设置不同的最低版本。这个对提升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输出 
这里写图片描述

阅读更多
想对作者说点什么? 我来说一句

Building And Testing With Gradle

2016年12月02日 5.49MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭