不得不學之「 Gradle」 ④ Gradle 任務

Mr.S發表於2019-04-04

一、多種建立方式任務

這個那麼多,其實我們平時用的最多還是閉包的形式。記得太多容易混,別的看到能分別出來這個是建立就可以了。

二、多種方式訪問任務

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 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
}
複製程式碼

不得不學之「 Gradle」 ④ Gradle 任務

八、任務規則

我們建立的任務都是在 TaskContainer 裡的,所有我們訪問任務的時候都是通過 TaskContainer 進行訪問。TaskContainer 又是一個 NamedDomainObjectCollection(繼承它),也就是 NamedDomainObjectCollection 的規則。NamedDomainObjectCollection 是一個具有唯一不變名字的域物件的集合。它裡面的所有元素都有一個唯一不變的名字,String 型別的。我們可以通過名字來獲取元素。也就是可以通過任務名來獲取任務。至於怎麼加規則,我們簡單寫一下。等以後要用的時候再深究。

tasks.addRule('增加規則,這是規則描述'){ String taskName ->
	task(taskName){
		doLast{
println "該 task ${taskName} 不存在 "
		}
	}
}

ask exBaiduRelease  {
	dependsOn exYingYongBao
	doLast{
	println '打包百度'
}

}

exBaiduRelease.mustRunAfter exYingyongBao
複製程式碼

不得不學之「 Gradle」 ④ Gradle 任務

最後說個事情,我的 << 符號還是不能用,難道是版本的問題?還是別的不清楚,慢慢解決吧。

劃重點: 本文是完全參考 《Android Gradle 權威指南》而寫,作為學習筆記使用。

相關文章