【Gradle-1】入门Gradle,前置必读

12,374 阅读6分钟

本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!

1、为什么要学习Gradle

  1. Gradle作为Android开发默认的构建工具,你的每一次编译都会用到它。
  2. 招聘要求从以前的熟悉加分,到现在的必备技能,可见Gradle的重要性。

做开发这么久了,你是否对Gradle又爱又恨?是否对Gradle的配置一知半解?是否每次编译结果都像开盲盒一样?是否想知道Gradle背后执行的原理?是否也想手写Plugin?等等等等,如果你想,那这个专栏可以给你答案,彻底搞懂Gradle,助你提效,解放双手,收割Offer。

通过这个专栏你能收获什么:

  1. 熟悉Gradle的原理及相关配置。
  2. 提升定位并解决编译失败的能力。
  3. 看懂并能手写Gradle插件。
  4. 通过Gradle提升编译速度。
  5. 助力面试,收割Offer。

2、Gradle是什么

Gradle是一个专注于灵活性和性能的开源自动化构建工具。

这句话,大部分人在看的时候都是一扫而过,其实我自己也是,但是如果别人问我,为什么要用Gradle?Gradle解决了什么问题?我好像也给不出一个满意的答案,因为我就没有深入的思考过,潜意识里可能会这么回答,因为开发Android用的是Android Studio,然后创建项目的时候默认就有这些gradle的配置了,或者说gradle是Android Studio默认的构建工具,点一下run就可以编译运行到手机了。

我回答的有问题吗,好像也没有问题,可是细想一下,我好像只是在陈诉一件大家已知的事情,那如果是面试,我顶多算及格,因为没有亮点而被放进备胎池里,最后无缘offer。

那么现在,就尝试着把这句话拆开解读一下:

  • 开源自动化构建工具
  • 专注于灵活性和性能

2.1、什么是构建工具

什么是构建工具呢,构建工具就是自动化帮我们完成一系列的编译打包的流程。

如果没有构建工具,我们就需要一遍一遍的执行命令去打包,比如打包APK要用javac去编译代码,再用AAPT去编译资源文件,然后编译DEX组合APK最后签名,如果每改一次代码预览都要这么干的话,那肯定是相当费劲的,所以自动化构建工具就诞生了。同时,构建工具也帮助我们做依赖管理,比如在Android Studio之前,我们用Eclipse开发,没有构建工具的情况下,我们要依赖一个三方库,需要把jar包下载下来,然后再放进项目里,这个过程是比较繁琐的,而且在升级jar版本的时候又要重复操作一遍,如果其他项目要用的话,又要把这个jar包再手动复制一遍,但是Gradle是支持依赖传递的,通过不同的依赖方式就可以改变依赖作用域。

2.2、构建简史

在Gradle之前,最经典的当属Ant了,Ant使用的DSL是xml,xml的进化来源于MakeFile构建的繁琐,而xml特点是结构化且好理解,这比写脚本插件简单多了,所以迅速流行起来。

随着软件行业的迅速发展,我们的产品功能越来越多,业务越来越复杂,开发团队也日益庞大,这时候工程管理和工程的标准化问题就开始日益突出,于是Maven诞生了。Maven很好的解决了依赖问题,引入了标准依赖库对版本进行管理,并且对工程的目录结构、构建生命周期都做了标准化定义,极大的方便了工程管理及开发。

但是当Maven流行一段时间之后,大家又发现了问题,xml逻辑简单是不错,但是写起来太啰嗦,而且扩展性不够,此时,Gradle登场了。

Gradle在Maven的基础上,主要解决了两个问题:

  1. 用一种新的DSL,让语法变的更简洁,且支持扩展;
  2. 定义了扩展方便且不失标准的构建生命周期;

实际上Gradle发展至今,早已超越了上面这两点,而且还在不断的进化中,比如buildSrc的诞生、kts的支持、KSP的演进等等。

3、Gradle的特点

  1. Gradle是一个基于JVM运行的构建工具,使用java编写;
  2. 脚本语言(DSL)使用Groovy(.gradle)、Kotlin(.gradle.kts)编写,都是高级语言,都是面向对象编程;
  3. Gradle中的核心对象是Task,Task是Gradle中最小的构建单元,Action是最小的执行单元;
  4. Gradle中的Project对应一个工程,是树形结构,可以向下或向上遍历,还用来关联Task;
  5. Gradle提供了很好的扩展能力,可以根据需求自定义插件及配置;
  6. Gradle在各个生命周期阶段提供了丰富的回调,对于切面处理的扩展很有帮助;
  • 高度可定制——Gradle 以最基本的方式可定制和可扩展的方式建模。
  • 快速——Gradle 通过重用先前执行的输出、仅处理更改的输入以及并行执行任务来快速完成任务。
  • 功能强大— Gradle 是 Android 的官方构建工具,支持多种流行语言和技术。

4、如何学习Gradle

事实上,学习Gradle并不是一件易事,从Gradle原理、开发配置、到编译打包,每一个点背后都需要深入的学习和理解,围绕着这个主线我也大概简单列了一下学习路线,后面也将继续围绕着下面这个学习路线展开。

当然这个学习路线目前也是初版,因为Gradle涉及的东西还是比较多的,更新也比较快,后面也会不断的迭代补充。

5、总结

本文主要介绍了掌握Gradle的重要性、什么是构建工具以及构建简史、Gradle的特点和Gradle的学习路线。

不过单凭一两篇文章也很难把Gradle讲全面讲清楚,我希望可以通过一个专栏,深入浅出,把Gradle这个难啃的知识点讲明白,所以接下来还会继续介绍Gradle中的Task、生命周期、依赖管理、插件开发、编译提速等相关知识,如果你恰好也想深入了解Gradle,欢迎关注,持续更新!

另外,后面关于Gradle的一些示例源码,都会在这个Github仓库里展开:github.com/yechaoa/Gra…

6、参考文档