1、为什么要学习Gradle
- Gradle作为Android开发默认的构建工具,你的每一次编译都会用到它。
- 招聘要求从以前的熟悉加分,到现在的必备技能,可见Gradle的重要性。
做开发这么久了,你是否对Gradle又爱又恨?是否对Gradle的配置一知半解?是否每次编译结果都像开盲盒一样?是否想知道Gradle背后执行的原理?是否也想手写Plugin?等等等等,如果你想,那这个专栏可以给你答案,彻底搞懂Gradle,助你提效,解放双手,收割Offer。
通过这个专栏你能收获什么:
- 熟悉Gradle的原理及相关配置。
- 提升定位并解决编译失败的能力。
- 看懂并能手写Gradle插件。
- 通过Gradle提升编译速度。
- 助力面试,收割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的基础上,主要解决了两个问题:
- 用一种新的DSL,让语法变的更简洁,且支持扩展;
- 定义了扩展方便且不失标准的构建生命周期;
实际上Gradle发展至今,早已超越了上面这两点,而且还在不断的进化中,比如buildSrc的诞生、kts的支持、KSP的演进等等。
3、Gradle的特点
- Gradle是一个基于JVM运行的构建工具,使用java编写;
- 脚本语言(DSL)使用Groovy(.gradle)、Kotlin(.gradle.kts)编写,都是高级语言,都是面向对象编程;
- Gradle中的核心对象是
Task
,Task是Gradle中最小的构建单元,Action是最小的执行单元; - Gradle中的
Project
对应一个工程,是树形结构,可以向下或向上遍历,还用来关联Task; - Gradle提供了很好的扩展能力,可以根据需求自定义插件及配置;
- Gradle在各个
生命周期
阶段提供了丰富的回调,对于切面处理的扩展很有帮助;
- 高度可定制——Gradle 以最基本的方式可定制和可扩展的方式建模。
- 快速——Gradle 通过重用先前执行的输出、仅处理更改的输入以及并行执行任务来快速完成任务。
- 功能强大— Gradle 是 Android 的官方构建工具,支持多种流行语言和技术。
4、如何学习Gradle
事实上,学习Gradle并不是一件易事,从Gradle原理、开发配置、到编译打包,每一个点背后都需要深入的学习和理解,围绕着这个主线我也大概简单列了一下学习路线,后面也将继续围绕着下面这个学习路线展开。
当然这个学习路线目前也是初版,因为Gradle涉及的东西还是比较多的,更新也比较快,后面也会不断的迭代补充。
5、总结
本文主要介绍了掌握Gradle的重要性、什么是构建工具以及构建简史、Gradle的特点和Gradle的学习路线。
不过单凭一两篇文章也很难把Gradle讲全面讲清楚,我希望可以通过一个专栏,深入浅出,把Gradle这个难啃的知识点讲明白,所以接下来还会继续介绍Gradle中的Task、生命周期、依赖管理、插件开发、编译提速等相关知识,如果你恰好也想深入了解Gradle,欢迎关注,持续更新!
另外,后面关于Gradle的一些示例源码,都会在这个Github仓库里展开:https://github.com/yechaoa/GradleX
6、参考文档
- Gradle User Manual
- What is Gradle?
- Learning Gradle
- Mastering Gradle
- Gradle入门教程