Gradle for Android groovy篇

命令行

我們在Android Studio中,打開底部 Terminal tab頁,就可以使用命令來操作了,例如gitgradle等。
gradle的命令工具是 gradlew.

在不同系統下,命令引用略有區別。在linux, macOs下,執行命令,./gradlew xxx 在windows下執行命令gradlew xxx

gradle常用命令

./gradlew tasks #查看主要任務
./gradlew tasks --all #查看所有任務,包括緩存任務等
./gradlew :moduleName:taskName #對某個module [moduleName] 的某個任務[TaskName] 運行

./gradlew -v #查看構建版本
./gradlew clean #清除build文件夾
./gradlew build #檢查依賴並編譯打包
./gradlew build --info #檢查依賴並編譯打包,打印日誌
./gradlew build --profile #編譯並輸出性能報告,性能報告一般在構建工程根目錄 build/reports/profile 下
./gradlew build --info --debug --stacktrace #調試模式構建並打印堆棧日誌
./gradlew clean build --refresh-dependencies #強制更新最新依賴,清除構建後再構建
./gradlew installDebug #編譯並安裝 debug 包
./gradlew installRelease #Release 模式打包並安裝
./gradlew uninstallRelease #卸載 Release 模式包

./gradlew assemble #debug release 模式全部渠道打包
./gradlew assembleDebug #編譯並打 Debug 包
./gradlew aD #assembleDebug 的簡寫
./gradlew assembleRelease #編譯並打 Release 的包
./gradlew aR #assembleRelease 的簡寫

./gradlew dependencies #查看項目根目錄下的依賴
./gradlew app:dependencies #查看 app 模塊下的依賴
./gradlew app:dependencies --configuration implementation #查看 app 模塊下包含 implementation 關鍵字的依賴項目

groovy簡單語法

getter/setter

對於每一個field, Groovy都會自動創建與之對應的getter, setter方法。在使用中obj.fieldA 讀取或者obj.fieldA = value 賦值時, 實際上,會自動轉而調用 obj.getFieldAobj.setFieldA(value)方法。
比較類似Kotlin.

語法格式

每行代碼結束不用加分號。
函數定義時, 參數的類型也可以不指定。
==相當於javaequals,如果判斷對象是否同一個,使用is().

變量定義

有兩種定義方式,強類型,弱類型。

// 強類型,類似java
int a = 10
// 弱類型,不區分類型可以賦值其他類型
def x = "hello"
x = 10

Groovy數據結構

Groovy常用的數據結構有,List, Map, Range等。
List
底層對應 Java 中的 List 接口,一般用 ArrayList 作爲真正的實現類,List 變量由[]定義,其元素可以是任何對象。

def test = [100, "hello", true]

//添加新元素
test << 200

println("test="+test)

def list = [1, 2, -4, 5, 6, 7 -3, 8, 9]

//添加
list.add(10)
list.leftShift(11)
list << 12

println("list="+list)

//刪除
list.remove(10) //index
list.removeAt(1) //index
list.removeElement(11) //value

//println("list="+list)

list.removeAll{return it % 3 == 0}

println("list="+list)

//改
list[0] = -1
println("list="+list)

//排序
list.sort { a, b ->
    a == b ? 0 : Math.abs(a) > Math.abs(b) ? 1 : -1
}

println("list="+list)

Map
map表示鍵值表, 有[:]定義, 冒號左邊是key, 右邊是value, 其中 key必須是字符串, value可以是任何對象。另外,key可以用 單引號或雙引號包起來,也可以不包。

def map = [a:1, b:2]

//增加
map['c'] = 3
println(map)

//刪除
map.remove('c')
println(map)

//修改
map['b'] = 8
println(map)

def result = ""
//遍歷,方式1
map.each {k, v ->
    result += "$k$v"
}

println("result=$result")

//遍歷,方式2
map.each{entry ->
    println("${entry.key}, ${entry.value}")
}

map.eachWithIndex { k, v, index ->
    println("$k, $v, $index")
}

map.eachWithIndex { entry, index ->
    println("$entry, $index")
}

groovy腳本中的變量和作用域

對於每一個 Groovy 腳本來說,它都會生成一個 static void main 函數,main 函數中會調用一個 run 函數,腳本中的所有代碼則包含在 run 函數之中。
當我們在 Groovy 腳本中定義一個變量時,由於它實際上是在 run 函數中創建的,所以腳本中的其它方法或其他腳本是無法訪問它的。這個時候,我們需要使用@Field 將當前變量標記爲成員變量,其示例代碼如下所示:

@Field author = JsonChao

參考資料

深度探索 Gradle 自動化構建技術
Groovy基礎篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章