Gradle简要教程

1    什么是Gradle


    最初Android的开发是用Eclipse进行,Eclipse之所以能够用来开发Android项目,是因为一个叫做ADT(Android Developer Tools)的东西,使用ADT,我们只需要写好代码,然后直接在Eclipse上进行编译,运行等一系列操作。自从Google推出Android Studio以来,默认使用Gradle作为构建工具。
    Gradle是一个开源的项目自动化构建工具,建立在Apache Ant 和Apache Maven概念的基础上,并引入了基于Groovy的特定邻域语言(DSL),而不在使用XML形式管理构建脚本。主要用于自动化地进行软件构建、测试、发布、部署、软件打包的项目。

2    依赖管理


    我们知道构建工具不光有编译、打包、运行、签名等功能,还有依赖管理的功能。回到Eclipse,用Eclipse开发的时候,如果我们需要使用到第三方库,我们需要先下载jar包,然后把jar包放到libs目录下,然后就可以使用了。
    在Gradle中,引用jar包的方式稍有区别,把jar包放到libs目录下之后,需要加入以下方法。
 
在此基础上,Gradle增加了新的方式引入第三方库:
 
可以直接看到源地址,想要进行版本升级,直接改后面的版本号,做到更直接的


3    关于Gradle


    Gradle是一种新的构建工具,它是一个独立的项目,与Android、Java无关,与传统的构建工具相比,Gradle采用了一种叫做Groovy的的语言,语法跟Java很像。
    Gradle是一个独立的项目,那么它如何在Android Stuidio上进行Android开发呢? 因为Google团队做了一个AS的插件叫做Android Gradle Plugin,基于这个插件,我们才可以在AS上进行Android Studio开发。在我们的项目的根目录的build.gradle文件里有这么一行代码:
 
这就是我们依赖gradle插件的代码,后面的版本号($gradlePluginVersion)就是Android Gradle Plugin的版本,须注意,这个版本号不是Gradle的版本号。
    当我们创建了一个AS项目,点击运行,默认就会帮我们安装Gradle,但是这个Gradle并不是真正的Gradle,而是Gradle Wrapper,可认为是Gradle的封装。
    简单的说,就是它在你的每一个项目都配置了一个指定版本的Gradle,通过这个每个项目你可以支持用不同的Gradle版本来构建项目。


4    Android项目中Gradle配置文件以及含义


4.1    根目录build.gradle


这个文件是整个项目的 gradle 全局配置文件,代码如下:
 Gradle简要教程_第1张图片
    buildscript:定义了 Android 编译工具的类路径。
repositories闭包中:
jcenter():它是一个代码托管仓库,很多的Android开源项目都会选择将代码托管到jcenter上,声明了这行配置后,我们就可以在项目中轻松使用任何的jcenter上的开源项目了。
classpath 'com.android.tools.build:gradle:2.2.2'声明了一个Gradle插件。gradle:2.2.2为Gradle插件的版本号。
    allprojects:中定义的属性会被应用到所有 module 中,但是为了保证每个项目的独立性,我们一般不会在这里面操作太多共有的东西。
    buildscript与allprojects的区别:
buildScript块的repositories主要是为了Gradle脚本自身的执行,获取脚本依赖插件。
allprojects块的repositories用于多项目构建,为所有项目提供共同所需依赖包。


4.2    app目录build.gradle


    文件路径:XXX/app/build.gradle
    每个项目单独的build.gradle:针对每个module的配置,如果这里的定义的选项和顶层build.gradle定义的相同,后者会被覆盖。典型的配置内容如下:
 Gradle简要教程_第2张图片
从文件内容可以看出,主要分为三大部分:


1、apply plugin


  文件中第一行使用apply plugin表示应用了一个插件,该插件一般有两种值可选:
'com.android.application',表示为应用程序模块,可以直接运行;
'com.android.library',表示为库模块,只能作为代码库依附于别的应用程序模块来运行。


2、android闭包


  这个闭包主要为了配置Adnroid项目构建的各种属性,
    compileSdkVersion用于指定项目的编译版本,25表示使用Android 7.1系统的SDK编译。
    buildToolsVersion用于指定项目构建工具的版本。
android闭包中嵌套了defaultConfig闭包和buildTypes闭包:
a) defaultConfig闭包
  对项目的更多细节进行配置,其中applicationId指定了项目的包名,我们可以通过修改这个值来修改项目的包名。
  minSdkVersion指定项目最低兼容的版本,这里指定为15,表示最低兼容到Android 4.0系统。
  targetSdkVersion指定的值表示在该目标版本上已经做过充分测试,系统会为该应用启动一些对应该目标系统的最新功能特性,Android系统平台的行为变更,只有targetSdkVersion的属性值被设置为大于或等于该系统平台的API版本时,才会生效。例如,若指定targetSdkVersion值为22,则表示该程序最高只在Android5.1版本上做过充分测试,在Android6.0系统上(对应targetSdkVersion为23)拥有的新特性如系统运行时权限等功能就不会被启用。
b) buildTypes闭包
  这个闭包主要指定生成安装文件的主要配置,一般包含两个子闭包,一个是debug闭包,用于指定生成测试版安装文件的配置,可以忽略不写;另一个是release闭包,用于指定生成正式版安装文件的配置。
  上面的代码中省去了debug闭包的内容,只写了release闭包。其中minifyEnabled表明是否对代码进行混淆,true表示对代码进行混淆。proguardFiles指定混淆的规则文件,这里指定了proguard-android.txt文件和proguard-rules.pro文件两个文件,proguard-android.txt文件为默认的混淆文件,里面定义了一些通用的混淆规则。proguard-rules.pro文件位于当前项目的根目录下,可以在该文件中定义一些项目特有的混淆规则。


3、dependencies闭包


  该闭包定义了项目的依赖关系,一般项目都有三种依赖方式:本地依赖、库依赖和远程依赖。本地依赖可以对本地的jar包或目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖可以对jcener库上的开源项目添加依赖关系。


4.3    Gradle文件夹


这个目录底下,有个wrapper文件夹,我们可以看看这个gradle-wrapper.properties文件:
 
可以看到,这里指示了gradle的下载地址以及当前项目使用到的版本号,很多时候,导入项目不成功可能这个版本号不匹配而导致的。


4.4    settings.gradle


这个文件是全局的项目配置文件,里面主要声明一些需要加入 gradle 的 module。


5    相关优化


加快编译速度的方式总结:


5.1    修改运行内存


    方法:菜单栏-help-Edit Custom VM Option,增加如下内容:
-Xms2048m
-Xmx2048m
-XX:MaxPermSize=2048m
-XX:ReservedCodeCacheSize=1024m
-xmx 参数是 Java 虚拟机启动时的参数,用于限制最大堆内存


5.2    修改gradle设置


在gradle.properties中做如下修改
#JVM内存
org.gradle.jvmargs = -Xmx2048m
#开启并行编译
org.gradle.parallel = true
#开启编译守护进程
org.gradle.daemon = true

5.3    使用本地gradle


    开启offline work,编译时,Android Studio会从cache中加载各种依赖,在第一次成功编译后,开启次选项会减少远程成就依赖,从而加快编译。


5.4    使用 Instant Run


    此功能可以减少编译次数,例如:修改TextView值的时候,可以快速的体现在手机上,而不用重新编译工程。

你可能感兴趣的:(学习之路,android,gradle,教程)