Gradle配置详解系列(六)--加快Android项目编译速度

413 阅读3分钟
引言

随着业务的复杂度增加,项目也会越来越厚重,编译时间也随之而增加, 那么降低项目的编译速度,不仅可以提高工作效率,增加工作的流畅性, 当然对心情美丽也起到促进作用。

下面我们总结一下可以降低项目编译速度的几种方式:

1. dependencies中引入第三方库时尽量指定版本号,不要用+这种不确定版本的方式。
  • 指定版本号Gradle只有在本地没有此库缓存的情况下,请求远程仓库下载并缓存在本地, 如果没有配置强制更新,则会一直使用本地缓存。
  • 使用"+"不指定版本号,指的是获取远程仓库中最新库的版本并下载缓存, 就是每次编译都会与远程仓库做一次交互,如果没有比本地缓存版本更好的其他版本,就使用本地缓存, 如果有比本地缓存版本更好的版本,会自动下载最新版本并缓存在本地,在一般开发过程中,如果不是 本地库实在太老或存在bug的情况下,我们一般都会适应库的稳定版可能不是最新版。
2. 灵活使用offline work

如果使用的比较旧的Android Studio,在已经完整编译过一次项目之后, 可以在AS的Settings->compile->gradle 中设置offline work,gradle编译不会联网查询远程仓库的版本信息, 只会使用本地缓存进行编译。

3. 修改根目录下.properties文件,添加以下配置
  • 配置大内存:

    org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
    
  • 守护进程

     org.gradle.daemon=true
    
  • 并行编译

    org.gradle.parallel=true
    
  • 开启缓存:

    android.enableBuildCache=true
    
  • 促进Gradle初始化、加载 setting.gradle(|| setting.gradle.kts)、 加载各个模块的 build.gradle(|| build.gradle.kts)、执行一系列任务。

     org.gradle.configureondemand=true  
    
4. 分析build过程

Gradle任务时添加 --profile 标志来实现。当使用此标志时,Gradle会创建一个概要分析报告, 它可以告诉我们构建过程的哪些部分是最耗时的 一旦知道瓶颈在哪里,就可以进行必要的更改。 分析报告将作为HTML文件保存在模块的 build/reports/profile 目录下。

  • Summary 栏显示执行任务期间在每个阶段中花费的时间的概览。
  • Configuration 栏显示配置阶段花费了多少时间。
  • Dependency Resolution 部分显示每个模块解析依赖所需的时间。
  • Task Execution 部分包含非常详细的任务执行时间,这个部分具有每个任务的执行时序,按执行时间从高到低排序。
5. 启用Jack and Jill
 android {
     defaultConfig {
         useJack = true
     }
 }
  1. 优化编译过程:
    • 旧的编译过程
    javac (.java –> .class) –> dx (.class –> .dex) 
    
    • 使用Jack的编译过程
    Jack (.java –> .jack –> .dex)
    
  2. 对依赖库做 pre dex,且成果会被保存到 build/intermediates/jill/debug 目录。 之后的编译过程中,只要依赖库的数目和版本不变,之前的 pre dex 成果会被复用;Jack 只需要编译变化的源代码, 然后对多个 dex 进行 merge 即可,能够加速整个编译过程。
  3. 编译时会启动一个 Jack compilation server,并开启并行编译 。
6. 优化永无止尽,时刻准备着。。。😄😄😄😄

更多Android技术分享可以关注我的Android技术圈子添码猩球, 也可以加入QQ群号:690347536,学习交流Android开发技能。