Gradle 5.0:构建 Android,我更快、更稳、更省内存!

android studio 相关说明 | 2018-11-29 02:00

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 拥有相同的版本依赖图。

简单来说,对于多个依赖同时依赖同一个库的时候,会形成一个依赖链,而之前默认的形式会出现依赖传递,对于直接依赖,会将低版本变更为高版本。而对于间接依赖,则没有那么智能。依赖版本对齐可以指定清晰的依赖关系,来避免出现依赖版本混乱。

我知道这么说可能还是会乱,官方已经给出一个具体的例子来说明问题:#sec:version_alignment

随着 Gradle 5.0 发布的还有 Kotlin DSL 1.0 ,在 4.x 时,其实已经支持 Kotlin DSL,只是当时还有很多问题,这次发布的是 Release 版本,意味着我们可以放心使用了。

此次改进主要有几个方面:代码自动完成、错误高亮、文档提示、代码重构。

关于 Kotlin DSL,如果你有兴趣,官方还有一个入门手册。

5.0 除了构建速度更快之外,内存也会大幅减少。因为在 5.0 中优化了许多缓存机制,因此 Gradle 进程的默认最大内存,已经大大缩小。

下面是官方给出的一个对比数字:

到这里就简单了一些 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 命令即可。

更多升级的细节,可以查阅官方文档:#changes_5.0

整体来说,Gradle 5.0 还是诚意满满的,等 Android Studio 3.4 发布正式版本之后,还是可以升级试试,毕竟优化了很多提高开发效率的点。

如果本文对你有帮助,欢迎点赞、留言、转发!

「」