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所传入的参数和当前目录。
上述代码把jcenter作为buildscript的依赖来源,jcenter是一种预先配置好的maven仓库。同时指明了依赖Android的build tool,因此就可以调用这个插件
使用插件就可以在buildscript中调用插件定义的属性和task。Android插件中定义的是符合其需求的DSL。
Gradle中使用到一种概念叫做source set,即一组一起编译和执行的资源。比如main文件夹就是一个source set。
Java:
Groovy:
Groovy和java的不同:没有分号、没有类名的命名空间、方法参数没有括号,直接空格隔开
Groovy普通字符串使用单引号,双引号用于带有可替换占位符的字符串,如果替换结果的表达式是方法或者带有多个变量,需要使用${},如果是单个变量直接前面加$即可。
示例:
插值字符串还可以实现执行动态代码,示例:
Groovy的类和成员变量
注意类和成员变量都没有权限修饰符,Groovy中类和方法都是public的,成员变量都是private的。
Groovy中成员变量的getter和setter是默认自带的,也可以重写。如果调用instance.greeting,实际上就是调用instance.getGreeting()。
Groovy中方法不必声明返回类型,而且不必调用return这个关键字,会默认返回方法的最后一行。但是为了清楚起见,还是要加return比较好。调用方法时参数不必加括号。
Groovy的写法:
Groovy中closure的写法:
Closures的概念:匿名代码块,可接受参数,可返回一个值
定义:可加Closure这个关键字
Gradle中的android和dependencies就是closure。
closure如果没有声明参数,则会自动生成一个叫做it的无类型参数,在所有的closures中都可以使用,如果调用者没有指定任何参数,则it就是null。
Groovy中集合
创建List
遍历List
遍历的更简洁形式
Map的定义
三种获取Map中的元素的方法
或者
又或者
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
相关文章推荐
- Gradle Plugin for Android Development User Guide (2)
- Android之failed for task ':app:dexDebug'致gradle编译OOM问题解决(android-support-multidex)
- Gradle for Android(一)基本配置、依赖管理
- Gradle for Android 第三篇( 依赖管理 )
- Gradle for Android 第二篇( Build.gradle入门 )
- Android Studio Gradle project refresh failed No such property classpath for class
- Gradle for Android 第七篇( Groovy入门 )
- Gradle for Android(一)基本配置、依赖管理
- Android Studio Gradle Could not reserve enough space for object heap.
- Gradle for Android 第四篇( 构建变体 )
- Gradle for Android 第一篇( 从 Gradle 和 AS 开始 )
- android studio项目依赖第三方报这个错误No such property: sonatypeUserName for class: org.gradle.api.publication.
- In Gradle projects, always use http://schemas.android.com/apk/res-auto for custom attributes more..
- Gradle for Android(二)全局设置、自定义BuildConfig、混淆
- how to declare eclipse project for gradle android
- 【Android Studio探索之路系列】之八:Gradle项目构建系统(二):Gradle for Android脚本语法
- Gradle for Android
- Gradle for Android
- Gradle for Android(二)全局设置、自定义BuildConfig、混淆
- Gradle for Android 第六篇( 测试)