一、多种创建方式任务
这个那么多,其实我们平时用的最多还是闭包的形式。记得太多容易混,别的看到能分别出来这个是创建就可以了。
二、多种方式访问任务
task 和 tasks
tasks 其实就是一个数组,根据 task 的名字可以查到。没啥意思。就是方便。用到在深究。
tasks[‘task1’]
三、分组和描述符
group 分类 分组都可以
description 描述符
四、<<
<< 相当于 doLast (新版本就没有了)
五、执行顺序
doFirst -> doSelf -> doLast
taskB.shouldRunAfter(taskA) 只是应该,可能也没有
taskB.MustRunAfter(taskA) 这个就必须了
六、任务的启用和禁用
taskA.enabled = true
taskA.enabled = false
七、断言
如果我们首发的渠道是应用宝和百度,直接执行 build 会编译出来所有的包,这个太慢了,所以就可以用这个断言 onlyIf 。
final String BUILD_APPS_ALL = 'all'final String BUILD_APPS_SHOUFA = 'shoufa'final String BUILD_APPS_EXCLUDE_SHOUFA = 'exclude_shoufa'task exBaiduRelease {doLast{println '打包百度'}}task exHuaWeiRelease {doLast{println '打包华为'}}task exMeizuRelease {doLast{println '打包魅族'}}task exMiRelease {doLast{println '打包小米'}}exMeizuRelease.mustRunAfter exMiReleasetask build2{group BasePlugin.BUILD_GROUPdescription '大渠道包'println description}build2.dependsOn exBaiduRelease,exHuaWeiRelease,exMeizuRelease,exMiReleaseexBaiduRelease.onlyIf{def execute = falseif(project.hasProperty('build_apps')){Object buildAppps = project.property('build_apps')if(buildAppps.equals(BUILD_APPS_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){execute = true}}execute}exHuaWeiRelease.onlyIf{def execute = falseif(project.hasProperty('build_apps')){Object buildAppps = project.property('build_apps')if(buildAppps.equals(BUILD_APPS_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){execute = true}}execute}exMeizuRelease.onlyIf{def execute = falseif(project.hasProperty('build_apps')){Object buildAppps = project.property('build_apps')if(buildAppps.equals(BUILD_APPS_EXCLUDE_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){execute = true}}execute}exMiRelease.onlyIf{def execute = falseif(project.hasProperty('build_apps')){Object buildAppps = project.property('build_apps')if(buildAppps.equals(BUILD_APPS_EXCLUDE_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){execute = true}}execute}

八、任务规则
我们创建的任务都是在 TaskContainer 里的,所有我们访问任务的时候都是通过 TaskContainer 进行访问。TaskContainer 又是一个 NamedDomainObjectCollection(继承它),也就是 NamedDomainObjectCollection 的规则。NamedDomainObjectCollection 是一个具有唯一不变名字的域对象的集合。它里面的所有元素都有一个唯一不变的名字,String 类型的。我们可以通过名字来获取元素。也就是可以通过任务名来获取任务。至于怎么加规则,我们简单写一下。等以后要用的时候再深究。
tasks.addRule('增加规则,这是规则描述'){ String taskName ->task(taskName){doLast{println "该 task ${taskName} 不存在 "}}}ask exBaiduRelease {dependsOn exYingYongBaodoLast{println '打包百度'}}exBaiduRelease.mustRunAfter exYingyongBao

划重点: 本文是完全参考 《Android Gradle 权威指南》而写,作为学习笔记使用。
补充:直接用 ext.build_apps
final String BUILD_APPS_ALL = 'all'final String BUILD_APPS_SHOUFA = 'shoufa'final String BUILD_APPS_EXCLUDE_SHOUFA = 'exclude_shoufa'ext.build_apps = "all"task exBaiduRelease {doLast{println '打包百度'}}task exHuaWeiRelease {doLast{println '打包华为'}}task exMeizuRelease {doLast{println '打包魅族'}}task exMiRelease {println "exMiRelease"doLast{println '打包小米'}}exMeizuRelease.mustRunAfter exMiReleasetask build2{group BasePlugin.BUILD_GROUPdescription '打渠道包'println "build2"doLast{println description}}build2.dependsOn exBaiduRelease,exHuaWeiRelease,exMeizuRelease,exMiReleaseexBaiduRelease.onlyIf{def execute = falseif(project.hasProperty('build_apps')){Object buildAppps = project.property('build_apps')if(buildAppps.equals(BUILD_APPS_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){execute = true}}execute}exHuaWeiRelease.onlyIf{def execute = falseif(project.hasProperty('build_apps')){Object buildAppps = project.property('build_apps')if(buildAppps.equals(BUILD_APPS_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){execute = true}}execute}exMeizuRelease.onlyIf{def execute = falseif(project.hasProperty('build_apps')){Object buildAppps = project.property('build_apps')if(buildAppps.equals(BUILD_APPS_EXCLUDE_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){execute = true}}execute}exMiRelease.onlyIf{def execute = falseif(project.hasProperty('build_apps')){Object buildAppps = project.property('build_apps')if(buildAppps.equals(BUILD_APPS_EXCLUDE_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){execute = true}}execute}
