這個那麼多,其實咱們平時用的最多仍是閉包的形式。記得太多容易混,別的看到能分別出來這個是建立就能夠了。數組
task 和 tasks
tasks 其實就是一個數組,根據 task 的名字能夠查到。沒啥意思。就是方便。用到在深究。 tasks['task1']bash
group 分類 分組均可以 description 描述符閉包
<< 至關於 doLast (說實話我一用這個就報錯 真的不知道咋回事)app
doFirst -> doSelf -> doLast taskB.shouldRunAfter(taskA) 只是應該,可能也沒有 taskB.MustRunAfter(taskA) 這個就必須了學習
taskA.enabled = true taskA.enabled = falseui
若是咱們首發的渠道是應用寶和百度,直接執行 build 會編譯出來全部的包,這個太慢了,因此就能夠用這個斷言 onlyIf 。spa
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 exMiRelease
task build2{
group BasePlugin.BUILD_GROUP
description '大渠道包'
println description
}
build2.dependsOn exBaiduRelease,exHuaWeiRelease,exMeizuRelease,exMiRelease
exBaiduRelease.onlyIf{
def execute = false
if(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 = false
if(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 = false
if(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 = false
if(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 類型的。咱們能夠經過名字來獲取元素。也就是能夠經過任務名來獲取任務。至於怎麼加規則,咱們簡單寫一下。等之後要用的時候再深究。code
tasks.addRule('增長規則,這是規則描述'){ String taskName ->
task(taskName){
doLast{
println "該 task ${taskName} 不存在 "
}
}
}
ask exBaiduRelease {
dependsOn exYingYongBao
doLast{
println '打包百度'
}
}
exBaiduRelease.mustRunAfter exYingyongBao
複製代碼
最後說個事情,個人 << 符號仍是不能用,難道是版本的問題?仍是別的不清楚,慢慢解決吧。cdn
劃重點: 本文是徹底參考 《Android Gradle 權威指南》而寫,做爲學習筆記使用。對象