1、任务执行顺序
task clean(type: Delete) {
println "task clean 1111111"
delete rootProject.buildDir
doLast {
println "task clean dolast one"
}
doLast {
println "task clean dolast three"
}
doFirst {
println "task clean doFirst three"
}
doFirst {
println "task clean doFirst one"
}
println "task clean 2222222"
}
-
这里的执行结果是
111111111 222222222 task clean doFirst one task clean doFirst three task clean dolast one task clean dolast three doFirst 的意思是在任务队列最前面插入待执行任务 doLast 的意思是在任务队列最后面插入待执行任务
2、dependsOn
task clean(type: Delete) {
delete rootProject.buildDir
doLast {
println "task clean dolast three"
}
doFirst {
println "task clean doFirst three"
}
}
task clean2(dependsOn: clean) {
doLast {
println "tasks clean2"
}
}
这里要执行 clean2 任务的话, 必须先执行 clean 任务, 因为 clean2 依赖 clean
3、afterEvaluate
task testTask() {
doLast {
println "testTask"
}
}
afterEvaluate {
def assembleDebugTask = tasks.findByName('assembleDebug')
def testTaskTask = getTasks().findByName('testTask')
testTaskTask.dependsOn(assembleDebugTask)
}
afterEvaluate 绘制任务树绘制完成之后执行, 任务树是一个有向无环图, 表明了每个任务的依赖关系
4、buildTypes
buildTypes {
internal {
initWith debug
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
这里构建了不同的类型, 在写代码的时候可以根据不同的类型选择要执行的代码
[外链图片转存失败(img-Bcvk4dhl-1562551853158)(./resources/buildType.png)]
5、productFlavors
flavorDimensions 'paying', 'nation', 'language'
productFlavors {
free {
dimension 'paying'
}
paid {
dimension 'paying'
}
global {
dimension 'nation'
}
china {
dimension 'nation'
}
chinese {
dimension 'language'
}
english {
dimension 'language'
}
french {
dimension 'language'
}
}
在这里配置不同的维度之后, 就可以选择要执行的变体类型了
[外链图片转存失败(img-zUxBOlkR-1562551853159)(./resources/productFlavors.png)]
6、implementation
, api
, compile
compile: 会传递引用, 已过时
implementation: 不会传递引用, 可以进行代码隔离
api: 会传递引用, 替代之前的 compile