一、多種創(chuàng)建方式任務(wù)
這個(gè)那么多瘦陈,其實(shí)我們平時(shí)用的最多還是閉包的形式鳖谈。記得太多容易混岁疼,別的看到能分別出來(lái)這個(gè)是創(chuàng)建就可以了。
二缆娃、多種方式訪問任務(wù)
task 和 tasks
tasks 其實(shí)就是一個(gè)數(shù)組捷绒,根據(jù) task 的名字可以查到瑰排。沒啥意思。就是方便疙驾。用到在深究凶伙。
tasks['task1']
三、分組和描述符
group 分類 分組都可以
description 描述符
四它碎、<<
<< 相當(dāng)于 doLast (說實(shí)話我一用這個(gè)就報(bào)錯(cuò) 真的不知道咋回事)
五函荣、執(zhí)行順序
doFirst -> doSelf -> doLast
taskB.shouldRunAfter(taskA) 只是應(yīng)該,可能也沒有
taskB.MustRunAfter(taskA) 這個(gè)就必須了
六扳肛、任務(wù)的啟用和禁用
taskA.enabled = true
taskA.enabled = false
七傻挂、斷言
如果我們首發(fā)的渠道是應(yīng)用寶和百度,直接執(zhí)行 build 會(huì)編譯出來(lái)所有的包挖息,這個(gè)太慢了金拒,所以就可以用這個(gè)斷言 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 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
}
八套腹、任務(wù)規(guī)則
我們創(chuàng)建的任務(wù)都是在 TaskContainer 里的绪抛,所有我們?cè)L問任務(wù)的時(shí)候都是通過 TaskContainer 進(jìn)行訪問。TaskContainer 又是一個(gè) NamedDomainObjectCollection(繼承它)电禀,也就是 NamedDomainObjectCollection 的規(guī)則幢码。NamedDomainObjectCollection 是一個(gè)具有唯一不變名字的域?qū)ο蟮募稀K锩娴乃性囟加幸粋€(gè)唯一不變的名字尖飞,String 類型的症副。我們可以通過名字來(lái)獲取元素。也就是可以通過任務(wù)名來(lái)獲取任務(wù)政基。至于怎么加規(guī)則贞铣,我們簡(jiǎn)單寫一下。等以后要用的時(shí)候再深究沮明。
tasks.addRule('增加規(guī)則辕坝,這是規(guī)則描述'){ String taskName ->
task(taskName){
doLast{
println "該 task ${taskName} 不存在 "
}
}
}
ask exBaiduRelease {
dependsOn exYingYongBao
doLast{
println '打包百度'
}
}
exBaiduRelease.mustRunAfter exYingyongBao
最后說個(gè)事情,我的 << 符號(hào)還是不能用荐健,難道是版本的問題酱畅?還是別的不清楚,慢慢解決吧摧扇。
劃重點(diǎn): 本文是完全參考 《Android Gradle 權(quán)威指南》而寫,作為學(xué)習(xí)筆記使用挚歧。