2

Gradle构建流程-Android

 2 years ago
source link: https://blog.csdn.net/huangbiao86/article/details/120564906
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Gradle构建流程分析

Gradle项目的构建分为三个阶段:初始化,配置,执行

初始化(Initialization)

​ 该阶段主要是扫描setting.gradle,解析整个工程中所有的Project,构建所有的Project对应的project对象

​ Gradle支持单项目和多项目构建,如果是单项目构建的话,只需要初始化当前的项目即可。如果是多项目构建,则需要决定哪些项目需要加入到构建中并初始化。

​ 决定是否是单项目还是多项目,哪些项目需要加入构建中并初始化,都是通过扫描解析setting.gradle文件中的配置实现。

层次化布局

//setting.gradle
include 'project1', 'project2:child', 'project3:child1'

include 方法接受多个项目路径作为参数。

每个项目路径对于文件系统中的一个目录,通常,项目路径和文件目录一一对应,比如:project2:child对于根目录下project2/child目录。

扁平化布局

//setting.gradle
includeFlat 'project3', 'project4'

includeFlat方法将目录名作为参数。这些目录是根项目目录的兄弟目录,并作为多项目树中根项目的子项目

Settings语法

在构建时候会创建代理对象Settings,其include方法对应着Settings.include(java.lang.String[])

  1. include方法接受项目路径数组作为参数,并将对应的项目添加到构建中
  2. 参数中支持的项目路径分隔符为“:”,而不是"/"
  3. 路径的最后一个节点是项目名称
  4. 项目路径是根据项目目录下的相对路径,可以使用ProjectDescriptor.setProjectDir(java.io.File)更改
// 引入两个项目, 'foo' and 'foo:bar'
// 对应的文件目录是 $rootDir/a 和 $rootDir/a/b
// directories are inferred by replacing ':' with '/'
include 'foo:bar'

// include one project whose project dir does not match the logical project path
// 引入‘baz’项目,对应的文件目录是foo/baz
include 'baz'
project(':baz').projectDir = file('foo/baz')

配置(Configuration)

​ 在这个阶段,Gradle会加载所有参与本次构建项目下的build.gradle文件,解析所有project对象中的task,分析project之间依赖关系生成拓扑图TaskGraph

默认配置模式

​ 默认情况下,Gradle会配置settings.gradle里的所有项目,不论这些项目与最终执行的任务是否有关系。这样做是因为Gradle允许一个项目在配置和执行阶段访问任何其他项目,如Gradle里可以进行跨项目配置(Cross project configuration),一个项目的配置可能会依赖其他项目,所以在执行任务之前,需要配置所有的项目。

项目配置按照广度( breadth-wise)顺序来执行,如父项目先于子项目被配置

按需配置模式

由于多项目配置中,可能存在大量无需配置的项目,如果需要配置所有项目后才执行任务则会浪费大量的时间。从Gradle1.4开始,有一个孵化中的特性,叫做按需配置(configuration on demand)模式。按需配置项目时,Gradle只配置与最终任务相关联的项目,以缩短构建时间。

进行构建时,可以在命令行加入--configure-on-demand来指定用按需配置模式来进行构建

比如Android项目中可以在:gradle.properties文件里面配置:org.gradle.configureondemand来启用或者关闭按需配置,默认是关闭的

执行(Execution)

这是Task真正被执行阶段,Gradle会根据依赖关系决定task执行流程,Task是Gradle项目构建的最小单元,Gradle将一个个Task串联起来完成具体的构建任务,每个Task都属于一个Project。Gradle会根据配置阶段生成的taskGraph任务依赖图,来保证各个task的执行顺序;

任务Task是又一系列的活动Action组成,当任务执行时候,活动Action会执行。可以通过doFirst和doLast方法将活动添加到任务中。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK