关于gradle

什么是gradle
如果从eclipse转到android studio上开发android,首先遇到的一个问题是是gradle,发现和一切和eclipse都不一样了,没错,因为android studio是基于gradle来构建项目的。
Gradle和C语言的make,以及eclipse使用的ant一样,是一种项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,但是要比ANT使用XML构建配置要灵活的多。在编写配置时,你可以像编程一样灵活(比如加入各种条件判断),Gradle是基于Groovy的DSL语言。

什么是Groovy
Groovy是Java平台上设计的面向对象编程语言。这门动态语言拥有类似Python、Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用(也运行于Java虚拟机中)。

Groovy的语法与Java非常相似,以至于多数的Java代码也是正确的Groovy代码。Groovy代码动态的被编译器转换成Java字节码。由于其运行在JVM上的特性,Groovy可以使用其他Java语言编写的库。
可以理解为Groovy是基于java平台的脚本语言,但它有自己定义的一套语法,很多时候也兼容java语法,如调用一个方法:

也可以写成

等等,grade里很多都使用这种形式来调用方法,方法的定义和调用像ruby语言。

android studio的gradle
Android Studio的工程目录结构通常是这样的:

首先是settings.gradle,用于配置project,通常一个project有一个或者多个module(在eclipse下称为project),在这个文件下,把所有要加入构建的module都在这个文件里加入进来,,比如这里包含一个:app module

和settings.gradle在同一目录下的build.gradle是一个顶级的build配置文件,在这里可以为所有project以及module配置一些常用的配置。

在这个文件中的配置,整个项目的module都起作用。
grade也称为一个编程框架,是基于插件的编译的,也就是说当你编译java项目时,用java插件,编译android项目时,自然也用android的插件,这里的

就是配置gradle编译项目时用android的gradle插件,注意这里是插件的版本,并非gradle的版本,这个版本通常是和android studio的版本相同(但也并非总是相同)。

各module下的build.gradle
除了一个顶级的的build.gradle文件之外,所有的module(如app)下也都会有一个build.gradle文件。
在这个文件中的配置,只对所在的module起作用,对其它的module不起作用。

 

开头第一行

这表示该module是一个app module,应用了com.android.application插件,如果是一个android library,那么这里应该

其次是基于哪个SDK编译,这里是API LEVEL,是21,buildToolsVersion是基于哪个构建工具版本进行构建的。defaultConfig是默认配置,如果没有其他的配置覆盖,就会使用这里的。看其属性的名字就可以知道其作用,比如applicationId是配置包名的,versionCode是版本号,versionName是版本名称等。

buildTypes是构建类型,常用的有release和debug两种,可以在这里面启用混淆,启用zipAlign以及配置签名信息等。

dependencies就不属于Android专有的配置了,它定义了该module需要依赖的jar,aar,jcenter库信息。

 gradle-wrapper.properties文件
这个文件是配置gradle的版本以及存放位置,通常会存放在系统用户目录下的.gradle/wrapper/dists文件夹下对应的版本号目录里,android studio会先去检查这个目录下有没有文件中配置的版本,如果找不到匹配的版本,就会自己去下载gradle,这也是android studio有时候很慢的原因,因为它在下载gradle,如果本地有gradle的版本,可以在这里手动配置上,从而可以关掉android studio的自动下载(offline模式),提高速度。