理解Android开发中Gradle配置的含义及Gradle插件开发
[toc]
由于Gradle与Groovy有剪不断理还乱的关系,因此在介绍Gradle之前允许我啰嗦几句Groovy相关的知识。搞清楚了他们之间的关系才能系统的学习相关的知识,下面给出一张Java、Groovy、Gradle之间的关系图。

简单解释一下:
1、Groovy语言=Java语言的扩展+众多脚本语言的语法。运行在JVM虚拟机上。
2、Gradle项目构框架使用groovy语言实现。基于Gradle框架为我们实现了一些项目构件框架。
本文主要是为了介绍Gradle插件开发,下面简单将会简单的介绍一下Groovy和Gradle(非使用方法)。
Groovy简介
在介绍Gradle之前先简单介绍一下Groovy语言可能会更容易理解。
什么是Groovy
Groovy是一种基于JVM的敏捷开发语言,它结合了众多脚本语言的强大的特性,由于同时又能与Java代码很好的结合(一句话:既有面向对象的特性又有纯粹的脚本语言的特性)。由于Groovy运行在JVM上,因此也可以使用Java语言编写的组建。关于Groovy
为什么使用Groovy
- 灵活的构件语法。 前面提到了Groovy基于JVM的一门语言,同时又具备脚本语言的特性。这样在使用Groovy实现需求的时候就能像写脚本一样简单来实现Java语言实现的功能。
-
DSL(Domain Specific Language)领域相关语言。什么是领域相关语言?我理解的就是方言,一句话能表达很多意思。比如:
repositories
Groovy语法
既然是一门开发语言那么他就有自己的开发工具箱和自己的语法。Groovy是Java语言的一个扩展,它也理所应当的支持Java语言的语法,但比Java 语言更方便、简单。
开始我试图介绍Groovy的语法,但是由于有很多与Java语言相同。可能是水平有限暂时还不能更加简短、易懂的表达清楚,因此暂给一份官方文档地址。
Gradle简介
什么是Gradle和Gradle Plugin
Gradle是一个使用Groovy语言实现的用于构建项目的框架(仅仅是一个框架)。构件项目时真正起作用的是基于gradle框架使用Groovy语言实现的gradle插件。Gradle默认提供了很多的插件,比如:Java-Plugin、Maven-Plugin等。很遗憾,平时使用的Android-Gradle-Plugin是Google开发的而非官方提供。
为什么使用Groovy
前面介绍了Gradle仅仅是一个项目构件框架。为什么Gradle要使用Groovy语言来实现呢?(我百思不得姐)大神的心思我猜不透。我使用过程中体会到Groovy这样两个好处:
1.在项目构件的时候可以使用DSL来写配置。(简洁、明了)
2.在开发项目构件插件时可以使用Groovy语法实现。
怎么使用Gradle
前面说了Gradle仅是一个项目构件框架,真正构件的时候是相对应的Gradle Plugin。所以最起码的是需要引入插件吧。以Android开发为例解释在build.gradle
文件中的配置:
plugin: "com.android.application"
//上面这句代码引入了构件android应用插件,有没有很熟悉!
那么问题来了,插件从何处来?当然是配置路径
buildscript {
repositories {
jcenter()//配置依赖库位置
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
//添加构件Android项目的gradle插件的依赖。有没有更加熟悉!
}
}
又一个问题来了,build.gradle
中配置的android{}
又是什么依据呢?
说来话有点长。Gradle默认实现了很多的构件插件,其中一个是Java Gradle插件。Gradle Java插件至少提供了JavaCompole
的能力,android使用java作为默认开发语言,于是我猜想Android Gradle插件可能是在JavaGradle插件基础之上扩展的。因此android{}
是Android Gradle特有的能力,用于配置构件Android项目的基本配置。buildscript{}
是在Gradle Java插实现的。
Gradle插件开发
Gradle插件开发主要有以下几个步骤:
1、新建一个Android项目。
2、新建一个Android Module,项目类型为Android Library。
3、删除src文件夹下的mian文件夹、删除build.gradle账文件中的所有内容。
4、在src目录下创建 groovy
和resources
目录,resouces
目录下创建META-INF/gradle-plugins
目录。创建完后的文件目录结构如下图:

引入groovy和maven相关依赖,修改
grad.build
配置文件,配置如下:
apply plugin: 'groovy' //引入groovy插件
apply plugin: 'maven' //maven插件
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
//设置maven deployer
uploadArchives {
repositories {
mavenDeployer {
pom.groupId = 'com.chqing.pluginsdk'
pom.artifactId = 'chqing.plugin'
pom.version = 1.1
//文件发布到下面目录。
//此处发布到本地maven仓库 ,如要发布到jcenter,方法相同。
repository(url: uri('../release'))
}
}
}
5、创建插件类ParsePlugin.groovy
,由于Android Studio不能直接创建.groovy
为后缀的文件,所以需要先创建一个java文件,然后修改其后缀。ParsePlugin内容如下:
public class ParsePlugin implements Plugin<Project> {
@Override
void apply(Project project) {
println "Hello plugin"
}
}
6、在META-INF/gradle-plugins
目录下创建对应的配置文件,文件名需要说明一下,此处的配置文件名是我们在使用时名。META-INF/gradle-plugins
文内容是插件入口类的完成名称:

最后就是使用了,首先在工程的build.gradle
中添加如下配置:
apply plugin: 'com.chqing.plugin'
buildscript {
repositories {
jcenter()
maven {
url uri('../release')
}
}
dependencies {
classpath 'com.chqing.pluginsdk:chqing.plugin:1.1'
}
}
使用插件的配置与插件项目的配置如下图:

运行:
到目前为止一个简单的gradle插件已经开发完成,接下来我们需要把插件生成jar包并上传到配置路径的maven 仓中。

uploadArchives
Task执行完之后,插件jar包已经生成成功并上传到了配置的本地maven仓库中。
最后编译gradle时候就可以在gradle console
中看到插件运行的效果。

本文简单的介绍了Android gradle插件开发的步骤。android gradle插件可以在android 打包时做很多的机械式的事,比如:生成一下相同的代码、对点击事件的埋点等。
最后
要开发Android gradle插件开发需要对groovy语法、gradle框架、Android打包流程有一定的熟悉。
网友评论