Gradle加速

1. Gradle编译加速

1.1 减少本地库依赖

Gradle 在编译时会执行大量的 task, 同时生成许多中间文件, 导致磁盘IO拥堵造成编译速度变慢, 可以减少本地库依赖, 多使用 aar 进行依赖

1.2 minSdkVersion >= 21

当API 不小于21,使用 ART,在 Build 时只做 class to dex,不做 mergeing dex,会省下大量的时间。

1.3 开启 Gradle 的多线程和多核心支持

gradle.properties 添加如下代码:

1
2
3
org.gradle.daemon=true #编译时使用守护进程。
org.gradle.parallel=true #使用并行编译
org.gradle.configureondemand=true #启用按需配置模式

org.gradle.configureondemand:按需配置模式
按需配置模式尝试仅配置与请求任务相关的项目,即仅执行参与构建的项目的 build.gradle 文件. 这种模式会显著降低大型多项目构建的配置时间

同时, 在 build.gradle 中添加:

1
2
3
4
dexOptions {
incremental true #开启Gradle增量编译
javaMaxHeapSize "4g" #增加编译内存
}

1.4 增加编译内存

修改 gradle.properties 文件

1
2
3
4
5
6
7
systemProp.http.proxyHost=127.0.0.1
#修改编译内存
#org.gradle.jvmargs=-Xmx1536m
org.gradle.jvmargs=-Xmx4g #Gradle中JVM最大允许分配的堆内存
-XX:MaxPermSize=512m #Gradle中JVM最大允许分配的非堆内存

systemProp.http.proxyPort=1080

1.5 不在 Gradle 脚本中使用终端指令

在 Gradle 中调用终端指令会降低编译速度


2. Gradle task加速

可以通过执行如下命令查看 gradle 中每个 task 的执行时间:

1
gradle build -profile

结果如下图所示:
执行结果
找出耗时较长的 task, 适当的禁用一些比较耗时而在 debug 阶段又不太需要的 task, 可以有效减少编译时间
比如耗时较长的 lint 在 debug 阶段并不需要, 而 lint 是 Android Gradle Plugin 中的 task, 执行工程的编译脚本中无法获取到, 可以通过以下方式禁用:

  • 1.通过 Gradle 编译参数
    通过如下命令编译:

    1
    gradle build -x lint
  • 2.在 Gradle 脚本中动态增加编译参数
    Project:build.gradle 中的 buildScript 中添加如下代码:

    1
    gradle.startParameter.excludedTaskNames.add('lint')

另外, AAPT 检查也比较耗时, 在 debug 时可以通过以下代码禁用:

1
2
3
aaptOptions {
cruncherEnabled=false
}