您的位置:首页 > 移动开发 > Android开发

Android构建工具Gradle知识2

2017-02-27 11:05 369 查看


Gradle官网: http://gradle.org/

DSL Reference 相当于API

使用eclipse开发Gradle项目







下载了如下的插件

Download https://jcenter.bintray.com/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.pom

Download https://jcenter.bintray.com/org/apache/commons/commons-parent/39/commons-parent-39.pom

Download https://jcenter.bintray.com/org/apache/apache/16/apache-16.pom

Download https://jcenter.bintray.com/com/google/guava/guava/20.0/guava-20.0.pom

Download https://jcenter.bintray.com/com/google/guava/guava-parent/20.0/guava-parent-20.0.pom

Download https://jcenter.bintray.com/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar

Download https://jcenter.bintray.com/com/google/guava/guava/20.0/guava-20.0.jar

Download https://jcenter.bintray.com/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1-sources.jar

Download https://jcenter.bintray.com/com/google/guava/guava/20.0/guava-20.0-sources.jar

介绍一下Gradle的基本知识

1.基本组件

Gradle中每个待编译的工程都叫Project。每一个Project在构建时都包含一系列的Task。一个Android APK 编译包含:

Java 源码编译Task、资源编译Task、JNI编译Task、Lint检查Task、打包生成APK的Task、签名Task等。

具体的编译工作通过插件完成。

1.1 一个例子

一个名为posdevice的目录,包含3个Android Library工程,2个Android 应用工程。



3个库项目

CPosDeviceSDK

CposSystemSdk

CposSystemSDkxxxImpl

2个应用项目

CPosDeviceServerApk

CPosSdkDemo

每一个Library和App都有独立的Project

在根目录下都有build.gradle,Project的编译脚本,类似于makefile文件

在android中,执行gradle assemble,来编译

如果想要把5个Project都编译出来,可以借助于 Multi-projects Build,怎么才能实现呢。

1.在项目中添加build.gradle。它的作用是 配置其他子project的属性

2.在项目中添加setting.gradle。名字必须是setting.gradle。它用来描述这个multiprojects包含哪些子projects

使用include方法 来导入工程



Setting.gradle除了可以导入还可以设置函数



1.2 gradle命令介绍

1.gradle projects 查看一个项目有多少project , 其实就是访问setting.gradle 中包含的 子project



2.gradle project-path:tasks 查看某个目录名: 中的任务 ,:不可省略



如果已经cd 进入到某个子项目文件夹中了,可以省略路径



3.gradle clean 执行清理任务,和 make clean类似

4.gradle properites 查看所有属性信息

5.gradle tasks 列出每个task的详细信息

Task之间有依赖关系,assemble task 依赖其他task先执行,assemble再最终输出

2.Gradle工作流程



Gradle 包含三个阶段:

1.初始化阶段,执行setting.gradle

2.配置阶段,解析每一个子项目中的build.gradle ,建立起一个task关系的有向图

3.执行任务

3.Gradle编程模型和API



Gradle的生命周期

3.1 Gradle对象



可以通过 Project.getGradle()获得Gradle对象

在项目中的build.gradle 和  setting.gradle 添加
println "build"+gradle.hashCode()
println "setting"+gradle.hashCode()
的结果:




两者得到的gradle对象的hashcode是同一个

在build.gradle 调用 gradleHomeDir 、gradleUserHomeDir、parent 的到



HomeDir是gradle的路径

UserHomeDir是个人电脑上gradle设置的位置,存储了缓存文件、类文件、插件

3.2 Project对象

每一个build.gradle 都会生成一个Project对象

在project中,我们要做三件事:

1.加载插件

2.配置好插件

3.设置插件属性

1.加载插件:

加载插件的过程就从调用apply方法开始,project实现了PluginAware接口。

Apply(map《String,?》option)

Groovy支持调用方法通过 参数名:参数值,参数名:参数值 方式传递参数如

Apply plugin:’com.android.library’

Apply plugin:’com.android.application’

可以把通用的函数放在utils.gradle文件里,让其他工程的build.gradle加载

Apply from:rootProject.getRootDir().getAbsolutePath()+”/utils.gradle”

2.设置属性

Gradle 提供了extra property 设置额外属性,第一次定义该属性时通过ext。定义好之后,后面的存取就不需要ext前缀了。ext属性支持Project和Gradle对象。

def initGradle()

{

Properties pro=new Properties()

File profile=new File(rootDir.getAbsolutePath()+”/local.properties”)

pro.load(profile.newDataInputStream())

//操作外置属性

gradle.ext.api=pro.getProperty(‘sdk.api’)

println gradle.api //第二次使用不用ext

}

3.Task介绍

Task是Gradle的数据模型,不同的插件可以添加不同的Task。每一个Task都需要和一个Project关联。

Task.mytask //新建Task的名字

Task.myTask{configure.closure}

Task.myType.doLast{task action}

Task.myTask{type:SomeType}

Task.myTask{type:SomeType}{configure closure}

一个task包含若干Action.所以 Task有doFirst 和 doLast两个函数.用来表示先执行和最后执行的action。action就是一个闭包。

Task创建时可以指定Type,通过type:名字表达.新建的Task对象会从那个基类Task派生。举个例子,Copy是Gradle中的一个类。Task myTask(type:Copy)的时候,创建的Task就是一个Copy Task。

使用task myTask{xxx} 花括号一个闭包。导致gradle创建这个Task后,返回用户之前,执行闭包中的内容。

使用task myTask《《{xxx} 创建一个Task对象,同时把闭包做一个action加到action队列中,并告诉Task最后在执行这个闭包

《《(表示 doLast)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android gradle