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对象
两者得到的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)
新闻热点
疑难解答