瞅瞅Gradle系列(一)-基础扫盲

文中就不介绍Gradle是干啥用的了,直接从你须要了解的内容开始.java

项目、任务、动做

在Gradle中,最重要的两个概念是项目和任务以及动做.
每一次构建都包括至少一个项目,每个项目中又包含一个或多个任务.每个build.gradle文件都表明着一个项目,任务定义在构建脚本里.当初始化构建脚本时,Gradle会基于build文件组装项目和任务对象,一个任务对象包含一系列的动做对象,这些动做对象以后会按顺序执行.一个动做对象就是一段代码块,相似于Java中的方法.android

构建的生命周期

Gradle的构建一般会有三个阶段:bash

  • Initialization 初始化阶段:
    • 该阶段解析settings.gradle,根据其中的配置区分单项目构建仍是多项目构建,用不一样的方式去查找build.gradle文件并解析建立Project对象.
  • Configuration 配置阶段:
    • 该阶段建立Task,明确任务input和output以及任务间的依赖关系,造成有向无环图.能够称为执行图,能够用TaskExecutionGraph表示,经过gradle.taskGraph来获取.
  • Execution 执行阶段:
    • 在该阶段,根据配置阶造成的有向无环图,执行可用的Task.

执行一个Gradle的构建最简单的形式是只执行任务中的动做,而这些任务又依赖于其余的任务.为了简化构建过程,构建工具就会新建一个DAG(Directed Acyclic Graph 有向无环图),这意味着全部的任务都会一个接一个的被执行,而且一旦一个任务被执行,就不会再次被执行了,那些没有依赖的任务一般会被优先执行.app

构建配置文件

每个基于Gradle构建的项目都包含至少一个build.gradle文件.在Android中,有一些元素是必须的.工具

//实际构建配置的地方
buildscript {
   repositories {
       jcenter()
   }
   dependencies {
       classpath 'com.android.tools.build:gradle:3.5.1'
   }
}
复制代码

repositories代码块中,jcenter库被配置为整个构建过程的依赖仓库.注:咱们能够在其中添加咱们须要的其余仓库
dependencies代码块中依赖Android插件,其中提供了构建和测试应用所需的一切.插件用于拓展Gradle构建脚本的能力,在一个项目中应用一个插件,该项目就可使用该插件预约义的一些属性和任务.
好比咱们建立的Android项目中就须要申请插件:apply plugin: 'com.android.application',而在库项目中则须要申请apply plugin: 'com.android.library'.不一样的项目类型可使用不一样的插件,不能在一个项目中同时使用这两个插件,会致使构建错误.
配置以后咱们就可使用android{}代码块来对咱们的项目作一些配置了.测试

项目结构

sqms-study
├── app
│   ├── app.iml
│   ├── build
│   ├── build.gradle
│   ├── libs
│   ├── proguard-rules.pro
│   └── src
│       ├── androidTest
│       ├── main
│       │   ├── AndroidManifest.xml
│       │   ├── java
│       │   └── res
│       │       ├── drawable
│       │       ├── layout
│       │       └── values
│       │           ├── colors.xml
│       │           ├── strings.xml
│       │           └── styles.xml
│       └── test
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── settings.gradle
└── sqms-study.iml
复制代码

Gradle项目有一个source set(源集)的概念,官方的解释是一个源集就是一组源文件,它们被一块儿执行和编译,在Android中,main就是一个源集,包含了全部源代码和资源文件,test也是一个源集,用来存放全部测试相关的源代码.gradle

Gradle Wrapper

Wrapper其实就是对Gradle的一层包装,便于在团队开发中统一Gradle构建的版本. 当使用Wrapper启动Gradle的时候,Wrapper会检查Gradle有没有被下载关联,若是没有将会从配置的地址进行下载并构建.ui

生成Wrapper

Gradle提供了内置的Wrapper task 帮助咱们自动生成Wrapper所需的目录文件,在一个项目的根目录输入gradle wrapper.url

Wrapper配置

在使用gradle wrapper指令生成相关文件的时候,能够为其制定一些参数,来控制Wrapper的生成,如不添加任何参数,则使用当前Gradle版本做为生成Wrapper的gradleVersion.spa

Wrapper配置参数
  • --gradle-version : 用于指定使用的gradle版本
  • --gradle-distribution-url : 用于指定下载gradle发行版的url地址

如: 使用gradle wrapper --gradle-2.4 表示配置wrapper使用2.4版本的Gradle.它会影响gradle-wrapper.properties中的distributionUrl的值,规则是https\://services.gradle.org/distributions/gradle-${gradleVersion}-bin.zip

gradle-wrapper.properties

我当前使用的Gradle版本为5.5.1,生成的gradle-wrapper.properties文件以下.

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
复制代码
gradle-wrapper.properties配置字段
  • distributionBase : 下载的Gradle压缩包解压后存储的目录
  • distributionPath : 相对于distributionBase的解压后的Gradle压缩包的路径
  • zipStoreBase : 同distributionBase,用于存放zip压缩包
  • zipStorePath : 同distributionPath,用于存放zip压缩包
  • distributionUrl : Gradle发行版压缩包下载地址
相关文章
相关标签/搜索