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