What’s New in the Android Studio Build System

使用 Worker 进行优化

下面的图上半部分是不是用 worker,下半部分使用 worker,因为并行的原因,使用 worker 之后明显快很多

但是显示总是残酷的,因为并不是所有的 task 都开启了 worker,比如下面的 task c 就是没有开启 worker 的最后,task b 只能等待 task c 完成

为了解决这个问题,需要把所有 task 都开启 worker,所有的 task 都开启 worker 之后就如下图了

那么问题来了,怎么开启呢?
对于 Java 项目
升级到 AGP 到 3.5 版本就会默认开启,开启后 90% 的 AGP tasks 都会使用 worker功能,手动关闭开启功能如下

-Pandroid.enableWorkers=true/false

对于 kotlin 项目,也就是 kapt,默认是关闭的,需要手动开启

-pkapt.use.worker.api=false/true

Artifact Transforms(生成物转换)

不开启这个功能

开启这个功能

其实就是把所有的 dex 过程分散在各个 moudle 的构建上,最后只要 merge dex 即可,这个功能很早之前就加了,只是现在才说而已。

Lazy Task Configuration

任务懒配置,其实就是很多任务是基于某几个任务的存在才需要创建,如果哪几个任务不存在,也没有必要创建,所有 gradle 提供了这样一个 Api,允许基于某几个任务来创建自己的任务,如果任务不存在,就不会调用你的创建,节省了很多创建时间。、
下图就是使用了 Lazy Task 的前后对比

时间对比

Incremental annottation proc

增量编译,下图是支持增量编译的注解处理器

目前因为不是所有的都支持的情况,可以开启分开增量编译模式,问题在于,这个东西会报错,目前不知道为什么,所以这个功能等于没用

kap 也支持增量编译
下图是 kapt 开启增量编译之后的对比

Improved Sync

因为 AS 已经可以自己创建 Virtual Class R 文件,所以 config 和 dependency都可以跳过了

Apply changes

这个和 instant run 是不同的功能,这个不再在够构建的时候更改你的 Apk ,而是使用新的 runtime instrumentation 来使代码生效,因为使用到新的 runtime ,所以只能在 android8 或者以上生效。也就是说,如果你想要更好的构建体验,你需要连接一台 android8及其以上版本的手机

Improved Build output

其实就是优化了错误提示。。。

Build Speed

Speed attribution

未来功能,让你知道到底是什么东西卡了构建过程,如图

模块化

好处

  • 更好的平行构建
  • 可以缓存的
  • 避免编译

implemation vs api

如下图

如果你只是更改了了方法里面的实现,不管你用哪种方式依赖 lib3,结果都是一样的,gradle 会自动跳过不需要构建的东西

但是如果你增加的是一个 public 方法的话,api 和 implemation 的引用将会有很大的差别,如果使用的是 api,如图中所示,整个项目都会发生编译

如果你是用的是 implemation,则只有 lib3 和 lib2 需要重新构建

Gradle 构建性能调试工具

  • Gradle Scan
  • Gradle profile
  • Chrome Trace (新)

使用 Chrome Trace

-Pandroid.enableProfileJson=true
// json file in build/android-profile