Android 项目,构建脚本是 Gradle,基于 Groovy 语言,构建过程就是执行一系列 Task 任务的过程。每个工程由多个 Task 组成,Task 代表一个构建原子操作,如编译,打包,任务之间存在顺序和依赖。
入口,settings.gradle 文件,include,引入多个编译模块。
顶层 build.gradle 文件。
每个模块下 projects 的 build.gradle 文件。
Android 过程包括多个 build.gradle 文件,分别位于工程顶层目录和模块下。构建时,运行 gradle 命令,从当前目录下寻找 build.gradle 文件来执行构建。
不管是顶层 build.gradle 文件,还是模块 build.gradle 文件,buildscript 代码块,首先执行。
buildscript {
//Repository是文件的集合,这些文件通过group、name和version组织起来。
//在使用上,主要体现为jar和xml文件
//gradle不设置默认仓库,它支持多种仓库,maven,通过文件或http访问
//repositories{}表示代码仓库的下载来源。
//gradle仓库,工程支持多个仓库。
//gradle,按照文件中仓库的顺序寻找所需依赖文件,如jar包,若某个仓库找到了,就不会再其他仓库寻找
repositories {
jcenter()
google()
//mavenLocal() //本地库,local repository(${user.home}/.m2/repository)
mavenCentral()//Maven中心库(http://repo1.maven.org/maven2)
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
}
}
buildscript 代码块,是为 Gradle 脚本自身的执行,需要使用的资源,获取脚本依赖插件,在脚本中使用一些第三方插件,类库等,需要手动添加这些插件类库的引用。它们不是直接服务于 Android 项目,而是支持其他 build 脚本的运行,因此,在 buildscript 代码块首先加载。
当执行完 buildscript 代码块,开始顺序执行 gradle 文件中的脚本代码,不带<<的任务,属于自动执行任务,立即执行。
在顶层 build.gradle 文件,allprojects 代码块,会执行多次,对应引入的每个 module 都执行一次,repositories 代码指定所有参与构建的项目使用的仓库来源。
//从工程顶层目录开始,include 的每个模块,都会执行一次 allprojects 的内容。
allprojects {
repositories {
google()
jcenter()
}
}
gradle 文件执行时,遇到 apply from: xxx.gradle,先把引入的 xxx.gradle 执行完,再回到原 gradle 文件执行,当一个 gradle 文件过大时,可以拆分,apply from 方式引入。
任重而道远