android gradle 语法,Gradle 1.语法
8種機械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
gradle 語法解析:
gradle的語法十分簡潔,以至于看起來跟像是配置文件。
先看一個簡單的android項目完整的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'
}
這是個很常見的配置。
這里buildscript后面的作用域內的代碼是配置gradle運行所需要插件,repositories指明插件從jcenter倉庫下載,dependencies指明這個項目編譯依賴于com.android.tools.build插件。
原理
這個腳本看著很直觀,意思也很清楚,但是,對應具體的語法看著還是有些摸不到規律。
解釋這個語法需要先了解閉包。
groovy簡介
這里簡單介紹下groovy,具體得可以看官方文檔。groovy是基于jvm的動態語言,語法和java也十分相似,而groovy更靈活。
groovy 中有很多的語法糖,這使得代碼看著非常簡潔。
首先要簡化的是’;’和return
完整版本(與java完全一致):1
2
3String (){
return "test";
}
這個等價于:1
2
3String (){
'test'
}
然后是groovy方法調用functionTest.groovy1
2
3
4
5
6
7
8void functionA(String a){
print("hello" + a)
}
//調用
functionA("world")
//調用,簡化寫法。
functionA 'world'
上面寫了2種方法調用,作用效果是一樣的。groovy可以去掉方法的括號,用一個空格間隔開。這里是不是似曾相識呢,所以
classpath 'com.android.tools.build:gradle:1.2.3'
也可以寫作
classpath('com.android.tools.build:gradle:1.2.3');
同樣,多個參數,數組,閉包作為參數都可以這樣操作:1
2
3
4
5
6functionB 'test', obj//多個參數
functionC ['key': value] //map作為參數
functionC key: value //map作為參數 簡化寫法
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段代碼是等價的。這樣代碼已經比較清楚了,build.gradle的內容也變成了groovy腳本,實際上,groovy腳本只是內置了class類的定義和main啟動函數,它本質和我們平時寫得java類沒太大區別。當然,上面的代碼看著更像javascript,這是因為里面寫了很多的閉包。
####閉包(closure)
很多語言都有閉包,但是java沒有,所以java的代碼總是很羅嗦。閉包簡單理解就是方法塊,可以想象java中的靜態方法塊。
定義1
2
3
4
5
6
7def closureA = {
println "I'm a closure"
}
//帶參數的
def closureB = { file ->
println file.getPath()
}
需要注意的是這里并沒有定義file的類型,只要參數有path屬性或者getPath()方法就可以了。
調用1
2closureA()
closureB(new File('/home/user/fileName'))
結合函數使用1
2
3
4
5
6
7
8
9
10
11void funtionE(closure){
closure()
///...
}
//調用:
funtionE(closureA)
//直接定義和使用閉包
funtionE {
println "I'm a closure"
}
到這里,我們就可以很容易地看懂gradle文件了;
總結
以上是生活随笔為你收集整理的android gradle 语法,Gradle 1.语法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8年开161万公里创世界纪录 德国男子终
- 下一篇: HTTPS原理全面介绍【备查】