Android如何提升Gradle编译速度或减少Gradle编译时间

最终优化方案

优化效果比对

  • 优化前:随便修改一行代码,点击"Build - make project" 编译就需要 15~28秒之间

  • 优化后:随便修改一行代码,点击"Build - make project" 编译只需8-10秒左右,假如修改的代码曾经编译过,能命中缓存,那么基本在3~4秒即可编译完毕。

  • 开发机相关配置

    Infrastructure
    Operating system Windows 7 6.1
    CPU cores 8 cores
    Max Gradle workers 8 workers
    Java runtime JetBrains s.r.o OpenJDK Runtime Environment 1.8.0_152-release-1343-b01
    Java VM JetBrains s.r.o OpenJDK 64-Bit Server VM 25.152-b01 (mixed mode)
    Max JVM memory heap size 9544 MB

将所有项目源码,各种缓存临时目录都移动到高性能SSD磁盘上

  1. TOSHIBA- TR200 虽然是SSD,但是明显不够高性能(虽然可能比一般的机械可能会稍微好一点)

gradle.properties 配置

#因为电脑有20G内存,所以在原来的基础上直接乘与5倍,足够同时打开3个以上项目了。
org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=1280m -Dfile.encoding=UTF-8 org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
org.gradle.caching=true #假如不启动会报错: Unable to get provider com.squareup.leakcanary.internal.LeakCanaryFileProvider: java.lang.ClassNotFoundException
android.useAndroidX=true
android.enableJetifier=true
android.enableBuildCache=true

碰到的问题

3. Android Studio 设置里勾选了自动编译功能却无效的问题?

参考资料

  1. 关于IDEA不能实时编译的一个临时解决办法。。。。 - MyHome - OSCHINA
  2. idea初使用之自动编译 - 野蜂的博客 - CSDN博客
  3. Android Studio : auto build like Eclipse - Stack Overflow
  4. "Make project automatically" - only while not running/debugging – IDEs Support (IntelliJ Platform) | JetBrains

2. 在 Gradle Scan报告里 Timeline - FROM-CACHE - Build cache result - Unpack 时间耗时很长怎么办?

原因:

编译缓存(Build Cache)目录所在磁盘IO性能过低,将其设置到高效能的SSD固态磁盘即可大幅度提升解包(Unpack)速度(降低解包耗时).

例如:

同样的缓存大小: "Cache artifact 3.62 MB / 4447 entries"

缓存目录放在

  1. TOSHIBA- TR200 磁盘上,解包(Unpack)耗时 13.453s
  2. Samsun SSD 850 EVO M.2 磁盘上,解包(Unpack)耗时 1.644s 性能提升 10倍以上

参考:

1. 按照 参考资料: Android项目中开启Gradle的build scan(构建审视) - 简书 步骤来做,然后Sync时,报错

Gradle sync failed: Could not find com.gradle:build-scan-plugin:1.8.
Searched in the following locations:
Required by:
project : (2 s 761 ms)

解决方案

在项目根目录里增加以下代码:


buildscript {
repositories {
maven { url 'https://plugins.gradle.org/m2' }
}
dependencies {
classpath 'com.gradle:build-scan-plugin:2.3'
}
}
apply plugin: com.gradle.scan.plugin.BuildScanPlugin
buildScan {
termsOfServiceUrl = "https://gradle.com/terms-of-service";
termsOfServiceAgree = "yes"
}

详情参考: Gradle Build Scan Plugin User Manual | Gradle Enterprise Docs

参考资料

  1. Build Cache

    Put org.gradle.caching=true in your gradle.properties

  2. Android项目中开启Gradle的build scan(构建审视) - 简书

    A fine-grained performance profile is available: use the --scan option.

    buildscript {
    dependencies {
    #下面这句是添加的
    classpath 'com.gradle:build-scan-plugin:1.8'
    }
    } #下面5行是添加的
    apply plugin: 'com.gradle.build-scan'
    buildScan {
    licenseAgreementUrl = 'https://gradle.com/terms-of-service'
    licenseAgree = 'yes'
    }
  3. 使用构建缓存加快干净构建的速度 | Android Developers

    使用 Android 插件 2.3.0 及更高版本的项目在默认情况下会启用构建缓存(除非您明确停用构建缓存)。

  4. How does android.enableBuildCache=true functions in new Android Studio 2.2? - Stack Overflow

    • Step 0:Ensure that android.dexOptions.preDexLibraries is either not set or set to true;
    • Step 1: android.enableBuildCache=true
    • Step 2: Build your Android project and check the following locations to see whether the build cache took effect. By default the cache-dir is /.android/build-cache.
  5. 一些关于加速Gradle构建的个人经验 - 为程序员服务

    org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

    gradlew clean --info 会得到类似这样的信息,信息标明了开启Parallel以及每个task使用的线程信息

  6. How to decrease your Gradle build time by 65%? - Keval Patel - Medium

    org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

    gradlew android:assembleDebug --profile --configure-on-demand --daemon

  7. 如何加快Gradle编译项目的速度? - 简书

    org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
    org.gradle.daemon=true
    org.gradle.parallel=true
    android.enableBuildCache=true
    另外在Settings-Build,Execution,Deployment-Commond-line Options中设置"--parallel-threads={cpu线程数量}"也有一定作用
  8. 【译】我每周在构建Gradle时是如何节约出5小时的 - 简书

    # Default value: -Xmx10248m -XX:MaxPermSize=256m
    org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Android提升Gradle编译速度或减少Gradle编译时间.md的更多相关文章

  1. QT:提高QT Creator编译速度,配置预编译头Stable.h

    提高QT Creator编译速度,配置预编译头Stable.h QT Creator支持预编译头提高编辑速度,网上有些教程写得不详细,走了弯路,具体实现方法如下. (1)工程.PRO文件加入下面代码 ...

  2. Android 提高 gradle 的编译速度

    随着项目在国内各个商店上线,开始介入了渠道的概念. 目前总共有 13 家商店,尝试使用 ./gradlew assembleRelease 命令打包,耗时将近 40 分钟. 因此搜索了一些可以提供编译 ...

  3. Gradle Build速度加快终极方法(android studio)

    Android Studio用起来越来越顺手,但是却发现Build的速度实在不敢恭维,在google和度娘了几把(....)之后,大体就是分配更高的内存,步骤:Setting-->搜索gradl ...

  4. 加速Android Studio的Gradle构建速度

    在利用Android Studio做项目时,发现随着项目内资源的逐渐增多(或者项目创建时间太过久远,而又未经常打开),Android Studio的build速度也越来越慢.(P.S.在做我的CSGO ...

  5. 转: 加快Android编译速度

    转: http://timeszoro.xyz/2015/11/25/%E5%8A%A0%E5%BF%ABandroid%E7%BC%96%E8%AF%91%E9%80%9F%E5%BA%A6/ 加快 ...

  6. 为什么说 Gradle 是 Android 进阶绕不去的坎 —— Gradle 系列(1)

    请点赞,你的点赞对我意义重大,满足下我的虚荣心. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,欢迎 ...

  7. 记——加快gradle 构建速度的经验

    Gradle作为一个新的构建系统,无疑在灵活,扩展,跨平台等各方面都表现得非常优秀,然而,它也有一点备受吐槽,就是速度慢.以下为本人使用gradle过程中,几次加快gradle构建速度的经验之谈. 本 ...

  8. Gradle Build速度加快方法汇总

    Android Studio用起来越来越顺手,但是却发现Build的速度实在不敢恭维,在google和度娘了几把(....)之后,大体就是分配更高的内存,步骤:Setting-->搜索gradl ...

  9. 【转】实践最有效的提高Android Studio运行、编译速度方案

    原文:https://blog.csdn.net/xwh_1230/article/details/60961723 实践最有效的提高Android Studio运行.编译速度方案 最有效提升Andr ...

随机推荐

  1. [Abp vNext微服务实践] - 前后端分类

    一.前景 abp vNext是ABP 开源 Web应用程序框架,是abp的新一代开源web框架.框架完美的集成.net core.identity server4等开源框架,适用于构建web应用程序和 ...

  2. 【Java基础 项目实例 -- Bank项目2】Account 和 customer 对象

    总结: customer.setAccount(account); //引用,日后的account 和 customer.getAccount()的结果始终一致 实验目的 扩展银行项目,添加一个 Cu ...

  3. Python的安装和配置(windowns 双版本)

    1.去官网上下载python,注意版本. 官网地址:https://www.python.org/downloads/windows 2.下载安装版或者zip包都可以.安装就按向导一步一步完成即可.z ...

  4. new函数

    可以通过new函数直接创建一个类型的指针 变量名:=new(Type) 使用new函数创建的指针已有指向,可以使用*指针对象进行赋值. func main() { a := new(int) fmt. ...

  5. WinForm DevExpress使用之ChartControl控件绘制图表二——进阶

    1. 多坐标折线图 在这个项目中,我需要做不同采集地方和不同数据类型的数据对比,自然而然就用到了多重坐标轴,多重坐标轴可以是多个X轴,也可以是Y轴,它们的处理方式类似.本文通过项目中的实际例子介绍多重 ...

  6. 关于iar intrinsics.h is already included previously!报错的问题及解决办法

    用最新的cubemx生成f103的代码(带freertos系统),如果用iar编译,可能会出现intrinsics.h is already included previously!的错误,如果没有待 ...

  7. 使用laravel-wechat微信支付

    参考文档 https://github.com/overtrue/laravel-wechat https://easywechat.com/docs/4.1/payment/index larave ...

  8. Mac出现程序闪退的解决方案

    重置PRAM 1. 关机 2.按下电源键后,立即按下command + option + P +R 3.等到电脑出现4次重启的声音后,放开按键,重置成功 4.正常使用

  9. Codevs 4909 寂寞的堆

    4909 寂寞的堆 时间限制: 1 s 空间限制: 8000 KB 题目等级 : 大师 Master 题目描述 Description 堆,是一种神奇的数据结构 不寂寞的堆,是一棵满二叉树,其儿子节点 ...

  10. HGOI 20191106 题解

    Problem A  旅行者 有$n$种转移装置,每种转移装置本质相同,每种装置可以前进$a_i$单位,但只有$b_i$个. 从初始坐标为$0$出发,途中不能经过$c_1,c2,...,c_m$中的任 ...