Gradle for Android

  1. 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 ->
    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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值