阅读 1436

Android之Gradle和Gradle插件区别及联系

一、什么是Gradle、Gradle插件

Gradle:gradle-wrapper.properties中配置的是Gradle的版本distributionUrl=https://services.gradle.org/distributions/gradle-6.2.2-all.zip

Gradle插件:Android Plugin for Gradle,工程根目录build.gradle中的依赖指定的是Gradle插件的版本classpath 'com.android.tools.build:gradle:3.6.3'

(一)Gradle:

一个构建系统,构建项目的工具,用来编译Android app,能够简化你的编译、打包、测试过程。也就是把那一个个文件、文件夹按照一定的规则关联起来,形成一个项目的工具,它其实不仅仅是用在Android Studio上。在AS第一次创建项目会自动下载 Gradle,这个过程很漫长(100多M),但是第一次之后就ok了。

维基百科是这样解释的:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

1、构建工具

构建工具就是对你的项目进行编译、运行、签名、打包、依赖管理等一系列功能的合集,那如何理解构建工具?

我们以前用 Eclipse开发Android程序,而Eclipse最初是用来做Java 开发的,Google为了能在 Eclipse 上进行Android 开发,开发了ADT 插件(Android Developer Tools),正是因为有了 ADT ,我们才可以在 Eclipse 上进行编译、运行、签名、打包等一系列流程。而这背后的工作都是 ADT 的功劳,ADT 就是我们的构建工具。

传统的构建工具有 Make、Ant、Maven、Ivy等,而 Gradle 是新一代的自动化构建工具,它是一个独立的项目,跟 AS、Android 无关,Gradle的官方网站官方网站 。Ant、Maven这类构建工具都是基于 xml 来进行描述的,很臃肿,而 Gradle 采用的是一种叫做 Groovy 的语言,语法跟 Java 语法很像,但是是一种动态语言,而且在 Java 基础上做了不少改进,用起来更加简洁、灵活,而且 Gradle 完全兼容 Maven、Ivy,这点基本上宣布了 Maven、Ivy 可以被抛弃了,Gradle 的推出主要以 Java 应用为主,当然目前还支持 Android、C、C++。

2、依赖管理

一般来说,构建工具除了以上提到的编译、运行、签名、打包等,还具备依赖管理的功能,什么是依赖管理呢?我们以前在 Eclipse 上开发 Android 引用第三方库,一般都是先下载 jar 文件,然后把 jar 文件添加到 libs 目录。但假设第三方库有更新,需要下载最新的 Jar 文件替换掉原来的,非常繁琐,可以说这种方式只有依赖,而没有管理。 Gradle 引用第三方库方式是这样的: api 'com.alibaba:arouter-api:1.3.1' 我们直接可以看到源地址,升级的话直接改下版本号就可以了,这就是所谓的依赖管理。

3、更新Gradle

当更新了Android Studio,系统会提示要求更新Gradle到最新版本。同更新Gradle插件一样,你可以选择接受更新,也可以基于你的项目编译要求来手动指定版本。

更新Gradle有两种方式:

  1. 通过选择File > Project Structure > Project来指定Gradle版本。如下图:

  1. 在gradle/wrapper/gradle-wrapper.properties文件中编辑Gradle引用地址。如下图:

(二)Gradle插件:

Android Plugin for Gradle,它本质就是一个AS的插件,它一边调用 Gradle本身的代码和批处理工具来构建项目,一边调用Android SDK的编译、打包功能,从而让我们能够顺畅地在AS上进行开发。

Google 在推出 AS 的时候选中了 Gradle 作为构建工具,为了支持 Gradle 能在 AS 上使用,Google 开发了一个 AS 的插件叫 Android Plugin for Gradle ,所以我们能在 AS 上使用 Gradle 完全是因为这个插件的原因。在项目的根目录有个 build.gradle 文件,里面有这么一句代码:classpath 'com.android.tools.build:gradle:3.6.3'。 这个就是依赖 Gradle 插件的代码,后面的版本号代表的是 Android Plugin for Gradle 的版本,而不是 Gradle 的版本,这个是 Google 定的,跟 Gradle 官方没关系。

1、Gradle插件和Gradle的联系

Gradle插件的每个版本号又对应一个或一些 Gradle发行版本(一般是限定一个最低版本),也就是我们常见的类似gradle-3.1-all.zip这种东西。

如果这两个版本对应不上了,那你的工程构建的时候就会报错。

对应关系如下,官网链接

Gradle插件跟 Android SDK BuildTool有关联,因为它还承接着Android Studio里的编译相关的功能,这也是我们要在项目的 local.properties 文件里写明Android SDK路径、在build.gradle 里注明 buildToolsVersion 的原因。

2、更新Gradle插件

当更新了Android Studio,你可能会收到提示要求更新Gradle插件到最新版本。在AS的右下角,如图所示:

你可以选择接受更新,也可以基于你的项目编译要求来手动指定版本。指定Gradle插件版本有两种方式:

  1. 在Android Studio中选择File > Project Structure > Project菜单。

2. 在项目的根目录的build.gradle中修改配置。

注意:不应该动态指定版本号,如"com.android.tools.build:gradle:3.+".这样做可能会导致意外的版本更新,并且会给解决版本差异带来困难。

如果指定的版本没有下载下来,那么项目在下次构建的时候Gradle会再去下载或者你也可以点击File > Sync Project with Gradle Files去下载。

二、总结

软件开发过程不仅仅是编写代码,还涉及到对项目的管理,比如:添加项目的依赖、打包、签名、发布等一系列操作,如果你每天都在做这些操作,那有没有想过这些操作可以像代码一样被描述出来,供我们复用以及自动运行。

没错,这就是Gradle替我们做的事。Gradle通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对项目进行构建。

那么,如何来提供这个Gradle构建环境呢?这就需要通过安装Gradle插件来使系统能支持运行Gradle。安装Android Studio后就已经帮我安装了Gradle插件,但Gradle插件是独立于Android Studio运行的,所以它的更新也是与Android Studio分开的。

文章分类
Android
文章标签