大多数 Android 工程都是基于 Gradle
工具进行构建和编译的,大型项目构建时间可能会耗时很久,这时候我们可以进行优化、减少构建时间。本文只是自己做个记录,具体操作方式看参考链接:
- 提升 50% 的编译速度!阿里零售通 App 工程提效实践
- Gradle 提速:每天为你省下一杯喝咖啡的时间
1. 分析问题
Gradle 官方在最近的版本更新中推出了一个神器 build scan,可视化的深入分析和诊断所有构建相关的数据,并基于此分析结果帮助开发者找出构建问题以及针对构建性能进行优化。
2. 一些建议
- 升级 Gradle 版本
- 并采用最新语法 比如
implementation
代替compile
等
- 优化和减少 module
- 代码层面的优化 比如减少module 使用 aar 依赖
- 一些配置优化
- 避免编译不必要的资源,比如不必要的语言本地化
- 增加
snapshot
缓存策略开关 - 不同的 Gradle 版本,一些配置优化也会有区别,更多配置优化
3. Gradle 官方的一些优化建议
- 尽可能的使用最新版本的 Gradle 和 JVM
- Parallel execution,并行执行 Gradle 的 tasks
- Build Scan,是一个很好的诊断工具,通过该工具可以很好的帮助你去分析和解决编译速度慢的问题
- 配置阶段
- 减少不必要的
apply plugin
,按需使用。如果某个插件不是所有的模块都要使用的情况下,就不要使用allprojects{}
的方式。
- 依赖解析
- 减少动态 (2.+) 版本和 SNAPSHOT 版本的依赖库,通常这种方式的依赖,会强制 Gradle 去远端仓库比对是否有新的变化。
- 避免不必要和未使用的依赖
- 任务执行阶段
- 增量构建
- Daemon
- 在老版本的 Gradle 开启 Daemon 配置,而在 3.0 以后的 Gradle 版本是默认支持的
- 使用
implementation
替代 compile
,有效的减少编译时的依赖项,需升级至 Gradle 3.4
版本 - 量编译,Gradle 可以将依赖关系分析到单个类级别,以便仅重新编译受更改影响的类。 增量编译是
Gradle 4.10
以来的默认编译 - 避免编译不必要的资源,比如不必要的语言本地化, 你可以只指定一种语言资源和屏幕适配
- 开启离线模式
- 使用 WebP 格式的图片,有效减少图像文件大小,而不必执行构建时压缩,可以加快你的构建
- 关闭 PNG crunching,加快构建速度通过禁用自动图像压缩,Gradle 3.0 版本以上在 debug 的构建类型下是默认关闭的
- 开启 Instant Run