深入学习-Gradle-自动化构建技术(五)Gradle-插件架构实现原理剖析-

  • 6、Android Gradle Plugin V3.0.0(2017 年 10 月)

  • 7、Android Gradle Plugin V2.3.0(2017 年 2 月)

  • 三、Gradle 构建核心流程解析

  • 1、LoadSettings

  • 2、Configure

  • 3、TaskGraph

  • 4、RunTasks

  • 5、Finished

  • 四、关于 Gradle 中依赖实现的原理

  • 1、通过 MethodMissing 机制,间接地调用 DefaultDependencyHandler 的 add 方法去添加依赖。

  • 2、不同的依赖声明,其实是由不同的转换器进行转换的。

  • 3、Project 依赖的本质是 Artifacts 依赖,也即 产物依赖。

  • 4、什么是 Gradle 中的 Configuration?

  • 5、Task 是如何发布自己 Artifacts 的?

  • 五、AppPlugin 构建流程

  • 1、准备工作

  • 2、configureProject 配置项目

  • 3、configureExtension 配置 Extension

  • 4、TaskManager#createTasksBeforeEvaluate 创建不依赖 flavor 的 task

  • 5、BasePlugin#createAndroidTasks 创建构建 task

  • 六、assembleDebug 打包流程浅析

  • 1、Android 打包流程回顾

  • 2、assmableDebug 打包流程浅析

  • 七、重要 Task 实现源码分析

  • 1、资源处理相关 Task

  • 2、将 Class 文件打包成 Dex 文件的过程

  • 八、总结

  • 最后的最后

一、Gradle 插件实现架构概述

Android Gradle plugin 团队在 Android Gradle V3.2.0 之前一直是都是用 Java 编写的 Gradle 插件,在 V3.2.0 便采用了 Kotlin 进行大面积的重写。尽管 Groovy 语法简洁,且其闭包的写法非常灵活,但是 Android Studio 对 Groovy 的支持非常不友好,因此,目前写自定义的 Gradle 插件时我们还是尽量使用 Kotlin,这样能尽量避免编写插件时提示不够造成的坑

下面,我们就来看看 Gradle 插件的整体实现架构,如下图所示:

深入学习-Gradle-自动化构建技术(五)Gradle-插件架构实现原理剖析-_第1张图片

在最下层的是底层 Gradle 框架,它主要提供一些基础的服务,如 task 的依赖,有向无环图的构建等等

上面的则是 Google 编译工具团队的 Android Gradle plugin 框架,它主要是 在 Gradle 框架的基础上,创建了很多与 Android 项目打包有关的 task 及 artifacts(每一个 task 执行完成之后通常都会输出产物)

最上面的则是开发者自定义的 Plugin,关于自定义 Plugin 通常有两种使用套路,如下所示:

  • 1)、在 Android Gradle plugin 提供的 task 的基础上,插入一些自定义的 task
  • 2)、增加 Transform 进行编译时代码注入

二、了解 Android Gradle Plugin 的更新历史

下表列出了各个 Android Gradle 插件版本所需的 Gradle 版本。我们应该使用 Android Gradle Plugin 与 Gradle 这两者的最新版本以获得最佳的性能

插件版本 所需的 Gradle 版本
1.0.0 - 1.1.3 2.2.1 - 2.3
1.2.0 - 1.3.1 2.2.1 - 2.9
1.5.0 2.2.1 - 2.13
2.0.0 - 2.1.2 2.10 - 2.13
2.1.3 - 2.2.3 2.14.1+
2.3.0+ 3.3+
3.0.0+ 4.1+
3.1.0+ 4.4+
3.2.0 - 3.2.1 4.6+
3.3.0 - 3.3.2 4.10.1+
3.4.0 - 3.4.1 5.1.1+
3.5.0+ 5.4.1-5.6.4

目前最新的 Android Gradle Plugin 版本为 V3.6.2,Gradle 版本为 V5.6.4。下面,我们了解下 Android Gradle Plugin 更新历史中比较重要的更新变化

1、Android Gradle Plugin V3.5.0(2019 年 8 月)

本次更新的重中之重是 提高项目的构建速度

2、Android Gradle Plugin V3.4.0(2019 年 4 月)

如果使用的是 Gradle 5.0 及更高版本,默认的 Gradle 守护进程内存堆大小会从 1 GB 降到 512 MB。这可能会导致构建性能降低。如果要替换此默认设置,请在项目的 gradle.properties 文件中指定 Gradle 守护进程堆大小

1)、新的 Lint 检查依赖项配置

增加了新的依赖项配置 lintPublish,并更改了原有 lintChecks 的行为,它们的作用分别如下所示:

  • lintChecks仅用于在本地构建项目时运行的 Lint 检查
  • lintPublish在已发布的 AAR 中启用 Lint 检查,这样使用此 AAR 的项目也会应用那些 Lint 检查

其示例代码如下所示:

dependencies {
// Executes lint checks from the ‘:lint’ project at build time.
lintChecks project(‘:lint’)
// Packages lint checks from the ‘:lintpublish’ in the published AAR.
lintPublish project(‘:lintpublish’)
}

2)、Android 免安装应用功能插件弃用警告

在之前的版本可以使用 com.android.feature 插件构建免安装应用,现在建议使用动态功能插件,这样便可以通过单个 Android App Bundle 发布安装版应用和免安装应用。

3)、R8 默认处于启用状态

R8 将 desugar(脱糖:将 .class 字节码转换为 .dex 字节码的过程)、压缩、混淆、优化和 dex 处理整合到了一个步骤中,从而显著提升了构建性能。R8 是在 Android Gradle Plugin V3.2.0 中引入的,对于使用插件 V3.4.0 及更高版本的应用和 Android 库项目来说,R8 已经默认处于启用状态

R8 引入之前的编译流程
<

你可能感兴趣的:(2024年程序员学习,学习,自动化,架构)