美文网首页Android进阶android基础知识
理解Java、Groovy、Gradle的关系含义及Gradle

理解Java、Groovy、Gradle的关系含义及Gradle

作者: 4b6611392dd6 | 来源:发表于2017-07-11 21:40 被阅读1614次

理解Android开发中Gradle配置的含义及Gradle插件开发

[toc]

       由于Gradle与Groovy有剪不断理还乱的关系,因此在介绍Gradle之前允许我啰嗦几句Groovy相关的知识。搞清楚了他们之间的关系才能系统的学习相关的知识,下面给出一张Java、Groovy、Gradle之间的关系图。

java-groovy-gradle-relation.png

简单解释一下:
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目录下创建 groovyresources目录,resouces目录下创建META-INF/gradle-plugins目录。创建完后的文件目录结构如下图:

content.png
引入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 仓中。


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

本文简单的介绍了Android gradle插件开发的步骤。android gradle插件可以在android 打包时做很多的机械式的事,比如:生成一下相同的代码、对点击事件的埋点等。

最后

要开发Android gradle插件开发需要对groovy语法、gradle框架、Android打包流程有一定的熟悉。

相关文章

网友评论

    本文标题:理解Java、Groovy、Gradle的关系含义及Gradle

    本文链接:https://www.haomeiwen.com/subject/acxvhxtx.html