小码哥Android培训-Gradle 入门到精通(一)

前言

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

1 Gradle 安装

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

1.1 下载相应的版本

https://gradle.org/releases

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

1.2 配置

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

1.3 校验安装

在命令行下输入

1.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文件。

1.println(“Hello World!”);

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

2.3 基础语法

1.defa=1

2.defb=”abc”

3.definta

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

1.defoneMeathod(arg1){

2.

3.}

4.

5.inttwoMeathod(arg1,arg2){

6.arg1+arg2

7.}

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

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

2.4 字符串

1.defa=’huangkai’

2.defb=”i am $a”

3.deflines=”’ abc

4.

5.

6.abc

7.

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

1.defa=[“a”,5,6]

上面是定义的方法。

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

1.defa=[5,’string’,true]

2.

3.println(a.getAt(2));

2.5.2 Map

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

1.defmap=[“a”:100,”b”:200]

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

简单的使用map

1.defmap=[“a”:100,”b”:200]

2.

3.println(map.getAt(“b”));

2.6 闭包(Closure)

2.6.1 闭包的定义

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

1.image=(ImageView)findViewById(R.id.imageView);

2.image.setOnClickListener(newView.OnClickListener(){

3.@Override

4.publicvoidonClick(Viewv){

5.

6.}

7.});

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

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

1.defaClosure={

2.println(“helloWorld”);

3.}

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

带参数的闭包,

1.defxxx={a,b->

2.

3.println(a);

4.println(b);

5.

6.}

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

带默认参数的闭包

1.defxxx={

2.println(it);

3.}

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

2.6.2 闭包的使用

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

闭包的使用通常有两种:

·1 直接用,我们把闭包当做一个函数使用。

·2 作为一个参数使用,我们把闭包作为一个回调使用。

1 作为一个函数使用

1.defabc={time,name->

2.

3.println(time);

4.

5.println(name);

6.

7.}

8.

9.abc.call(100,”huangkai”);

10.

11.

12.defxxx={

13.println(it);

14.}

15.

16.xxx.call(10086)

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

2 作为参数

1.Listeach(Closureclosure)

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

1.defa=[5,’string’,true]

2.

3.defb={

4.println(it);

5.}

6.

7.a.each(b);

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

4 创建一个简单的Gradle项目

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

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

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

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

1.task wrapper(type:Wrapper){

2.gradleVersion=’2.0′

3.}

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

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

1.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支持 如下图

1.sourceSets{

2.main{

3.manifest.srcFile’AndroidManifest.xml’

4.java.srcDirs=[‘src’]

5.jniLibs.srcDirs=[‘libs’]

6.aidl.srcDirs=[‘src’]

7.renderscript.srcDirs=[‘src’]

8.res.srcDirs=[‘res’]

9.assets.srcDirs=[‘assets’]

10.}

11.androidTest.setRoot(‘tests’)

12.}

未完待续…

�� �P��M���%�

    原文作者:井上骑士
    原文地址: https://www.jianshu.com/p/141ce6d74823
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞