什么是Gradle?什么是Gradle插件?
Gradle 对应:gradle-wrapper.properties中的distributionUrl=https/://services.gradle.org/distributions/gradle-2.10-all.zip
Gradle插件 对应:build.gradle中依赖的classpath 'com.android.tools.build:gradle:2.1.2'
Gradle:
- 一个构建系统,构建项目的工具,用来编译Android app,能够简化你的编译、打包、测试过程。也就是把那一个个文件、文件夹按照一定的规则关联起来,形成一个项目的工具,它其实不仅仅是用在AndroidStudio上。在AS第一次创建项目会自动下载 Gradle,这个过程很漫长(100多M),但是第一次之后就ok了
-
维基百科是这样解释的:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种
基于Groovy的特定领域语言来声明项目设置
,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
构建工具就是对你的项目进行编译、运行、签名、打包、依赖管理等一系列功能的合集,那如何理解构建工具?
我们以前用 Eclipse开发Android程序,而Eclipse最初是用来做Java 开发的,Googl为了能在 Eclipse 上进行Android 开发,开发了ADT 插件(Android Developer Tools),正是因为有了 ADT ,我们才可以在 Eclipse 上进行编译、运行、签名、打包等一系列流程。而这背后的工作都是 ADT 的功劳,ADT 就是我们的构建工具
一般来说,构建工具除了以上提到的编译、运行、签名、打包等,还具备依赖 管理的功能
,什么是依赖管理呢?我们以前在 Eclipse 上开发 Android 引用第三方库,一般都是先下载 jar 文件,然后把 jar 文件添加到 libs 目录。但假设第三方库有更新,需要下载最新的 Jar 文件替换掉原来的,非常繁琐,可以说这种方式只有依赖,而没有管理。
Gradle 引用第三方库方式是这样的: compile 'com.android.support:support-v4:24.0.1'
我们直接可以看到源地址,升级的话直接改下版本号就可以了,这就是所谓的依赖管理。
传统的构建工具有 Make、Ant、Maven、Ivy等,而 Gradle 是新一代的自动化构建工具,它是一个独立的项目,跟 AS、Android 无关,官方网站:https://gradle.org/
类似 Ant、Maven这类构建工具都是基于 xml 来进行描述的,很臃肿,而 Gradle 采用的是一种叫做 Groovy 的语言
,语法跟 Java 语法很像,但是是一种动态语言,而且在 Java 基础上做了不少改进,用起来更加简洁、灵活,而且 Gradle 完全兼容 Maven、Ivy,这点基本上宣布了 Maven、Ivy 可以被抛弃了,Gradle 的推出主要以 Java 应用为主,当然目前还支持 Android、C、C++。
Gradle 跟 Android Studio 其实没有关系
,但是 Gradle 官方还是很看重 Android 开发的,Google 在推出 AS 的时候选中了 Gradle 作为构建工具,为了支持 Gradle 能在 AS 上使用,Google 开发了一个 AS 的插件叫 Android Gradle Plugin ,所以我们能在 AS 上使用 Gradle 完全是因为这个插件的原因。
在项目的根目录有个 build.gradle 文件,里面有这么一句代码:
classpath 'com.android.tools.build:gradle:2.1.2'
这个就是依赖 gradle 插件的代码,后面的版本号代表的是 android gradle plugin 的版本,而不是 Gradle 的版本,这个是 Google 定的,跟 Gradle 官方没关系。
关于 android gradle plugin 的更多信息可以到这里查看,这里列举了 android gradle plugin 每个版本的具体变化与具体功能:http://tools.android.com/tech-docs/new-build-system
Gradle插件:
我们在AS中用到的Gradle其实应该被叫做
Android Plugin for Gradle
,它本质就是一个AS的插件,它一边调用 Gradle本身的代码和批处理工具来构建项目,一边调用Android SDK的编译、打包功能,从而让我们能够顺畅地在AS上进行开发。Gradle插件跟 Android SDK BuildTool有关联,因为它还承接着AndroidStudio里的编译相关的功能,这也是我们要在项目的 local.properties 文件里写明Android SDK路径、在build.gradle 里注明 buildToolsVersion 的原因。
Gradle插件是独立于Android Studio运行的,所以它的更新也是与Android Studio分开的。Gradle插件会有版本号,每个版本号又对应有一个或一些 Gradle发行版本(一般是限定一个最低版本),也就是我们常见的类似gradle-3.1-all.zip这种东西;
注意:如果这两个版本对应不上了,那你的工程构建的时候就会报错。
对应关系如下(官网链接:https://developer.android.google.cn/studio/releases/gradle-plugin.html#updating-plugin):
Android Studio 3.0 之后自动将插件版本升级到3.0.0,所以我们也需要对应地把Gradle升级到4.1才行
-
Gradle Wrapper:
意为 Gradle 的包装,它的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分
。
假设我们本地有多个项目,一个是比较老的项目,还用着 Gradle 1.0 的版本,一个是比较新的项目用了 Gradle 2.0 的版本,但是你两个项目肯定都想要同时运行的,如果你只装了 Gradle 1.0 的话那肯定不行,所以为了解决这个问题,Google 推出了 Gradle Wrapper 的概念,它在你每个项目都配置了一个指定版本的 Gradle ,你可以理解为每个 Android 项目本地都有一个小型的 Gradle ,通过这个每个项目你可以支持用不同的 Gradle 版本来构建项目。
,接下来就是教大家用命令行测试下,请大家在终端或者 AS 带的终端上切换到所在项目的目录,然后输入 ./gradlew -v
(win用户直接输入 gradlew -v) ,即可以查看当前项目所用的 gradle 的版本,gradlew
即为 gradle wrapper
的缩写,如果你是第一次执行命令行,那么会出现一个下载的提示,紧接着会打印一个个的点,这个过程很漫长,依赖你的网速,时间几分钟到几十分钟不等。
有人有疑问,我 AS 上明明已经可以正常运行该项目的,说明 Gradle 已经下载过了,为什么命令行还要再下载一次?我也一直有这个疑问,理论上是不该再下载的,但是事实他就是要重新下载一次,我猜测可能是bug吧。
如果下载完成输入 ./gradlew -v
出现如下结果,证明你的项目是ok的,否则就是你的项目配置有问题了。