前言
Gradle详解内容将分篇介绍,这里首先介绍Gradle的基础知识和项目结构。
gradle的网站是http://gradle.org/。我们可以通过相关的网站获取到相应的gradle的版本。也可以在这个网站上面获取相应的资料。
在上面的网站下载最新gradle的版本
将下载的文档解压,解压完成后,将路径添加到系统变量Path内部。
在命令行下输入
1.gradle-v
如果有相对应的输出代表安装成功
为什么我们学习gradle需要学习groovy? groovy是google推出的一款基于java的脚本语言。只要简单几句代码就可以完成java程序。虽然groovy看起来是脚本编程语言,但是究其更本也是运行在jvm上面的java语言,知识groovy对java进行了二层的封装。因为这个语言的灵活性,gradle选择了groovy。
让我们使用最简单的helloWorld代码来入门。首先要确保gradle安装正确,安装正确后,我们新建一个文件夹,在这个文件夹内部新建一个build.gradle文件。
1.println("Hello World!");
接着我们在命令行执行gradle 后就可以看到相应的结果了。
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关键字。
注意如果有返回值的话,需在最后一行将需要返回的值返回。
1.defa='huangkai'
2.defb="i am $a"
3.deflines=''' abc
4.
5.
6.abc
7.
8.end '''
字符串有三种格式
·‘’ 代表完全按照符号内部的内容
·“” 如果内部有$变量值的话,先取变量值
·‘’’ ‘’’代表文本支持换行
在Java里提供了多种的容器类型,常见的有List Map Set。他们分别适合不同场景。为不同需求提供解决能力。在grrovy内部也提供了对应的容器类型。
以下内容不用死记硬背,学会查询即可
http://docs.groovy-lang.org/latest/html/groovy-jdk/
与Java数组类型相似,与java不一样的,Java需要类型相同的对象。可以理解为定义了一个ArrayList
1.defa=["a",5,6]
上面是定义的方法。
可以在上面的网站查询到list提供的方法
1.defa=[5,'string',true]
2.
3.println(a.getAt(2));
与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"));
我们在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。我们可以直接获取他不需要定义。以上闭包的几种定义的方式。
在上面的章节我们学习了怎么定义闭包,下面我们来学习一下怎么使用闭包。
闭包的使用通常有两种:
·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);
上面的例子就是怎么把一个闭包作为参数传递给一个方法
为了让大家能够理解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的文件就会编译完成
上面的例子我们学习了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���%�
网友评论