Gradle 入门到精通

前言

Gradle详解内容将分篇介绍,这里首先介绍Gradle的基础知识和项目结构。

1 Gradle 安装

gradle的网站是 http://gradle.org/。我们可以通过相关的网站获取到相应的gradle的版本。也可以在这个网站上面获取相应的资料。

1.1 下载相应的版本

https://gradle.org/releases

在上面的网站下载最新gradle的版本

1.2 配置

将下载的文档解压,解压完成后,将路径添加到系统变量Path内部。

1.3 校验安装

在命令行下输入

gradle -v

如果有相对应的输出代表安装成功

2 Groovy语法入门

2.1 why Groovy?

为什么我们学习gradle需要学习groovy? groovy是google推出的一款基于java的脚本语言。只要简单几句代码就可以完成java程序。虽然groovy看起来是脚本编程语言,但是究其更本也是运行在jvm上面的java语言,知识groovy对java进行了二层的封装。因为这个语言的灵活性,gradle选择了groovy。

2.2 helloWorld

让我们使用最简单的helloWorld代码来入门。首先要确保gradle安装正确,安装正确后,我们新建一个文件夹,在这个文件夹内部新建一个build.gradle文件。

 println("Hello World!");

接着我们在命令行执行 gradle 后就可以看到相应的结果了。

2.3 基础语法

def a = 1
def b = "abc"
def int a

上面是gradle如何定义一个变量的写法。注意gradle没有要求每行必须以;结尾,一行就是一句代码

def oneMeathod(arg1){

}

int twoMeathod(arg1,arg2){
     arg1+arg2
}

上面是定义方法的写法,如果是无返回的方法。需使用def定义。如果指定了相应的返回类型的话,可不使用def关键字。

注意如果有返回值的话,需在最后一行将需要返回的值返回。

2.4 字符串

def a ='huangkai'
def b = "i am $a"
def lines = ''' abc


       abc

       end '''

字符串有三种格式

  • ” 代表完全按照符号内部的内容
  • “” 如果内部有$变量值的话,先取变量值
  • ”’ ”’代表文本支持换行

2.5 容器类型

在Java里提供了多种的容器类型,常见的有List Map Set。他们分别适合不同场景。为不同需求提供解决能力。在grrovy内部也提供了对应的容器类型。

以下内容不用死记硬背,学会查询即可

http://docs.groovy-lang.org/latest/html/groovy-jdk/

2.5.1 List

与Java数组类型相似,与java不一样的,Java需要类型相同的对象。可以理解为定义了一个ArrayList

def a = ["a",5,6]

上面是定义的方法。

可以在上面的网站查询到list提供的方法

def a = [5,'string',true]

println(a.getAt(2));
2.5.2 Map

与java中的map类似,map提供的键值对的能力。

 def map = ["a":100,"b":200]

定义map的方法,key:vaule key必须为字符串 value可以为任何值。 多个值之间使用,分开

简单的使用map

 def map = ["a":100,"b":200]

 println(map.getAt("b"));

2.6 闭包(Closure)

2.6.1 闭包的定义

我们在Java开发中经常使用下面的代码

    image = (ImageView) findViewById(R.id.imageView);
    image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

这个代码是android里面最常见的代码。为一个ImageView设置了一个点击的回调,回调的意思就是设置一个对象给另外一个对象,当被设置的对象发生某种变化后会触发设置对象的方法。

闭包是groovy里面的特殊语法,我们在很多文件都可以看到闭包的身影。闭包是类似回调的一个代码块。因为groovy是脚本语言,所以有很多约定的写法,下面我们来看看闭包是如何定义与书写的。

 def aClosure ={
           println("helloWorld");
      }

这个就是最简单的一个闭包,看样子是不是比较像一个方法。

带参数的闭包,

def xxx = {a , b ->

   println(a);
   println(b);

 }

-> 符号前代表输入的参数,可以不使用类型

带默认参数的闭包

def xxx ={
    println(it);
}

每个闭包在定义的时候都带了一个默认的参数,这个参数的名称叫it。我们可以直接获取他不需要定义。以上闭包的几种定义的方式。

2.6.2 闭包的使用

在上面的章节我们学习了怎么定义闭包,下面我们来学习一下怎么使用闭包。

闭包的使用通常有两种:

  • 1 直接用,我们把闭包当做一个函数使用。
  • 2 作为一个参数使用,我们把闭包作为一个回调使用。

1 作为一个函数使用

 def abc = {time,name ->

   println(time);

   println(name);

 }

abc.call(100,"huangkai");


 def xxx ={
    println(it);
 }

xxx.call(10086)

上面定义了两个闭包,每个闭包的调用方法都是使用call()方法,注意call方法的参数

2 作为参数

List    each(Closure closure)

list定义了一个方法,这个方法是遍历list的方法,方法接收一个参数,参数的类型就是一个闭包。

def a = [5,'string',true]

def b ={
 println(it);
 }

a.each(b);

上面的例子就是怎么把一个闭包作为参数传递给一个方法

4 创建一个简单的Gradle项目

为了让大家能够理解gradle的项目的结构,我们来创建一个最简单的gradle项目来理解Gradle的项目结构。

1 创建一个文件夹作为工程目录

2 在这个目录内新建一个build.gradle文件

3 编写build.gradle文件,在文件内加入这个一句话。

 task wrapper(type: Wrapper) {
   gradleVersion = '2.0'
}

这句话的意思就是,为当前项目创建一个wrapper包,使用的gradle版本是2.0

4 在命令行下进入当前的工程目录,执行以下命令

  gradle wrapper

5 执行成功后,工程目录下生成

wrapper文件是让项目在没有安装gradle的情况下能够使用gradle

gradlew 与 gradlew.bat 是在不同平台下面使用的文档。

6 gradle-wrapper.properties

7 在gradle-wrapper.properties文件中修改成

distributionUrl=https://services.gradle.org/distributions/gradle-2.14.1-all.zip

8 使用android studio加载这个项目

9 在build.gradle 文件中添加一句脚本,接着打开终端标签页面

10 在终端中输入./gradlew命令,最后gradle的文件就会编译完成

5 默认的项目结构

上面的例子我们学习了gradle的基本结构,我们知道了wrapper等文件的作用,下面我们来看看android studio创建的项目结构。

这个目录结构是比较常见的android项目结构,这个多项目结构(Multi project),什么叫多项目结构,意味着项目是由多个子项目组成的,每个子项目都有自己的构建文件(build.gradle)最后由Gradle将多个子项目整合。进而完成项目的构建。

我们看看上图,上图就是最经典的项目结构。

  • app 、app2 : 业务代码
  • library : 代码库
  • build.gradle :项目的总的build文件
  • setting.gradle: 项目会构建的模块
  • gradle : gradle的jar包与配置文件
  • gradlew : gradle的跨平台执行文件

上图是我们项目的默认的目录结构。

有的时候我们需要自定义一些项目结构,如下图

上图的项目结构就是典型的eclipse项目的结构,我要做就是以下几步:

  • 1 创建一个目录
  • 2 修改项目根目录下settings.gradle,在后面将目录的名称添加到文件中 如下图
  • 3 在目录下创建一个build.gradle文件
  • 4 修改build.gradle文件,添加sourceSets支持 如下图

 sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        jniLibs.srcDirs = ['libs']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }
    androidTest.setRoot('tests')
   }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值