準備寫一個新的系列,專一於Gradle,計劃會有以下幾篇文章html
在學習Gradle以前,須要簡單普及一下Groovy的語言基礎.Groovy是一門jvm語言,特定領域的語言,裏面的水特別深.咱們不須要所有記住和掌握,只須要記得一些經常使用的,不清楚的馬上去查API 文檔.java
Groovy官方文檔bash
由於目前Android的主流構建工具是用的Gradle,而Gradle使用時就須要用到Groovy,還有Gradle DSL和Android DSL.Gradle裏面其實東西比較多.隨便說幾個,好比渠道包(差別包),AOP,插樁,熱修復,插件化等等,都須要用到Gradle.因此咱們Android開發人員對於Gradle的需求很是大.有必要搞清楚.閉包
打開Android Studio,隨便新建一個Android項目.點擊頂部Tools->Groovy Console便可,這時AS會出來一個窗口,專門拿來運行那種臨時的Groovy代碼的.由於是在本地執行,因此執行速度會很是快.寫好代碼後點擊窗口左上角的三角按鈕便可運行代碼.jvm
droovy的語法比java簡潔不少函數
int r = 1
def a = 1
a = 'da'
println(a)
def b = "dasa"
def c = 56.4
//調用下面的test方法
def d = test()
println(d)
def test() {
println("test method")
return 1
}
//輸出
da
test method
1
複製代碼
def name = "zhangsan"
def b = 2
def test(a, b) {
println("a=${a} b=${b}")
}
test(name, b)
//輸出
a=zhangsan b=2
複製代碼
閉包感受有點像kotlin的高階函數(不知道對不對),能夠將一個閉包做爲參數傳入方法,也能夠賦值給變量.而後調用call方法便可調用閉包.kotlin是調用invoke.工具
//定義閉包 閉包的參數
def closure = { int a, String b ->
println("a=${a} b=${b}")
//閉包返回值
return a + b
}
//調用閉包 定義result變量不用寫def也能夠,666
result = closure.call(1, "name")
println(result)
//輸出
a=1 b=name
1name
複製代碼
比Java中的更增強大.當遇到不會的方法的時候去查API文檔,好比下面的示例代碼中的each閉包,你確定不知道閉包的參數是什麼,這時咱們打開,List的文檔地址,找到each方法,知道了原來是遍歷每一個元素,參數是每一個元素.學習
//list 能夠存放不一樣的數據類型
def list = [1, "test", true, 2.3]
list.each { item ->
println(item)
}
list.each {
println(it)
}
//輸出
1
test
true
2.3
複製代碼
list[1]
這種形式的訪問//空的map
def map1 = [:]
//
def map = ["id":1, "name":"xfhy"]
map['id'] = 2
println(map['id'])
map.id = "idStr"
println(map.id)
map.each { key, value ->
println("key=${key} value=${value}")
}
map.each { entry ->
println(entry)
}
//輸出
2
idStr
key=id value=idStr
key=name value=xfhy
id=idStr
name=xfhy
複製代碼
map['id']
訪問和賦值groovy的文件操做也是很是很是好使ui
def file = new File("D:/test.txt")
file.eachLine { line, lineNo ->
println("第${lineNo}行 $line")
}
//輸出
第1行 name
第2行 age
第3行 book
複製代碼
class Book {
String bookName
double price
}
def book = new Book()
book.with {
bookName = '字典'
price = 24.5
}
println(book.bookName)
println(book.price)
book=null
println(book?.price)
//輸出
字典
24.5
null
複製代碼
我我的認爲,基礎掌握差很少這麼多就好了,剩下的遇到了再查官方文檔.spa