agp
大家常说的agp其实就是Android-Gradle-Plugin的缩写,在项目中的配置就是在根目录下的build.gradle文件中的dependencies中配置的classpath “com.android.tools.build:gradle:xxx”,在根目录build.gradle的dependencies中配置好agp后就能在任意module的build.gradle文件中apply Android提供的各种plugin,常见的就有com.android.application和com.android.library,一般来说build.gradle中apply了com.android.application的module,使用assemblexxx执行构建命令打出来的产物就是一个apk,而apply了com.android.library的module的产物则是一个aar,当然,还可以直接apply java,这样的module表示是个纯java的模块,打出的产物是个jar。
Android的gradle项目基本配置说明
现在的Android工程应该都是用Android-Studio来开发的了,也就是说基本都是基于gradle来构建的,应该也只有一些外包公司还会使用Eclipse + ADT来开发Android了。
任何基于gradle来构建的项目的基本结构都是根目录下有个settings.gradle,用来配置项目中的子模块的,使用include来引入子模块,如果子模块不在项目目录内,则可以在include之后使用project(":xxx").projectDir = new File("…")来指定外部module的路径,这一般是gradle项目多仓开发的配置方式。然后就是项目根目录下有个build.gradle,这个文件是用来配置整个项目的基本依赖,比如插件依赖,aar依赖的maven仓库地址等。一般配置结构如下:
// projectDir/build.gradle
apply plugin "..."
apply from "..."
buildscript {
repositories {
maven { url "xxxx" }
....
}
dependencies {
classpath "xxx"
...
}
}
subprojects {
repositories {
maven { url "xxx" }
...
}
}
allprojects {
...
}
这是groovy语言的写法,其实这个build.gradle文件会被编译成字节码去执行,而这些闭包则会编译成函数的实现。而闭包里面的闭包,则相当了函数调用了。
其中buildscript就是用来设置构建脚本所需依赖的仓库地址和引入插件的依赖,subprojects中用来配置每个module中的依赖的仓库地址,allprojects中则是配置config阶段的回调,可以在这个闭包中设置一些状态监听与module属性的配置。
还有一点特别重要的是项目根目录和每个module中都会有一个gradle.properties文件,这个文件中是配置一些key-value的,而构建脚本文件,就是所有的gradle文件,都是可以直接使用gradle.properties中的key-value配置,例如在gradle.properties中配置了DEV_MODE=true,则可在gradle文件中直接使用if (“true” == DEV_MODE) {xxx},但这里有个限制,gradle.properti