android gradle 语法,Gradle 1.语法
8種機(jī)械鍵盤軸體對(duì)比
本人程序員,要買一個(gè)寫代碼的鍵盤,請(qǐng)問紅軸和茶軸怎么選?
gradle 語法解析:
gradle的語法十分簡(jiǎn)潔,以至于看起來跟像是配置文件。
先看一個(gè)簡(jiǎn)單的android項(xiàng)目完整的gradle腳本:build.gradle1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38apply plugin: 'com.android.library'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
}
allprojects {
repositories {
mavenCentral()
}
}
android {
compileSdkVersion 19
buildToolsVersion '20.0.0'
defaultConfig {
applicationId "com.example.progressdemo"
minSdkVersion 14
targetSdkVersion 19
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile project(':library')
compile 'com.android.support:support-v4:20.0.0'
}
這是個(gè)很常見的配置。
這里buildscript后面的作用域內(nèi)的代碼是配置gradle運(yùn)行所需要插件,repositories指明插件從jcenter倉(cāng)庫(kù)下載,dependencies指明這個(gè)項(xiàng)目編譯依賴于com.android.tools.build插件。
原理
這個(gè)腳本看著很直觀,意思也很清楚,但是,對(duì)應(yīng)具體的語法看著還是有些摸不到規(guī)律。
解釋這個(gè)語法需要先了解閉包。
groovy簡(jiǎn)介
這里簡(jiǎn)單介紹下groovy,具體得可以看官方文檔。groovy是基于jvm的動(dòng)態(tài)語言,語法和java也十分相似,而groovy更靈活。
groovy 中有很多的語法糖,這使得代碼看著非常簡(jiǎn)潔。
首先要簡(jiǎn)化的是’;’和return
完整版本(與java完全一致):1
2
3String (){
return "test";
}
這個(gè)等價(jià)于:1
2
3String (){
'test'
}
然后是groovy方法調(diào)用functionTest.groovy1
2
3
4
5
6
7
8void functionA(String a){
print("hello" + a)
}
//調(diào)用
functionA("world")
//調(diào)用,簡(jiǎn)化寫法。
functionA 'world'
上面寫了2種方法調(diào)用,作用效果是一樣的。groovy可以去掉方法的括號(hào),用一個(gè)空格間隔開。這里是不是似曾相識(shí)呢,所以
classpath 'com.android.tools.build:gradle:1.2.3'
也可以寫作
classpath('com.android.tools.build:gradle:1.2.3');
同樣,多個(gè)參數(shù),數(shù)組,閉包作為參數(shù)都可以這樣操作:1
2
3
4
5
6functionB 'test', obj//多個(gè)參數(shù)
functionC ['key': value] //map作為參數(shù)
functionC key: value //map作為參數(shù) 簡(jiǎn)化寫法
functionD {
println "i'm a closure"
}
回到開始的build.gradle腳本
可以看到很多地方用了這樣的語法糖,讓我們把它打回原形:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37apply([plugin: 'com.android.library'])
buildscript({
repositories({
jcenter();
);
});
dependencies({
classpath('com.android.tools.build:gradle:1.2.3');
});
allprojects({
repositories({mavenCentral();});
});
android({
compileSdkVersion(19);
buildToolsVersion('20.0.0');
defaultConfig({
applicationId("com.example.progressdemo");
minSdkVersion(14);
targetSdkVersion(19);
});
buildTypes({
release({
runProguard(false);
proguardFiles(getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt');
});
});
});
dependencies({
compile(project(':library'));//inline
compile('com.android.support:support-v4:20.0.0')
});
上面的2段代碼是等價(jià)的。這樣代碼已經(jīng)比較清楚了,build.gradle的內(nèi)容也變成了groovy腳本,實(shí)際上,groovy腳本只是內(nèi)置了class類的定義和main啟動(dòng)函數(shù),它本質(zhì)和我們平時(shí)寫得java類沒太大區(qū)別。當(dāng)然,上面的代碼看著更像javascript,這是因?yàn)槔锩鎸懥撕芏嗟拈]包。
####閉包(closure)
很多語言都有閉包,但是java沒有,所以java的代碼總是很羅嗦。閉包簡(jiǎn)單理解就是方法塊,可以想象java中的靜態(tài)方法塊。
定義1
2
3
4
5
6
7def closureA = {
println "I'm a closure"
}
//帶參數(shù)的
def closureB = { file ->
println file.getPath()
}
需要注意的是這里并沒有定義file的類型,只要參數(shù)有path屬性或者getPath()方法就可以了。
調(diào)用1
2closureA()
closureB(new File('/home/user/fileName'))
結(jié)合函數(shù)使用1
2
3
4
5
6
7
8
9
10
11void funtionE(closure){
closure()
///...
}
//調(diào)用:
funtionE(closureA)
//直接定義和使用閉包
funtionE {
println "I'm a closure"
}
到這里,我們就可以很容易地看懂gradle文件了;
總結(jié)
以上是生活随笔為你收集整理的android gradle 语法,Gradle 1.语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8年开161万公里创世界纪录 德国男子终
- 下一篇: HTTPS原理全面介绍【备查】