Gradle 5.0 终于发布了,官方表示这是史上最快、最安全、最强大的 Gradle 版本。
此版本在优化了构建速度、内存使用等,还新增了 Kotlin DSL 1.0、依赖版本对齐(与 Maven BOM 类似)、Task timeout、支持 Java 11 等新功能。
接下来我挑几个和 Android 开发相关的新功能介绍。
更快的构建速度
原生开发中,每次 Build 都是很耗时的,这也是很多跨平台方案可以吹嘘的地方,例如 Flutter 的 Hot reload。而在 5.0 中,使用了新的构建缓存和增量编译的方式来提升编译的速度。
下图就是官方提供的编译速度对比图:
5.0 主要通过四种方式对编译进行优化:
- 构建缓存。
- 增量 Java 编译。
- 增量注解处理。
- 构建扫描。
构建缓存是 Gradle 4.0 开始引入的,其目的是重用之前的编译结果,在 5.0 中,Android、Kotlin、C++、Scala 和许多其他的插件都可以使用构建缓存,有效的利用缓存可以节约多达 90% 的构建时间。
增量 Java 编译在 5.0 中也经过了高度优化,现在是默认编译器。它除了第一次使用完整的构建之外,之后不需要重新编译所有的源文件。而增量注解处理是在增量 Java 编译的基础之上,做了进一步优化。
依赖版本对齐
依赖版本对齐的英文是 Dependency version alignment。
Dependency version alignment allows different modules belonging to the same logical group (a platform) to have identical versions in a dependency graph.
直译过来的意思就是:依赖版本一致性允许属于相同的逻辑组(平台)的不同 module 拥有相同的版本依赖图。
简单来说,对于多个依赖同时依赖同一个库的时候,会形成一个依赖链,而之前默认的形式会出现依赖传递,对于直接依赖,会将低版本变更为高版本。而对于间接依赖,则没有那么智能。依赖版本对齐可以指定清晰的依赖关系,来避免出现依赖版本混乱。
我知道这么说可能还是会乱,官方已经给出一个具体的例子来说明问题:https://docs.gradle.org/5.0/userguide/managing_transitive_dependencies.html#sec:version_alignment
Kotlin DSL 1.0
随着 Gradle 5.0 发布的还有 Kotlin DSL 1.0 ,在 4.x 时,其实已经支持 Kotlin DSL,只是当时还有很多问题,这次发布的是 Release 版本,意味着我们可以放心使用了。
此次改进主要有几个方面:代码自动完成、错误高亮、文档提示、代码重构。
关于 Kotlin DSL,如果你有兴趣,官方还有一个入门手册。https://docs.gradle.org/5.0/userguide/kotlin_dsl.html
更高效的内存执行
5.0 除了构建速度更快之外,内存也会大幅减少。因为在 5.0 中优化了许多缓存机制,因此 Gradle 进程的默认最大内存,已经大大缩小。
下面是官方给出的一个对比数字:
升级到 Gradle 5.0
到这里就简单了一些 5.0 中,我比较关注的新特性。当然 Gradle 5.0 不止如此,更多细节推荐查看本文末尾的引用文章。
如果你对 Gradle 5.0 有兴趣,想要升级体验的话,此过程有一些前置条件需要注意。
- Android 项目升级到 Gradle 5.0 需要配套升级 Android Gradle Plugin 和 Android Studio 3.4。注意,AS 3.4 还是一个 Preview 版,建议等稳定后再尝试线上项目。
- 最好能将 Gradle 升级到 4.10.2 版本,否则直接从低版本升级到 5.0,是一件很让人崩溃的事情,因为很多 API 都被废弃了,建议逐步升级。
- Gradle 4.x 需要使用 JDK 7,而 Gradle 5.0 需要使用 JDK 8 或更高的版本,所以如果你的 JDK 版本过低,还需要升级它。
确保上面说的几个条件都齐全之后,升级 Gradle 5.0 就变的简单了,执行 ./gradlew wrapper --gradle-version=5.0
命令即可。
更多升级的细节,可以查阅官方文档:https://docs.gradle.org/5.0/userguide/upgrading_version_4.html#changes_5.0
小结
整体来说,Gradle 5.0 还是诚意满满的,等 Android Studio 3.4 发布正式版本之后,还是可以升级试试,毕竟优化了很多提高开发效率的点。
如果本文对你有帮助,欢迎点赞、留言、转发!
reference:
https://gradle.org/whats-new/gradle-5/#how-to-upgrade
https://docs.gradle.org/5.0/release-notes.html