android gradle 语法,Gradle 1.语法

66b52468c121889b900d4956032f1009.png

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文件了;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值