Android工程gradle顺序
2019-07-20 本文已影响47人
gczxbb
Android工程gradle顺序
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方式引入执行。
任重而道远