Gradle for Android

来源:互联网 发布:如何更改mysql的密码 编辑:程序博客网 时间:2024/05/29 10:03
  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

0 0
原创粉丝点击