----《Android Gradle 权威指南》学习笔记
-
断言就是一个条件表达式。 Task 有一个 onlyIf 方法,它接受一个闭包作为参数,如果该闭包返回 true 则该任务执行,否则跳过。
-
这种方式有很多用途,比如控制程序哪些情况下打什么包,什么时候执行单元测试,什么情况下执行单元测试但不需要测试网络等。
-
举个栗子,假如项目的首发渠道是应用宝和百度,直接执行 build 会编译出所有包,这样会太慢也不符合要求,就可以采用 onlyIf 的方式通过属性来控制。在 build.gradle 中有以下代码:
final String BUILD_APP_ALL = "all";
final String BUILD_APP_SHOUFA = "shoufa";
final String BUILD_APP_EXCLUDE_SHOUFA = "exclude_shoufa";
task taskQQRelease{
doLast{
println "打包 QQ 应用应用市场的包"
}
}
task taskBaiduRelease{
doLast{
println "打包百度应用市场的包"
}
}
task taskHuaWeiRelease{
doLast{
println "打包华为应用市场的包"
}
}
task taskMiuiRelease{
doLast{
println "打包 MIUI 应用市场的包"
}
}
task build{
group BasePlugin.BUILD_GROUP
description "打渠道包"
}
build dependsOn taskQQRelease, taskBaiduRelease, taskHuaWeiRelease, taskMiuiRelease
taskQQRelease.onlyIf {
def execute = false;
if(project.hasProperty("build_apps")){
Object buildApps = project.property("build_apps")
if(BUILD_APP_ALL.equals(buildApps)){
execute = true
}else{
execute = false
}
}else{
execute = false
}
execute
}
taskBaiduRelease.onlyIf {
def execute = false;
if(project.hasProperty("build_apps")){
Object buildApps = project.property("build_apps")
if(BUILD_APP_SHOUFA.equals(buildApps) || BUILD_APP_ALL.equals(buildApps)){
execute = true
}else{
execute = false
}
}else{
execute = false
}
execute
}
taskHuaWeiRelease.onlyIf{
def execute = false;
if(project.hasProperty("build_apps")){
Object buildApps = project.property("build_apps")
if(BUILD_APP_SHOUFA.equals(buildApps) || BUILD_APP_ALL.equals(buildApps)){
execute = true
}else{
execute = false
}
}else{
execute = false
}
execute
}
taskMiuiRelease.onlyIf{
def execute = false;
if(project.hasProperty("build_apps")){
Object buildApps = project.property("build_apps")
if(BUILD_APP_EXCLUDE_SHOUFA.equals(buildApps) || BUILD_APP_ALL.equals(buildApps)){
execute = true
}else{
execute = false
}
}else{
execute = false
}
execute
}
(1) 在命令行中执行命令:gradle build
,没有任何打印结果。
(2) 在命令行中执行命令:gradle build -Pbuild_apps=all
打印结果:
> Task :taskBaiduRelease
打包百度应用市场的包
> Task :taskHuaWeiRelease
打包华为应用市场的包
> Task :taskMiuiRelease
打包 MIUI 应用市场的包
> Task :taskQQRelease
打包 QQ 应用应用市场的包
(3) 在命令行中执行命令:gradle build -Pbuild_apps=shoufa
打印结果:
> Task :taskBaiduRelease
打包百度应用市场的包
> Task :taskHuaWeiRelease
打包华为应用市场的包
(4) 在命令行中执行命令:gradle build -Pbuild_apps=exclude_shoufa
打印结果:
> Task :taskMiuiRelease
打包 MIUI 应用市场的包
说明:命令行中 -P 是为 Project 指定 K-V 格式的键值对,使用格式为: -PK=V。
从打印结果可以看出,通过设置不同的参数就可以控制打包的渠道。
网友评论