Gradle學(xué)習(xí)

一 作用

編譯,打包砸王,依賴管理。

二 語言:Groovy

1 聲明變量和方法

def a = 1;
def b = "hello";
def int c = 3;
def sayHello(){    
    println("hello");    
    return 1;
}

1 變量類型名峦阁,方法類型名,分號耘成,return都可以省略榔昔。

所以可以變成:

def a = 1
def b = "hello"
def c = 3
def sayHello(){    
    println("hello")    
    1
}

2 def和類型存在一個就可以,也可以都存在

//case1:
def a = 1
int a = 1
def int a = 1
//case2:
def sayHello(String msg){    
    println(msg)    
    1
}
def sayHello(msg){    
    println(msg)    
    1
}
int sayHello(msg){    
    println(msg)    
    1
}

3 但是groovy依然是強類型語言瘪菌,類型轉(zhuǎn)換不一致時仍然會報錯撒会。

4 groovy中的注釋和java中的注釋一致。

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

groovy中數(shù)據(jù)類型有:

1 java中的基本類型

2 java中的對象

3 閉包

4 加強的List师妙,Map等集合類型

5 加強的File诵肛,Stream等IO類型

變量默認(rèn)修飾符為public,基本類型和對象和java中一樣默穴,下面是有一些變換的類型怔檩。

1 String類型

String類型的特點是它的字符串拼接方式,用${}蓄诽,把變量放入{}中薛训,加到其他字符串中間,就可以仑氛。

def a = "a"
def b = "b"
def c = "a:${a},b:$乙埃"
println(c)

result:
a:a,b:b

2 閉包

閉包作為Groovy中的一個類型闸英,可以簡單理解成函數(shù)的另一種定義形式。

閉包可以指定參數(shù)和返回值介袜,當(dāng)然也可以不指定甫何。

//指定參數(shù)和返回值
def test1 = {    
    String a,int b->"result is a=${a},b=$"
}

def test2 = {    
    a,b->"result is a=${a},b=$遇伞" 
}
//只指定返回值def test3 = {    "result is no input"}
//只指定參數(shù)def test4 = {    a,b->        println(a+b)}
//既不指定參數(shù)沛豌,又不指定返回值def test5 = {    a = 2    b = 3    c = a+b    println(c)}
//運行
def a = test1("test1",1)
println(a)
def b = test2("test2",2)
println(b)
def c = test2()
println(c)
test4(1,2)
test5()

//最后的輸出分別為
result is a=test1,b=1
result is a=test2,b=2
result is no input
3
5

當(dāng)閉包中不指定參數(shù)時,閉包中默認(rèn)存在一個it參數(shù)赃额,可以直接使用加派,也可以當(dāng)做它不存在,不使用跳芳。

使用的例子:

def hiddenTest = {    
    println("the hidden parameter is ${it}")
}
//運行
hiddenTest("test")
//結(jié)果
the hidden parameter is test

3 List 和Map

關(guān)于Map和List芍锦,Groovy中添加了一些簡單的寫法,一些方法名上也做了一些改動飞盆。

可以直接在文檔中查閱娄琉,文檔不支持搜索,只能按照首字母索引的順序找吓歇。

http://docs.groovy-lang.org/latest/html/groovy-jdk/index-all.html

4 File孽水,Stream,XmlParser

groovy中同樣提供了文件流的操作城看,和xml解析工具女气。也是做了一些簡化,同時增加了java中不存在的一些方法测柠。

文檔

http://docs.groovy-lang.org/latest/html/groovy-jdk/index-all.html

3 Groovy中其他特性

1 對于class類型的數(shù)據(jù)炼鞠,可以省略 .class,下面兩種寫法效果完全一致

func(File.class)
func(File)
def func(Class clazz) {}

2 類中自動包含getter和setter轰胁,下面兩種寫法效果也是一致的

Book bk = new Book()
bk.id = 1
bk.name = "android art"
bk.press = "china press"
//可以簡寫為:
Book bk = new Book() 
bk.with {   
    id = 1   
    name = "android art"   
    press = "china press"
}

4 簡化的三元表達(dá)式

def result = name != null ? name : "Unknown"
// 省略了name
def result = name ?: "Unknown"

5 簡化的非空判斷

if (order != null) {  
     if (order.getCustomer() != null) {       
        if (order.getCustomer().getAddress() != null) {       
            System.out.println(order.getCustomer().getAddress());       
        }   
    }
}
//可以簡寫為:
println order?.customer?.address

6 在Groovy中谒主,可以使用assert來設(shè)置斷言,當(dāng)斷言的條件為false時赃阀,程序?qū)伋霎惓?/h4>
def check(String name) {   
    // name non-null and non-empty according to Gro    ovy Truth  
    assert name   // safe navigation + Groovy Truth to check   
    assert name?.size() > 3
}

7 switch中判斷條件更靈活霎肯,可支持多種類型同時判斷

def x = 1.23
def result = ""
switch (x) {   
    case "foo": 
        result = "found foo"   // lets fall through   
    case "bar": 
        result += "bar"   
    case [4, 5, 6, 'inList']: 
        result = "list"   
        break   
    case 12..30: 
        result = "range"   
        break   
    case Integer: 
        result = "integer"   
        break   
    case Number: 
        result = "number"   
        break   
    case { it > 3 }: 
        result = "number > 3"   
        break   
    default: 
        result = "default"
}

8 在Groovy中,==相當(dāng)于Java的equals榛斯,观游,如果需要比較對個對象是否是同一個,需要使用.is()肖抱。

Object a = new Object()
Object b = a.clone()
assert a == b
assert !a.is(b)

4 編譯备典,運行Groovy

只需要在build.gradle中編寫task,然后用gradle命令意述,執(zhí)行這個task就可以

task(testname).doLast {   
   println "test"   
   aFun()
}
def aFun() {   
   println "have fun!"   
   System.out.println("test!");
}

運行

gradle testname

三 Gradle

1 gradle的編譯周期

提到gradle的編譯提佣,兩個重要的概念是ProjectTask

Project:對應(yīng)build.gradle文件吮蛹,每個build.gradle就是一個Project

Task:就是build.gradle中具體的task,就是一個個方法拌屏,每個Task中又有多個action

執(zhí)行的過程潮针,就是依次執(zhí)行各個action,action之間會有依賴關(guān)系倚喂,gradle會按照依賴關(guān)系順序執(zhí)行每篷。

gradle的編譯分為三個過程:

初始化階段:創(chuàng)建Project,有多個build.gradle就會創(chuàng)建多個Project

配置階段:執(zhí)行所有的配置文件端圈,同時創(chuàng)建出所有Project中的所有Task

執(zhí)行階段:依次執(zhí)行各個Task焦读,也就是依次執(zhí)行所有Task中的action

2 Gradle Files

下圖是gradle中一個最基本的配置

image

<input type="file" accept=".jpg, .jpeg, .png, .gif" style="display: none;">

settings.gradle: 哪些模塊會被編譯

頂層的build.gradle:對所有的module生效

每個module中的build.gradle:只對自己的module生效,如果和頂層build.gradle內(nèi)容沖突舱权,會覆蓋頂層的build.gradle

頂層的build.gradle

image

<input type="file" accept=".jpg, .jpeg, .png, .gif" style="display: none;">

buildscript

指定了Android 編譯所需要的依賴包

repositories中指定代碼的Maven倉庫dependencies中指定具體的依賴

allprojects

這里面的配置將會應(yīng)用到所有的module矗晃,只放所有module中一些公共的東西。

每個module中的build.gradle

image

apply plugin

這里制定了Android中用的的gradle插件宴倍,這個插件中提供很多Android中需要的Task方法

android

是插件中提供的一個Task张症,這里大塊里指定了所有Android有關(guān)的基本配置

defaultConfig:默認(rèn)配置,如果在AndroidManefest.xml定義了同樣的字段鸵贬,這里的會覆蓋xml中的

buildTypes:編譯類型俗他,release和debug,不同的編譯類型對應(yīng)不同的編譯命令

dependencies

定義該module中的所有依賴

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阔逼,一起剝皮案震驚了整個濱河市兆衅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颜价,老刑警劉巖涯保,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異周伦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)未荒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門专挪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人片排,你說我怎么就攤上這事寨腔。” “怎么了率寡?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵迫卢,是天一觀的道長。 經(jīng)常有香客問我冶共,道長乾蛤,這世上最難降的妖魔是什么每界? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮家卖,結(jié)果婚禮上眨层,老公的妹妹穿的比我還像新娘。我一直安慰自己上荡,他們只是感情好趴樱,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酪捡,像睡著了一般叁征。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逛薇,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天捺疼,我揣著相機(jī)與錄音,去河邊找鬼金刁。 笑死帅涂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尤蛮。 我是一名探鬼主播媳友,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼产捞!你這毒婦竟也來了醇锚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤坯临,失蹤者是張志新(化名)和其女友劉穎焊唬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體看靠,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡赶促,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挟炬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸥滨。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谤祖,靈堂內(nèi)的尸體忽然破棺而出婿滓,到底是詐尸還是另有隱情,我是刑警寧澤粥喜,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布凸主,位于F島的核電站,受9級特大地震影響额湘,放射性物質(zhì)發(fā)生泄漏卿吐。R本人自食惡果不足惜旁舰,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望但两。 院中可真熱鬧鬓梅,春花似錦、人聲如沸谨湘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紧阔。三九已至坊罢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間擅耽,已是汗流浹背活孩。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留乖仇,地道東北人憾儒。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像乃沙,于是被迫代替她去往敵國和親起趾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

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