android studio gradle

介紹

Gradle 是android studio帶的一款構(gòu)建工具,方便、實(shí)用,一大堆的好話就不說(shuō)了。
如果要熟練使用gradle的話 就要會(huì)使用Groovy腳本語(yǔ)言,Groovy由于它基于Java,所以我們僅介紹Java之外的東西。了解Groovy語(yǔ)言是掌握Gradle的基礎(chǔ)。

Groovy

簡(jiǎn)介

Groovy是一種動(dòng)態(tài)語(yǔ)言,它和Java一樣,也運(yùn)行于Java虛擬機(jī)中,你也可以認(rèn)為groovy是擴(kuò)展了java語(yǔ)言,Groovy對(duì)自己的定義就是:*Groovy是在 java平臺(tái)上的、 具有像Python, Ruby 和 Smalltalk 語(yǔ)言特性的靈活動(dòng)態(tài)語(yǔ)言, Groovy保證了這些特性像 Java語(yǔ)法一樣被 Java開(kāi)發(fā)者使用。執(zhí)行Groovy腳本時(shí),Groovy會(huì)先將其編譯成Java類字節(jié)碼,然后通過(guò)Jvm來(lái)執(zhí)行這個(gè)Java類。

Groovy 基本語(yǔ)法知識(shí)

學(xué)習(xí)過(guò)swift的應(yīng)該對(duì)下面的語(yǔ)法知識(shí)會(huì)會(huì)覺(jué)得很相識(shí),所謂天下的語(yǔ)言都是一家,一脈相傳,然后各自發(fā)揮。所以還是寫(xiě)一下加深印象。

  • Groovy的注釋標(biāo)記和java一樣,用 //或者/**/ 來(lái)表示;
  • Groovy 的語(yǔ)句可以不用分號(hào)來(lái)結(jié)尾;
  • Groovy 支持動(dòng)態(tài)類型,也就是你在定義變量的時(shí)候可以不用指定他的數(shù)據(jù)類型,可以用關(guān)鍵字def,雖然def 不是必須的,但是為了代碼清晰建議是加上這個(gè)關(guān)鍵字
def var  = 1   //可以不用分號(hào), 也可以不用指定類型
def var = "hello"
def int x = 10 //當(dāng)然你也可以直接指定類型
  • 函數(shù)定義的時(shí)候,可以不指定函數(shù)的參數(shù)類型;
String testFunction(arg1,arg2){//無(wú)需指定參數(shù)類型  
  ...  
} 
  • 函數(shù)的返回值也可以是無(wú)類型的,但需要使用def 關(guān)鍵字,最后會(huì)根據(jù)最后一行的代碼的執(zhí)行值 作為函數(shù)的返回類型;
//無(wú)類型的函數(shù)定義,必須使用def關(guān)鍵字  
def  nonReturnTypeFunc(){  
    last_line   //最后一行代碼的執(zhí)行結(jié)果就是本函數(shù)的返回值  
}  
//如果指定了函數(shù)返回類型,則可不必加def關(guān)鍵字來(lái)定義函數(shù)  
String getString(){  
   return"I am a string"  
}  
  • 單引號(hào)' ',,對(duì)應(yīng)java中的字符串,不會(huì)轉(zhuǎn)義字符串中的內(nèi)容,比如:
//不對(duì)$符號(hào)進(jìn)行轉(zhuǎn)義
defsingleQuote='I am $ dolloar'  //輸出就是I am $ dolloar 
  • 雙引號(hào):雙引號(hào)就會(huì)執(zhí)行轉(zhuǎn)義,當(dāng)字符串中出現(xiàn)$時(shí)會(huì)先去$表達(dá)式再求值
defdoubleQuoteWithoutDollar = "I am one dollar" //輸出 I am one dollar  
 def x = 1  
defdoubleQuoteWithDollar = "I am $x dolloar" //輸出I am 1 dolloar  
  • 三個(gè)引號(hào):三個(gè)引號(hào)的字符串支持隨意換行,
  • 除了每行代碼不用加分號(hào)外,Groovy中函數(shù)調(diào)用的時(shí)候還可以不加括號(hào)
    println("test") ---> println"test"

Groovy的數(shù)據(jù)類型

  • 一個(gè)是Java中的基本數(shù)據(jù)類型。
  • 另外一個(gè)是Groovy中的容器類。
  • 最后一個(gè)非常重要的是閉包。
基本數(shù)據(jù)類型

作為動(dòng)態(tài)語(yǔ)言,Groovy世界中的所有事物都是對(duì)象。所以,int,boolean這些Java中的基本數(shù)據(jù)類型,在Groovy代碼中其實(shí)對(duì)應(yīng)的是它們的包裝數(shù)據(jù)類型。比如int對(duì)應(yīng)為Integer,boolean對(duì)應(yīng)為Boolean.

容器

Groovy容器支持3種分別是Map、List、Range.

  • List :變量定義:

List變量由[]定義,比如 def aList = [5,'string',true] //List由[]定義,其元素可以是任何對(duì)象
變量存取:可以直接通過(guò)索引存取,而且不用擔(dān)心索引越界。如果索引超過(guò)當(dāng)前鏈表長(zhǎng)度,List會(huì)自動(dòng) 往該索引添加元素
assert aList[1] == 'string'
assert aList[5] == null //第6個(gè)元素為空
aList[100] = 100 //設(shè)置第101個(gè)元素的值為10
那么去到的 aList[100] 就是等于 100 ,
aList到現(xiàn)在為止有多少個(gè)元素呢?
println aList.size ===>結(jié)果是101

  • Map: 我們知道m(xù)ap都是以鍵值對(duì)的形式出現(xiàn)的,key:value,下面看看在groovy中怎樣的,

變量定義:Map變量由[:]定義,比如 def aMap = ['key1':'value1','key2':true] //單引號(hào)表示字符 還記得吧。
Map由[:]定義,注意其中的冒號(hào)。冒號(hào)左邊是key,右邊是Value。key必須是字符串,value可以是任何對(duì)象。另外,key可以用''或""包起來(lái),也可以不用引號(hào)包起來(lái)。比如
def aNewMap = [key1:"value",key2:true]//其中的key1和key2默認(rèn)被
處理成字符串"key1"和"key2"
但是如果你的key的值 是在你定義map之前就要用()包括起來(lái), 比如下面
def key1="wowo"
def aConfusedMap=[key1:"who am i?"] //這個(gè)時(shí)候 就會(huì)出現(xiàn) aConfusedMap的key值是 key1 而不是wowo,所以這個(gè)時(shí)候的正確寫(xiě)法應(yīng)該是:
def aConfusedMap=[(key1):"who am i?"]

  • Range :Range是Groovy對(duì)List的一種拓展,變量的定義的大體的使用如下:

def aRange = 1..5 //Range類型的變量 由begin值+兩個(gè)點(diǎn)+end值表示
左邊這個(gè)aRange包含1,2,3,4,5這5個(gè)值
如果不想包含最后一個(gè)元素,則
def aRangeWithoutEnd = 1..<5 //包含1,2,3,4這4個(gè)元素
println aRange.from //從哪個(gè)數(shù)開(kāi)始

println aRange.to //從哪個(gè)數(shù)結(jié)束

  • 閉包 :(這不是OC上面我們就用過(guò)的block嘛,只是在java當(dāng)中我們沒(méi)有用過(guò)而已),

閉包英文Closure,是Groovy中非常重要的一個(gè)數(shù)據(jù)類型或者說(shuō)一種概念了。閉包的歷史來(lái)源,種種好處我就不說(shuō)了。我們直接看怎么使用它!
閉包,是一種數(shù)據(jù)類型,它代表了一段可執(zhí)行的代碼。其外形如下:

    Stringparam1, int param2 ->  //這個(gè)箭頭很關(guān)鍵。箭頭前面是參數(shù)定義,箭頭后面是代碼  
    println"this is code" //這是代碼,最后一句是返回值,  
   //也可以使用return,和Groovy中普通函數(shù)一樣  
}  

Closure的定義格式是:
def xxx = {paramters -> code} 或
def xxx = {無(wú)參數(shù),純code} 這種方式不需要->符號(hào)

調(diào)用閉包的方法:

  1. aClosure.call("this is string",100)
  2. aClosure("this is string", 100)

上面是閉包的定義和使用,同時(shí)需要注意的一點(diǎn)是,如果閉包沒(méi)有定義參數(shù)的話,它默認(rèn)是隱藏了一個(gè)參數(shù)名字為it ,就像this的作用類似,it 代表閉包的參數(shù)。看例子,

def greeting = { "Hello, $it!" }
greeting('Patrick') 執(zhí)行結(jié)果是 'Hello, Patrick!'
上面的寫(xiě)法等同于
def greeting = { it -> "Hello, $it!" }
但是,如果在閉包定義時(shí),采用下面這種寫(xiě)法,則表示閉包沒(méi)有參數(shù)!
def noParamClosure = { -> true }
這個(gè)時(shí)候,我們就不能給noParamClosure傳參數(shù)了!
noParamClosure ("test") <==會(huì)報(bào)錯(cuò)的!

閉包使用過(guò)程中的注意點(diǎn)
  1. 省略圓括號(hào),當(dāng)函數(shù)的最后一個(gè)參數(shù)是閉包的話,可以省略圓括號(hào)

def testClosure(int a1,String b1, Closure closure){
//dosomething
closure() //調(diào)用閉包
}
那么調(diào)用的時(shí)候,就可以免括號(hào)!
testClosure (4, "test", {
println"i am in closure"
} )
在Gradle中經(jīng)常會(huì)出現(xiàn)這樣的代碼

task hello {
     doLast{  
       printIn 'hello world'
     }
}```

基本上面介紹的是一些基礎(chǔ)的簡(jiǎn)單知識(shí),很多內(nèi)容還需要在后面學(xué)習(xí)和使用中總結(jié)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評(píng)論 3 426
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,781評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,588評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,315評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,699評(píng)論 1 327
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,882評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,441評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,189評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,388評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,613評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,023評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,310評(píng)論 1 293
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,112評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,334評(píng)論 2 377

推薦閱讀更多精彩內(nèi)容

  • Groovy :是一種動(dòng)態(tài)語(yǔ)言。 1:這種語(yǔ)言比較有特點(diǎn),它和 Java 一樣,也運(yùn)行于 Java 虛擬機(jī)中。簡(jiǎn)單...
    PeytonWu閱讀 1,583評(píng)論 0 1
  • 什么是 Groovy? 簡(jiǎn)言之,Groovy是一種基于JVM(Java虛擬機(jī))的敏捷動(dòng)態(tài)開(kāi)發(fā)語(yǔ)言。它是一種成熟的面...
    北緯26閱讀 4,150評(píng)論 0 14
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,816評(píng)論 18 139
  • 參考:深入理解Android之Gradle Groovy與Java的區(qū)別Groovy語(yǔ)法Groovy基礎(chǔ)——Clo...
    蒸汽飛船閱讀 4,775評(píng)論 0 2
  • 因?yàn)閻?ài)你,便是晴天。 因?yàn)閻?ài)你,我得充滿朝氣, 因?yàn)閻?ài)你,我得健康美麗。 在你陰郁寡歡的日子里, 我是晴天,我來(lái)趕...
    晴空蔚藍(lán)閱讀 275評(píng)論 0 0