学新通技术网

【Gradle 学习】(三)Android 与 Gradle 的关系

juejin 10 1
【Gradle 学习】(三)Android 与 Gradle 的关系

1. Gradle

先回顾下 Gradle 的概念

Gradle 是一种构建工具。构建工具就是对你的项目进行编译、运行、签名、打包、依赖管理等一系列功能的合集,传统的构建工具有 Make、Ant、Maven、Ivy等,而 Gradle 是新一代的自动化构建工具。

Gradle 使用的是 groovy 语言,语法跟 Java 语法很像,是一种动态语言(运行时可以改变其结构的语言),而且在 Java 基础上做了不少改进,用起来更加简洁、灵活,而且 Gradle 完全兼容 Maven、Ivy,这点基本上宣布了 Maven、Ivy 可以被抛弃了,Gradle 的推出主要以 Java 应用为主。

2. Gradle 与 Android Studio 的关系

Gradle 本身和 AS 是没有关系的,为了支持 Gradle 能在 AS 上使用,Google 做了一个 AS 的插件 Android Gradle plugin,而我们能在 AS 使用 Gradle 也是因为这个插件。在项目根目录里面有个 build.gradle 文件,有如下描述

dependencies {    
    classpath 'com.android.tools.build:gradle:3.1.4'
}

这个就是依赖 gradle 插件的代码,后面的版本号表示的是 Android Gradle plugin 插件的版本,并不是 Gradle 的版本,这个是 Google 定义的,和 Gradle 官方并没有关系。了解如何 更新 Gradle 和 Android 插件

3. Android & Gradle Wrapper

3.1 Gradle Wrapper

现在默认创建一个项目,在 AS 上运行,就会默认安装 Gradle 了,但其实这个并不是真正的 Gradle,而是 Gradle Wrapper,表示 Gradle 的包装。

Gradle 包装,类似于设计模式中的装饰器模式(包装器模式)的作用:动态地给一个对象添加一写额外的职责。

Gradle Wrapper 为 Gradle 添加的额外的职责就是: 当我们使用 gradlew 执行命令时,wrapper 会检查当前机器是否已经安装了对应版本的 gradle。如果安装了,那么 wrapper 会委托 gradle 执行了用户输入的命令;如果还没有安装,就会自动帮我们下载、安装 gradle,然后再执行命令。

Gradle Wrapper 除了可以更方便安装 Gradle,还可以确保不同机器之间版本的一致性。

什么意思呢?

比如我们的 Java 环境都是要装 JDK 的吧,JDK 安装一个版本就可以了,比如 JDK-1.8。由于 Gradle 会快速迭代,经常发布新版,如果项目直接引用,那么更改版本就会很麻烦。而且每个项目可能会用到不一样的 Gradle 版本,只安装了一个版本肯定也是不行的。所以 Google 推出了 Gradle Wrapper 的概念,就是在每个项目都配置了一个指定版本的 Gradle,通过这个每个项目可以支持不同的 Gradle 版本来构建项目。

关于 Gradle Wrapper 工作流程可见上一篇文章

3.2 Android 中的 Gradle Wrapper

在 AS 安装的时候就自带这个功能,在 AS 的安装目录 Android Studio\plugins\android\lib\templates\gradle\wrapper\gradle 下有两个文件:

  • gradle-wrapper.jar 是 Gradle Wrapper 的主体功能包。
  • gradle-wrapper.properties 文件主要指定了该项目需要从哪里下载什么版本的 Gradle,下载后放到哪里。

每新建一个项目,就会将这两个文件 复制到项目的 gradle 文件夹下面。

├──gradle-wrapper.jar
├──gradle-wrapper.properties

Android Stuido 中的 Gradle Wrapper 相关文件,项目结构和通用是一致的

├── build.gradle
├── settings.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat

在创建项目之后,Gradle 会自动下载安装(第一次会比较久,之后就可以直接使用了),结束之后可以在终端输入 gradlew -v ( mac 用户输入./gradlew -v) 可以查看当前项目所用的 gradle 的版本。比如我当前用的是 Gradle 6.1.1 版本的。gradlew 也就是 gradle wrapper 的缩写,wrapper 会自动去执行具体版本对应的 gradle 命令。

$ gradlew -v
​
------------------------------------------------------------
Gradle 6.1.1
------------------------------------------------------------
​
Build time:   2020-01-24 22:30:24 UTC
Revision:     a8c3750babb99d1894378073499d6716a1a1fa5d
​
Kotlin:       1.3.61
Groovy:       2.5.8
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          1.8.0_181 (Oracle Corporation 25.181-b13)
OS:           Windows 10 10.0 amd64

小结

Android 使用 Gradle 进行项目的编译、运行、签名、打包和依赖管理。在 Android Stuido 中应用 Android Gradle 插件后才可以使用 Gradle,不过这些在创建项目的时候自动应用好了。在创建项目同时应用了 Gradle Wrapper,来下载安装对应版本的 Gradle。

本文出至:学新通技术网

标签: