1、NamedDomainObjectContainer
BaseExtension 中的 buildType
private final NamedDomainObjectContainer<BuildType> buildTypes;
android {
buildTypes {
release {
// 是否开启混淆
minifyEnabled true
// 开启ZipAlign优化
zipAlignEnabled true
//去掉不用资源
shrinkResources true
// 混淆文件位置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// 使用release签名
signingConfig signingConfigs.hmiou
}
debug {
signingConfig signingConfigs.hmiou
}
}
}
命名领域对象容器,翻译成中文的话。
2、each 和 all
all:NamedDomainObjectContainer
each:List、 Map
区别:
1、
all 会对集合内现有的元素和之后加入的原色,都执行给定的闭包操作
each 只会对集合内现有的元素执行给定的闭包操作
2、
all 接收的闭包,可以直接访问集合内元素的属性和方法
each 接收的闭包,不可以直接访问集合内元素的属性和方法
原因:
all 接收的闭包是一个配置闭包,集合内元素既会作为参数传给这个闭包,也会设为闭包的委托对象,这样闭包就可以直接访问对象(集合内元素)的属性和方法
each 接收的闭包只是一个普通的闭包,集合内元素只会作为参数传给这个闭包
参考网上的例子修改一个apk的名字
android {
applicationVariants.all {
it.outputs.all {
outputFileName = "newName.apk"
}
}
}
如果改成 applicationVariants.each ,那么就会出现没有修改成功的情况,因为还没有配置。所以要加个前提那就是 afterEvaluate 。
afterEvaluate {
android.applicationVariants.each {
it.outputs.all {
outputFileName = "newName.apk"
}
}
}
还有另一个问题,那就是each 不能调用元素的属性和方法。
afterEvaluate {
android.applicationVariants.each {
it.outputs.each {
outputFileName = "newName.apk"
}
}
}
> Could not set unknown property 'outputFileName' for project ':app' of type org.gradle.api.Project.
android {
applicationVariants.all {
it.outputs.each {
outputFileName = "newName.apk"
}
}
}
> groovy.lang.MissingPropertyException: Could not set unknown property 'outputFileName' for object of type com.android.build.gradle.internal.api.ApplicationVariantImpl.
3、project
4、ext
定义扩展属性
另一种方式
5、文件
getRootDir
getBuidlDir
copy{
from file('haha')
into getRootProject().getBuildDir()
exclude{
}
rename{}
}
6、buildscript
7、排除第三方冲突包
transitive false 解除第三方库对它的依赖的 传递给我们module 禁止传递依赖