您的位置:首页 > 移动开发 > Android开发

Gradle for Android

2017-05-09 21:43 267 查看
Introduction

Groovy is derived from Java and runs on the Java Virtual Machine.

Gradle使用的语言是基于Groovy的DSL(Domain-Specific Language)。Groovy是为JVM所设计的动态语言。

Projects和tasks是Gradle中两个最重要的概念。每一个build都是由至少一个Project组成,每个Project中有若干个task。Task对象是由一连串的Action对象组成的,Action对象就是一个代码块。

所以执行Gradle的build实际上就是执行一连串的task,以Directed Acyclic Graph(DAG)这种先后执行无重复的方式进行。没有依赖的Task先于其他的执行。

一个Gradle build有三个阶段:

- Initialization:Projects的创建,一个带有build.gradle的module就是一个Project。

- Configuration:执行build脚本,创建并设置每个Project的tasks。

- Execution: Gradle决定执行哪个task,取决于开始build所传入的参数和当前目录。

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
}
}


上述代码把jcenter作为buildscript的依赖来源,jcenter是一种预先配置好的maven仓库。同时指明了依赖Android的build tool,因此就可以调用这个插件

apply plugin `com.android.application`


使用插件就可以在buildscript中调用插件定义的属性和task。Android插件中定义的是符合其需求的DSL。

Gradle中使用到一种概念叫做source set,即一组一起编译和执行的资源。比如main文件夹就是一个source set。

Java:

System.out.println("hello world");


Groovy:

println 'hello world'


Groovy和java的不同:没有分号、没有类名的命名空间、方法参数没有括号,直接空格隔开

Groovy普通字符串使用单引号,双引号用于带有可替换占位符的字符串,如果替换结果的表达式是方法或者带有多个变量,需要使用${},如果是单个变量直接前面加$即可。

示例:

def name = 'Andy'

def greeting = "Hello, $name"

def name_size = "Your name is ${name.size()} characters long"


插值字符串还可以实现执行动态代码,示例:

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


Groovy的类和成员变量

class MyGroovyClass {
String greeting
String getGreeting(){
return 'hello!'
}
}


注意类和成员变量都没有权限修饰符,Groovy中类和方法都是public的,成员变量都是private的。

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


Groovy中成员变量的getter和setter是默认自带的,也可以重写。如果调用instance.greeting,实际上就是调用instance.getGreeting()。

Groovy中方法不必声明返回类型,而且不必调用return这个关键字,会默认返回方法的最后一行。但是为了清楚起见,还是要加return比较好。调用方法时参数不必加括号。

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


Groovy的写法:

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


Groovy中closure的写法:

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


Closures的概念:匿名代码块,可接受参数,可返回一个值

定义:可加Closure这个关键字

Closure square = {
it * it
}


Gradle中的android和dependencies就是closure。

closure如果没有声明参数,则会自动生成一个叫做it的无类型参数,在所有的closures中都可以使用,如果调用者没有指定任何参数,则it就是null。

Groovy中集合

创建List

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


遍历List

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


遍历的更简洁形式

list.each() {
println it
}


Map的定义

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


三种获取Map中的元素的方法

pizzaPrices.get('pepperoni')


或者

pizzaPrices['pepperoni']


又或者

pizzaPrices.pepperoni
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: