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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】二维异形件排版算法介绍(三)

转自:https://bbs.huaweicloud.com/blogs/203947 【摘要】 相比于基于可行解的排样算法,重叠移除算法在改变解的状态时,允许零件之间发生重叠,然后采用分离技术消除重叠,直到达到算法的终止条件为止。重叠移除算法的关…

WinCE6.0中应用程序如何直接访问物理空间

在实际开发过程中,经常希望能在应用程序中直接读写设备的物理空间。以前在做WinCE6.0下的MEMMgr时通过秘密加载一个内核态驱动实现了这个需求。但这种方式有一个明显的缺陷,每次读写都必须经由它才能完成。如果只是读取GPIO,那问题不算大。如…

开博之文

逛园子很久了,读而不写非礼也。分享技术,交流经验,体味人生,本博主旨,此为09年的开年大事。转载于:https://www.cnblogs.com/imstand/archive/2009/01/11/1373712.html

【转】Dicom格式文件解析器!!!!!!!

转自:https://www.cnblogs.com/assassinx/archive/2013/01/09/dicomViewer.html Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯的问题 只讲*.dcm 也就是diocm格式文件的读取,读取本身是没啥难度的 无非就是字节码数据流处理。只不过确…

android 设置view最大高度,android-在RecyclerView上设置最大高度

我有一个对话框片段,其中包含线性布局,其中涉及RecyclerView上方的titleText,在最底部,recyclerView下方有一个按钮.由于recyclerView根据适配器设置的项目数展开或折叠,因此按钮有时会被截断并且不再显示在屏幕上,因为recyclerView仅覆盖整个屏幕.我的问题是,有没有一种方法可…

【转贴】利用 Javascript 获取 URL 参数(适合IE、FF)

.  ... .../test.html?str123456如何用Javascript接收类似上面的url参数呢?这个问题网上有很多答案,看了看,主要有两种,一个是利用字符串的截取,另一种是利用正则表达式。[正则式&#xff3d…

【WinCE】流设备驱动简介及GPIO驱动的实现

流设备驱动实际上就是导出标准的流接口函数的驱动,这是文档上面的定义。在WinCE中,所有的流设备都导出流设备接口,这样WinCE中的Device Manager可以加载和管理这些流设备驱动。 流设备驱动的架构如图: 首先我声明一下,…

android contentprovider api,Content Provider Basics

一个内容提供者访问数据的中央资源库。提供者是应用程序的一部分,提供自己的操作数据的UI。然而,内容提供者主要是被其他应用程序引用,通过提供者客户对象访问提供者。提供者和提供者客户端为数据提供一个一致的,标准的接口&#…

【转】医学影像调窗技术!!!!

转自:https://www.cnblogs.com/assassinx/p/3139505.html 在年初的时候做过一个dicom格式文件解析,当时只是提了下。看着跟别人的显示出来也差不多 其实是我想太简单了。整理了下思路 这里提供正确的调窗代码。 医学影像 说得挺高科技的 其实在这个过程…

开始-运行 下常用快捷命令

在“开始”菜单上单击“运行“,输入 1. eventvwr.msc /s 打开事件查看器 (可查看系统日志) 2.gpedit.msc 打开组策略 示例:在Windows Server 2003中关闭系统事件跟踪程序: 单击“开始→运行”,输入gped…

解决6410 WINCE6 应用层调用SetSystemPowerState api关机无效的问题

6410平台下的wince6系统,在应用层中使用SetSystemPowerState api函数关机发现无效。 应用层调用如下: [cpp]view plaincopy SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE); 注:该调用需要引用pm.h头文件,该头文件在…

【转】理解字节序 大端字节序和小端字节序

转自:https://www.cnblogs.com/gremount/p/8830707.html 以下内容参考了 http://www.ruanyifeng.com/blog/2016/11/byte-order.html https://blog.csdn.net/yishengzhiai005/article/details/39672529 1. 计算机硬件有两种储存数据的方式:大端字节序…

Web-DispatcherServletUrlPatterns

Web-DispatcherServletUrlPatterns 在MANIFEST.MF文件中指定了Web-DispatcherServletUrlPatterns时千万要注意它的规则,首先它必须是符合servlet的url-pattern的,其规则如下: 在web.xml文件中,以下语法用于定义映射: …

WCHAR char CString等常用类型互转

1、CString to WCHAR*: [cpp]view plaincopy WCHAR *wch (WCHAR*)str.GetBuffer(str.GetLength()); str为CString类型。 2、WCHRA* to char*: [cpp]view plaincopy memset(buf, 0, bufInLen); // WCHRA to char WideCharToMultiByte( CP_ACP, 0, wch, -1, buf,…

html文件自动批阅器怎么设计,作业作业提交与批改系统HTML界面.doc

作业作业提交与批改系统HTML界面作业1-作业提交与批改系统HTML界面请根据以下需求部分功能或全部全部功能HTML界面代码;注意HTML代码附在本文后面一、作业提交与批改系统系统功能图基本功能1.学生注册2.学生、教师、管理员密码找回功能3&…

【转】Photoshop保存格式介绍大全

01 PSD格式 PSD格式:PSD是Photoshop默认的文件格式,他可以保留文档中的所有图层、蒙蔽、通道、路径、未栅格化的文字、图层样式等。通常情况下,我们都是将文件保存为PSD格式,以后可以对其修改。PSD是除大型文档格式(PS…

创建windows服务,定时监控网站应用程序池

最近网站总是报"Timer_Connection"错误,导致该网站所使用的应用程序池由于错误过多停止运行,网站也就出现了service unvaliable,无法访问,在网上查了很多资料,结果很让人无奈,这个问题已经困扰我了很久,一直没有得到解决,后来同事发来一篇文章让我有了新的解决方法,虽…

UNICODE十六进制数组转成中英文

UNICODE十六进制的数组转成中英文 实现char*转换成中英文,每两个char合成一个wchar_t: [cpp]view plaincopy // UNICODE十六进制数组转成中英文 // hex array to wchar_t* // wchs NULL, wchsLen as output(the size of wchs will be used) // er…

html+选择弹出选项卡,javascript – Chrome扩展程序:从弹出窗口获取当前选项卡

我正在撰写Chrome扩展程序,在其中一部分,当弹出页面上的按钮被点击时,我需要获取当前选项卡的标题和URL。我之前已经和Chrome的消息传递系统一起工作了,并且经过许多努力,已经设法让它在许多场合工作。不过&#xff0c…

【转】Qtcreator中常用快捷键和小技巧

转自:https://blog.csdn.net/imxiangzi/article/details/48863855 https://blog.csdn.net/jh1513/article/details/52346802 快捷键及对应含义 下载地址:http://download.csdn.net/detail/jh1513/9615209 快捷键 功能 Esc 切换到代码编辑状态 F1 …