标签:
问题与解决方案
学习 GroovyGroovy 概述
简单的来讲 DSL 是一个面向特定小领域的语言,如常见的 HTML、CSS 都是 DSL,它通常是以配置的方式进行编程,与之相对的是通用语言(General Purpose Language),如 Java 等。
环境安装
1 | $ curl -s http://get.sdkman.io | bash |
1 | $ source "$HOME/.sdkman/bin/sdkman-init.sh" |
1 | $ sdk install groovy |
1 2 |
$ groovy -version Groovy Version: 2.4.4 JVM: 1.8.0_25 Vendor: Oracle Corporation OS: Mac OS X |
初探
1 | $ vim test.groovy |
1 | println "hello, world!" |
1 2 |
$ groovy test.groovy hello, world! |
语言基础
例子都已经传到 github 的 demo 项目中。
第一次使用 demo 项目的时候,需要等待自动下载几个远程包。
笔者一个 Java 程序员,可以你能够看到很多 Java 的习性还是留在代码中。
文件与类,变量与函数
ScriptClass.groovy
1 | println ‘hello,world‘ |
groovy/build/classes/main/io/kvh/as/groovy/ScriptClass.class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class ScriptClass extends Script { public ScriptClass() { CallSite[] var1 = $getCallSiteArray(); } public ScriptClass(Binding context) { CallSite[] var2 = $getCallSiteArray(); super(context); } public static void main(String... args) { CallSite[] var1 = $getCallSiteArray(); var1[0].call(InvokerHelper.class, ScriptClass.class, args); } public Object run() {//关键方法 CallSite[] var1 = $getCallSiteArray(); return var1[1].callCurrent(this, "hello,world");// got it? } } |
VarAndMethod.groovy
1 2 3 4 5 6 7 8 9 10 |
def varAndMethod() { def a = 1//不显式声明变量类型 a = "abc"//运行时改变类型 println a//无需;结束一行代码 a = 4//最后一行作为返回值 } def ret = varAndMethod()//文件内运行方法 println ret//输出4 |
字符串
Quoted.groovy
1 2 3 4 5 6 7 8 9 10 |
def quoted() { def singleQ = ‘hello, single quot‘// 声明为java.lang.String def doubleQ = "hello, double quot ${singleQ}"// 如果有${},则为groovy.lang.GString,支持变量替换;否则为java.lang.String def tripleQ = ‘‘‘hello, triple quot‘‘‘// 允许多行,而不需要+号 println singleQ println doubleQ println tripleQ } |
1 2 3 |
"""...""" /.../ $/.../$ |
List,Array 和 Map
Collections.groovy
1 2 3 4 5 6 7 |
def playList() { def lst = ["a",2,true]//支持不同类型元素 println(lst) } playList() |
1 2 3 4 5 6 7 8 9 |
def playArray() { def intArr = [1, 2, 3] as int[]//显示声明 String[] strArr = ["a", "b"]//另外一种方式 println(intArr) println(strArr) } playArray() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def playMap() { def map = [a: "a", b: "b"] println(map) def key = "name" def map2 = [key: ‘a‘]//未使用 def map3 = [(key): ‘a‘]//使用 println(map2) println(map3) } playMap() |
import
1 2 3 4 5 6 7 8 |
import java.lang.* import java.util.* import java.io.* import java.net.* import groovy.lang.* import groovy.util.* import java.math.BigInteger import java.math.BigDecimal |
Import.groovy
1 2 3 |
import java.lang.String as KString println(new KString("aaa")) |
语言特性及其本质Closure(闭包)
1 | { [closureParameters -> ] statements } |
Closure.groovy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
def defaultIt() { 3.times { println it //默认参数 it } } defaultIt() def closureObj() { def obj = { a -> ++a } println obj.call(1) } closureObj() |
面向对象特性
GroovyCLass.groovy
1 2 3 4 5 6 7 |
class People{ String name int age } People p1 = new People(); People p2 = new People(name:"Luis",age: 29)//通过类似 map 的方式赋值参数 |
1 2 3 4 5 6 |
def foo(String p1, int p2 = 1) { println(p1) println(p2) } foo("hello") |
1 2 3 4 |
class People{ String name int age } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
trait Fly { void fly() { println("fly") } } trait Walk { void walk() { println("walk") } } class Duck implements Fly, Walk { } Duck duck = new Duck() duck.fly() duck.walk() |
Groovy 基础小结
学习 GradleGradle 安装
1 | brew install gradle |
Wrapper 是为了让不同版本的插件能够使用其对应版本的 Gradle 的一个机制Gradle Wrapper 会把不同的版本 Gradle 安装在:
1 | $USER_HOME/.gradle/wrapper/dists |
Gradle Build 的生命周期
1 2 3 4 5 6 7 8 |
. ├── app //app module │ ├── build.gradle //app module 的 build.gradle ├── build.gradle //项目 build.gradle,通常配置项目全局配置,如 repositories 和 dependencies ├── gradle.properties //项目属性文件,通常可以放置一些常量 ├── lib //lib module │ ├── build.gradle //lib module 的 build.gradle └── settings.gradle //项目总体设置,通常是配置项目中所有的 module |
Gradle 构建三个阶段:
Settings.gradle
settings.gradle
1 2 3 |
include ‘:app‘, ‘:groovy‘ println ‘print in settings.gradle‘ |
1 | ./gradlew -p groovy build |
Task
groovy/build.gradle
1 2 3 4 5 |
task hello { doLast { println ‘Hello,‘ } } |
1 2 |
$ ./gradlew hello Hello, |
1 2 3 |
task World << { println ‘World!‘ } |
1 2 3 |
task hi { println ‘description hi‘ } |
1 | println ‘hi‘ |
1 2 3 4 5 6 7 8 9 10 11 |
task hello { doLast { println ‘Hello,‘ } } task intro(dependsOn: hello) << { println ‘intro‘ } World.finalizedBy hello |
Plugin
1 | apply plugin: java |
1 | apply from: ‘file_uri.gradle‘ |
Gradle 实践参考
1 2 3 4 5 6 7 8 9 10 11 12 13 |
android.applicationVariants.all { variant ->//获取 variant 参数,就是 productFlavor x buildType variant.outputs.each { output ->//获取输出文件 def file = output.outputFile//修改实例 output.outputFile = new File( (String) file.parent, (String) file.name.replace( file.name, // alter this string to change output file name "Your_Apk_Name_" + variant.name + "_" + variant.versionName + ".apk" ) ) } } |
总结
Android studio:Groovy 与 Gradle 基础【三】
标签:
原文地址:http://www.cnblogs.com/benchao/p/5417345.html