Gradle插件学习笔记(一)

3,941 阅读3分钟

最近一直在深挖Android Gradle的学习,发现其实所谓的Android Gradle也不过就是一个gradle插件,所以如果能学好gradle的开发,我们就可以利用Gradle为我们做很多事,比如干预Android的打包,打出我们想要地apk或者jar,再或者多渠道设置等等。


建立插件工程

如果想实现对Gradle的开发,肯定需要一个开发Gradle的工程,这个我们可以直接使用Android Studio即可,对于Gradle工程的建立,网上主要有两种方式

buildSrc

直接在AndroidStudio中建立一个文件夹buildSrc,然后添加src文件夹和build.gradle文件,如下图所示:

在src文件夹中建立main/groovy ,main/resources 这时就可以发现当前的结构有些类似Android的开发结构了。不同的只是将java换成了groovy,这是当然了,毕竟用groovy开发,如果对groovy还不太熟悉的同学,可以参考我之前的文章Groovy基础知识build.gradle中添加如下代码:

apply plugin: 'groovy'
dependencies {
    compile gradleApi()
    compile localGroovy()
}

这样我们就可以在groovy文件夹中添加对应代码进行gradle开发了。

java Library

第二种方式可以使用新建一个Java Library的形式:

这里注意是Java Library不是android的 Library

我们暂时起名glib,工程如下图所示:

这样的工程暂时还是不能使用的,我们需要做一些修改。 首先是修改gradle文件:

apply plugin: 'groovy'
dependencies {
    compile gradleApi()
    compile localGroovy()
}

然后删除java文件夹,建立groovy文件夹,以及resources文件夹,如下图所示:

区别

使用buildSrc可以在该Project中的任何module中直接使用,如果使用新建的Java Library的形式,需要上传Gradle插件到本地代码库,这个后面再说,所以下面的例子我们先以buildSrc的方式进行介绍

插件测试

groovy新建一个TestPlugin.groovy文件(注意后缀一定要是groovy):


public class TestPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        println("aaaaaa")
    }
}

gradle插件都需要在build.gradle中apply,如:apply plugin: 'com.android.application' 所以他需要有一个对外的名字,这就需要resources下的文件起作用了。 在resources文件夹下建立META-INF/gradle-plugins:

然后在这个文件夹下建一个properties文件,这个文件的名字就是对外的名字,所以起的时候要慎重,我们暂时叫hhh.properties,名字特殊一点容易看出来。 文件内容如下:

implementation-class=TestPlugin

然后我们利用Android Studio自带的app module做个测试:

然后执行打包可以发现输出中:

上传到本地仓库

上面提到了如果使用java Library,需要上传到本地仓库才能引用,现在就需要介绍一下如何进行操作 首先需要修改build.gradle文件:

apply plugin: 'groovy'
apply plugin: "maven"
dependencies {
    compile gradleApi()
    compile localGroovy()
}

uploadArchives{
    repositories{
        mavenDeployer{
            repository(url:uri('../repo'))
            pom.groupId = 'com.test.plugin' // 组名
            pom.artifactId = 'test' // 插件名
            pom.version = '2.0.0' // 版本号
        }
    }
}

然后执行这个uploadArchives Task 这是会发现,工程下多了一个文件夹:

app module如果需要使用,需要添加依赖:

apply plugin: 'com.android.application'
apply plugin: 'hhh'
buildscript{
    repositories{
        maven{
            url uri('../repo')
        }
    }
    dependencies{
        classpath 'com.test.plugin:test:2.0.0'
    }
}

// 引用插件
apply plugin: 'fff'

总结

今天就暂时先写到这里,之后会陆陆续续增加一些关于gradle的相关知识

也欢迎关注我的公众号,之后会推荐更多好用的组件库。