1. 程式人生 > >Android Studio Gradle 例項 task用法 Groovy string特性

Android Studio Gradle 例項 task用法 Groovy string特性

Context:

兩個專案A、外掛B。

需求:A執行時將B打包放到asset下   2.執行時必須刪除手機裡的指定目錄(否則更新不起效果)

1.寫一個cmd指令碼:

路徑D:\MyScript\clear.cmd

adb uninstall com.oppo.reader.test
adb shell rm -rf sdcard/Reader

第一行刪除應用,第二行刪除目錄。

2.在AndroidStudio A專案的build.gradle中寫task:

task renameSearchPlug{
	print "這是配置區,每次執行指令碼都會執行該處程式碼"

    doLast{
		print "這是增加Action的區域,只有執行該task才會執行程式碼"
        print "do buildSearch task"
        File searchPlug = new File("F:\\iReader_AS_workspace\\HiReader\\branchs\\HiReader_103_optimize\\plugin_Search_huawei\\build\\outputs\\plugin_Search_huawei-release.apk");
        if (searchPlug.exists()){
            searchPlug.renameTo("F:\\iReader_AS_workspace\\HiReader\\branchs\\HiReader_103_optimize\\plugin_Search_huawei\\build\\outputs\\pluginweb_search.apk")
        }
    }
}

task copySearchPlug(type: Copy, dependsOn: 'renameSearchPlug'){
    doLast {
        print 'do copySearchPlug task'
        from "F:\\iReader_AS_workspace\\HiReader\\branchs\\HiReader_103_optimize\\plugin_Search_huawei\\build\\outputs\\pluginweb_search.apk"
        into "F:\\iReader_AS_workspace\\HiReader\\branchs\\HiReader_103_optimize\\iReader_V4200_free15_huawei_s\\src\\main\\assets"
    }
}


task buildSearchPlug(dependsOn: 'copySearchPlug') {
    doLast{
        println "do buildSearchPlug"
        println "D:\\MyScript\\clear.cmd".execute().text
    }

gradle是使用的groovy語言,groovy完全相容java。

執行順序:

執行buildSearchPlug,就會觸發renameSearchPlug---》copySearchPlug---》buildSearchPlug,順序通過宣告task時傳入的形參dependsOn,實際上是一種配置。

task是groovy的一個物件,裡面主要有兩種功能:

1.配置  

直接在task的方法體內寫的程式碼,類似於Java賦值操作(當然可以執行方法的)。每次執行指令碼都會被執行。比如你執行make moduel,配置的程式碼就會執行。如上面的:print "這是配置區,每次執行指令碼都會執行該處程式碼"

 2.增加Action 

這個是增加的行為,類似於方法。只有執行該task時才執行,我們可以用 doFirst、doLast 也可以使用doLast的過載符號 <<  這是等價的。

3.type

gradle預先寫好的task,有預定義的Action,你只需要配置下就行了。如copySearchPlug的type是Copy,我們配置下該task暴漏出的兩個屬性from、into就可以了。

Groovy對JAVA的String類進行了增強,特性:

1.字面常量:

有''' '''就是 多行字面常量 版的,用json就不用考慮什麼反斜槓,3引號裡是什麼就是什麼。

2.執行命令列:

"指令碼絕對路徑“.execute()就直接執行這個命令了,

3.在字串中引用變數、表示式:

def testGString(obj){
	println "class: ${obj.getClass().name}"
}

val = 125
testGString("The Stock closed at ${val}")

執行:

在AndroidStudio的右上角有個gradle的icon,點選展開,然後重新整理。找到指定的專案下的task,因為我們的task沒有分組所以都在other組裡。然後雙擊就可以運行了。

右下角是隱藏起來的控制檯,可以點選看輸出。


想深入的小夥伴,推薦兩本書:

博文視點的《實戰Gradle》,你可以看到真正的Gradle的為例。完全介入到程式開發的流程,從前期環境、配置、程式碼審查(find bug)、持續整合(Jenkins)、釋出

 圖靈的《Groovy程式設計》,可以看到Groovy語言的強大,特別是閉包 老半天才明白點