Gradle插件学习笔记(一)

作者: mymdeep | 来源:发表于2018-01-21 12:41 被阅读314次

    最近一直在深挖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的相关知识

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


    相关文章

      网友评论

      • JarryLeo:楼主你好,请问上传本地仓库的时候,有依赖别的jar包,怎么同时上传?
        mymdeep:@JarryLeo 没遇到过这种情况,但是比如打包AAR,A依赖Bjar,B放在A的libs中就可以
      • 聞言:编译不出来repo文件,根本就无法执行上传的命令
        mymdeep:@聞言 请查看一下报错

      本文标题:Gradle插件学习笔记(一)

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