App构建是包含很多步骤的,每个重点步骤都需要调用特定工具完成,比如编译用Javac、Kotlinc,资源打包用Aapt,混淆用Proguard,签名用Jar signer、Apk signer,打包用ApkBuilder等等。
Gradle是一种类似流水线的自动化构建工具,当我们配置好之后,它能够自动控制编译、打包、测试、部署等过程。Gradle是一种多语言,多场景的构建工具,除了Android项目外,它还能对Java项目、web项目、Spring项目等进行构建管理;在不同语言场景下,Gradle需要调用相对应的工具集(比如说前文讲到的Android工具集)完成构建任务,但Gradle并未直接调用,而是通过一个中间人(Gradle插件)进行调用,在Android Studio中这个中间人就是Android Gradle 插件。
Gradle插件实现了Gradle接口定义的功能,隐藏了底层工具的细节,使得开发者能够通过Gradle的DSL(领域特定语言)更方便地定义和定制构建过程。Android Gradle插件负责与底层编译器(javac、Dex编译器)、资源编译器(AAPT)、ProGuard混淆工具等进行通信,除此之外Gradle插件还提供了常见的任务、配置的可视化页面,
可视化任务对应的是一条条Gradle指令,可以说 Gradle插件在Android 平台下的既实现了Gradle的底层API,也实现了一套常见任务的UI。Gradle和Android Gradle插件结合起来使得Android开发者能够简单方便可视化的管理构建行为。
不同项目使用的Gradle插件版本和Gradle版本都可能是不同的,Gradle wrapper就是为解决不同项目Gradle版本不同引入的,接下来我们就来聊一聊Gradle和Gradle插件的的版本管理。
版本管理
因为Gradle插件实现了Gradle定义的功能,所以Gradle插件插件版本需要跟Gradle版本相匹配,一个项目的Gradle插件和Gradle版本有以下两种管理方式:
1. 通过选择File > Project Structure > Project来指定Gradle插件版本和Gradle版本
2. 在工程根目录build.gradle中的配置中指Gradle插件的版本
gradle插件版本管理.png
在项目根目录gradle-wrapper.properties中配置Gradle的版本
gradle版本管理.png
从上图可以看到一个项目的Gradle 版本其实是通过gradle-wrapper 这个文件配置的(配置的是一个url,就是从这个url下载对应版本gradle的,有时间gradle下载失败,可以配置一个国内地址或者公司自己内部缓存地址),其实这里就是体现Gradlewrapper的作用的,它作用有两个:
- Gradlewrapper可以在开发者的机器上没有提前安装 Gradle情况下,指定项目需要Gradle版本;从而使得项目构建能够独立于本地Gradle环境,并确保同一个项目的每个开发者和构建服务器都使用相同版本的Gradle。
- Gradlewrapper 可以使的Android开发者在执行gradle命令的时候直接如下命令进行,在不同环境下具备执行一致性
./gradlew build # for Linux/macOS
gradlew.bat build # for Windows
最后我们给出Android studio 的Gradle插件和Gradle版本对应情况
除此之外,Android studio版本也需要跟gradle插件版本对应,对应关系如下:
AS和插件版本对应
网友评论