迄今为止,我们已经学些了众多gradle构建的概念以及如何运行tasks。在这一章,我们将对这些概念有一个更深的理解,然后开始构建我们自己的tasks。一旦我们掌握了如何编写自定义tasks,那么我们就可以试着编写自己的插件,以达到在多个项目中复用的目的。

在我们创建传统tasks之前,我们有必要了解些Groovy的基本语法。因为这理解Groovy如何运行会使得我们能更好的理解tasks和插件。理解Groovy同样帮助我们理解Gradle如何工作,以及为什么这些配置文件需要这样配置。

在这一章,我们将会遵循以下主题:

  • 理解Groovy

  • 重新认识tasks

  • Hooking Android插件

  • 编写自定义插件

理解Groovy

大部分Android开发者也是名Java开发者,和Java对比,Groovy也是运行在JVM上。当然,如果你是名Java开发者,那么Groovy将会变得容易阅读,但是在编写你自己的Groovy代码之前,你必须对Groovy有一个全面的了解。

简介

Groovy起源于Java,其运行在JVM上。其目标是创造更简单,更直接的语言,不仅仅在脚本语言上或者编译语言上运行。通过这一章节,我们将对Groovy和Java进行对比。

在Java中,打印一天String应该是这样的:

System.out.println("Hello, world!");

在Groovy中,你可以这么写:

println 'Hello, world!'

你应该主要到几点不同之处:

  • 没有了System.out

  • 没有了方括号

  • 列结尾没有了;

这个例子同样使用了单引号,你可以使用双引号或者单引号,但是他们有不同的用法。双引号可以包含插入语句。插入是计算一个字符串包含placeholders的过程,并将placeholders的值替换,这些placeholder可以是变量甚至是方法。Placeholders必须包含一个方法或者变量,并且其被{}包围,且其前面有$修饰。如果其只有一个单一的变量,可以只需要$。下面是一些基本的用法:

def name = 'Andy'
def greeting = "Hello, $name!"
def name_size "Your name is ${name.size()} characters long."

greeting应该是“ Hello,Andy”,并且 name_size 为 Your name is 4 characters long.string的插入可以让你更好的动态执行代码。比如

 def method = 'toString'new Date()."$method"()

这在Java中看起来很奇怪,但是这在groovy里是合法的。

Classes和members

Groovy里面创建类和Java类似,举个例子:

class MyGroovyClass {String greetingString getGreeting() {return 'Hello!'}
}

注意到不论是类名还是成员变量都没有修饰符。其默认的修饰符是类和方法为public,成员变量为private。

当你想使用MyGroovyClass,你可以这样实例化:

def instance = new MyGroovyClass()
instance.setGreeting 'Hello, Groovy!'
instance.getGreeting()

你可以利用def去创建变量,一旦你为你的类创建了实例,你就可以操作其成员变量了。get/set方法groovy默认为你添加 。你甚至可以覆写它。

如果你想直接使用一个成员变量,你可以这么干:

 println instance.getGreeting()println instance.greeting

而这二种方式都是可行的。

方法

和变量一样,你不必定义为你的方法定义返回类型。举个例子,先看java:

public int square(int num) {return num * num;
}
square(2);

你需要将该方法定义为public,需要定义返回类型,以及入参,最后你需要返回值。

我们再看下Groovy的写法:

 def square(def num) {num * num}square 4

没有了返回类型,没有了入参的定义。def代替了修饰符,方法体内没有了return关键字。然而我还是建议你使用return关键字。当你调用该方法时,你不需要括号和分号。

我们设置可以写的更简单点:

def square = { num ->num * num
}
square 8

###闭包

闭包是一段匿名的方法体,其可以接受参数和返回值。它们可以定义变量或者可以将参数传给方法。

你可以简单的使用方括号来定义闭包,如果你想详细点,你也可以这么定义:

Closure square = {it * it
}
square 16

添加了Closure,让其更加清晰。注意,当你没有显式的为闭包添加一个参数,groovy会默认为你添加一个叫做it。你可以在所有的闭包中使用it,如果调用者没有定义任何参数,那么it将会是null,这会使得你的代码更加简洁。

在grade中,我们经常使用闭包,例如Android代码体和dependencies也是。

Collections

在groovy中,有二个重要的容器分别是lists和maps。

创建一个list很容易,我们不必初始化:

List list = [1, 2, 3, 4, 5]

为list迭代也很简单,你可以使用each方法:

list.each() { element ->println element
}

你甚至可以使得你的代码更加简洁,使用it:

list.each() {println it
}

map和list差不多:

Map pizzaPrices = [margherita:10, pepperoni:12]

如果你想取出map中的元素,可以使用get方法:

pizzaPrices.get('pepperoni')
pizzaPrices['pepperoni']

同样的groovy有更简单的方式:

pizzaPrices.pepperoni

是不是简单到爆,瞬间感觉Java太复杂的有木有。下一章我们将学习Groovy在Gradle中的使用情况,相信你会喜欢!

文章整理来自:https://segmentfault.com/a/1190000004276167

Grade for Android 之八: Groovy入门相关推荐

  1. Grade for Android(从 Gradle 和 AS 开始)

    http://www.open-open.com/lib/view/open1451536597026.html Grade for Android(从 Gradle 和 AS 开始) Gradle  ...

  2. 5G 时代的 Android App 开发入门与项目实战

    随着移动互联网的持续发展,Android系统从智能手机逐步拓展到平板电脑.智能电视.车载大屏.智能家居.智能手表等诸多设备,Android开发依然是前景可期的IT岗位. 当然,整个社会正在迈向5G时代 ...

  3. 《Android应用开发入门经典(第3版)》——第6.1节创建演示应用

    本节书摘来自异步社区<Android应用开发入门经典(第3版)>一书中的第6章,第6.1节创建演示应用,作者 [美]Carmen Delessio , Lauren Darcey , Sh ...

  4. 《Android应用开发入门经典(第3版)》——导读

    本节书摘来自异步社区<Android应用开发入门经典(第3版)>一书中的目录,作者 [美]Carmen Delessio , Lauren Darcey , Shane Conder,更多 ...

  5. Android渗透测试Android渗透测试入门教程大学霸

    Android渗透测试Android渗透测试入门教程大学霸 第1章  Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...

  6. Android 游戏开发入门

    Android 游戏开发入门 图书描述: Android系统已经红遍了大江南北,持有Android设备的人也在不断增长.看着大街上用手指划着手机玩游戏的人,你有没有一种自己做一个游戏的想法呢?然而,入 ...

  7. 010 Android之逆向入门

    文章目录 Android APK文件结构 META-INF res AndroidManifest.xml classes.dex resources.arsc lib Assets Android ...

  8. Android自动化测试-从入门到入门(5)AdapterView的测试

    在之前的文章中,我们简单介绍了Espresso的使用.通过onView()方法我们可以快速定位到界面上我们需要测试的目标元素.整体来说,onView()比较适用于UI比较简单的情况,在不需要过于复杂的 ...

  9. android 自动补全方法,Android零基础入门|自动完成文本框AutoCompleteTextView

    原标题:Android零基础入门|自动完成文本框AutoCompleteTextView 上一期学习的Spinner的使用,掌握的怎么样?本期一起来学习AutoCompleteTextView的使用. ...

最新文章

  1. JavaWeb第三讲 JSP内置对象、基本动作指令、常见编译指令及四大作用域
  2. 2016年10月30日表单标签与样式表分类和选择器
  3. 互斥锁、死锁、递归锁、信号量、Event
  4. 如何解读Nginx源码
  5. 《软件需求最佳实践》阅读笔记02
  6. log4net 日志跟踪
  7. 量子计算机 程序,量子计算机程序 会早于量子计算机出现
  8. 图像去雾:基于暗通道的去雾算法 - 附代码
  9. 【离散数学】数理逻辑 第一章 命题逻辑(2) 命题公式及其符号化、命题公式的赋值
  10. 如果找活跃IP段!抓肉鸡必须的!
  11. Ubuntu添加开机自动启动程序的方法
  12. 数码相框(十六、LCD显示JPG格式图片)
  13. 简单处理点击EditText外部区域关闭软键盘
  14. python最新抢票脚本
  15. 魔兽地图服务器修改,魔兽争霸3冰封王座地图编辑器修改无限人口的方法
  16. ITIL v3 中级认证
  17. Java里format什么意思_java String.Format详解
  18. AndroidStudio问题XML格式化
  19. c语言的浪漫,c语言浪漫情话
  20. 软考(网络工程师)-必备网络知识(笔记三)

热门文章

  1. enigma机加强版:兼容汉语和标点符号、阿拉伯数字
  2. ST 和 Macom 制作射频 GaN-on-Si 原型
  3. 全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL
  4. 基于高德地图为底图实现全国、省、地级市下钻
  5. qq推广移动端无法唤醒qq“显示需要更新QQ”
  6. 简单阐述深度学习与机器学习的差异
  7. jq 遍历html字符串片段中的Img标签 src
  8. 无法启动此程序因为计算机中丢失 xxx.dll
  9. [ZJOI2018]历史,洛谷P4338,类LCT维护
  10. 【luogu P4338】【LOJ 2434】历史(LCT)