Gradle概述
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。Gradle就是工程的管理,帮我们做了依赖、打包、部署、发布、各种渠道的差异管理等工作。
Gradle优势
一款最新的,功能最强大的构建工具,用它逼格更高。
使用程序代替传统的XML配置,项目构建更灵活。
丰富的第三方插件,让你随心所欲使用。
Maven、Ant能做的,Gradle都能做,但是Gradle能做的,Maven、Ant不一定能做。
Gradle插件
AndroidStudio Gradle Plugin,也就是AndroidStudio用于开发Android项目的gradle插件。Gradle插件会有版本号,每个版本号又对应有一个或一些 Gradle发行版本(一般是限定一个最低版本),也就是我们常见的类似gradle-4.1-all.zip这种东西;如果这两个版本对应不上了,那你的工程构建的时候就会报错。
Android Gradle Plugin又会跟 Android SDK BuildTool有关联(版本有对应的关系),因为它还承接着Android Studio里的编译相关的功能,这也是我们要在项目的 local.properties 文件里写明Android SDK路径、在build.gradle 里注明 buildToolsVersion 的原因。Android Gradle Plugin 本质上就是 一个AS的插件,它一边调用 Gradle本身的代码和批处理工具来构建项目,一边调用Android SDK的编译、打包功能,从而让我们能够顺畅地在AS上进行开发。
另外,Gradle插件和Gradle不是一个东西。
Gradle相关文件分析
工程目录下的build.gradle文件
主要作用:对Gradle插件进行配置

首先,两处repositories的闭包中都声明了jcenter()这行配置,它是一个代码托管仓库,很多Android 开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
接下来,dependencies 闭包中使用classpath声明了一个Gradle插件因为Gradle并不是专门为构建Android项目而开发的,Java、 C++等很多种项目都可以使用Gradle来构建。因此如果我们要想使用它来构建Android项目,则需要声明com.android.tools . build:gradle:2.3.1这个插件。其中,最后面的部分是插件的版本号。
app目录下的build.gradle文件
主要作用:app模块的gradle构建脚本,一般用来管理app包名、版本的以及添加和修改依赖库。

首先,第一行应用了一个插件,有两种值可以选 com.android.application(表示这是一个应用程序模块) 和 com.android.library(表示这是一个库模块)。应用程序模块和库模块最大的区别:前者可以直接运行,后者只能作为代码库依附于别的应用程序模块来运行。
接下来是一个大的android闭包,在这个闭包中我们可以配置项目构建的各种属性。
compileSdkVersio:用于指定项目的编译版本,这里指定成24表示使用Android 7.0系统的SDK编译。
buildToolsVersion:用于指定项目构建工具的版本,如果有更新的版本时,Android Studio会进行提示。
然后,在android闭包中又嵌套了一个defaultConfig闭包, defaultConfig 闭包中可以对项目的更多细节进行配置。其中,
applicationId:用于指定项目的包名,前面我们在创建项目的时候其实已经指定过包名了,如果想在后面对其进行修改,那么就是在这里修改的。
minSdkVersion:用于指定项目最低兼容的Android 系统版本,指定成15表示最低兼容到Android 4.0系统。
targetSdkVersion:指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性。比如说Android 6.0系统中引入了运行时权限这个功能,如果你将targetSdkVersion指定成23或者更高,那么系统就会为你的程序启用运行时权限功能,而如果你将targetSdkVersion 指定成22,那么就说明你的程序最高只在Android5.1系统上做过充分的测试,Android 6.0系统中引入的新功能自然就不会启用了。
versionCode:用于指定项目的版本号,
versionName:用于指定项目的版本名,这两个属性在生成安装文件的时候非常重要。
buildTypes 闭包中用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个是debug, 一个是release。debug闭包用于指定生成测试版安装文件的配置, release闭包用于指定生成正式版安装文件的配置。另外,debug闭包是可以忽略不写的,因此可以看到上面的代码中就只有一个release 闭包。
minifyEnabled:用于指定是否对项目的代码进行混淆,true 表示混淆,false 表示不混淆。
proguardFiles:用于指定混淆时使用的规则文件,这里指定了两个文件,第一个proguard-android. txt是在Android SDK目录下的,里面是所有项目通用的混淆规则,第二个proguard- rules. pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。需要注意的是,通过Android Studio直接运行项目生成的都是测试版安装文件。
dependencies闭包的功能非常强大,它可以指定当前项目所有的依赖关系。通常Android Studio项目一共有3种依赖方式:本地依赖、库依赖和远程依赖。本地依赖可以对本地的Jar包或目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖则可以对jcenter库上的开源项目添加依赖关系。观察一下dependencies 闭包中的配置,
第一行的compile fileTree 就是一个本地依赖声明,它表示将libs 目录下所有.jar后缀的文件都添加到项目的构建路径当中。
第二行的compile 则是远程依赖声明, com. android. support:appcompat -v7:24.2.1就是一个标准的远程依赖库格式,其中com. android. support是域名部分,用于和其他公司的库做区分; appcompat-v7是组名称,用于和同一个公司中不同的库做区分; 24.2.1 是版本号,用于和同一个库不同的版本做区分。加上这句声明后,Gradle在构建项目时会首先检查一下本地是否已经有这个库的缓存,如果没有的话则会去自动联网下载,然后再添加到项目的构建路径当中。至于库依赖声明这里没有用到,它的基本格式是compile project 后面加上要依赖的库名称,比如说有一个库模块的名字叫helper,那么添加这个库的依赖关系只需要加入compile project( ‘ :helper’ )这句声明即可。
gradle-wrapper.properties文件
主要作用:对Gradle进行全局配置,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
Grale配置的意义在于:在项目创建或者编译的时候如何查找Gradle的位置和使用什么版本的Gradle。
zipStoreBase和zipStorePath组合在一起,是下载的gradle-4.4-all.zip所存放的位置。
zipStorePath**:**是zipStoreBase指定的目录下的子目录。
distributionBase**和distributionPath**组合在一起,是解压gradle-4.4-all.zip之后的文件的存放位置。
distributionPath**:**是distributionBase指定的目录下的子目录。
distributionUrl**:**Gradle下载地址
Gradle查找方法之一:先到本机的缓存目录中寻找,找到则使用,找不到则到Gradle下载地址去下载。下载完成会将保存一份到本机的缓存目录。
local.properties文件
主要作用:在Android Studio中是用来配置SDK目录的,也可以在文件中配置一些本地化的变量。
前面介绍Gradle插件的时候提到,Android Gradle Plugin会跟 Android SDK BuildTool有关联(版本有对应的关系),因为它还承接着Android Studio里的编译相关的功能,所以要在项目的 local.properties 文件里写明Android SDK的路径。