AOP全埋点---Gradle插件的制作

目录

1.在app的builde.gradle中制作

1.1 创建一个Android项目

1.2 打开app目录下找到builde.gradle文件,在里面编写插件

1.3 插件制作完成

2.在buildSrc文件夹下制作

 2.1 buildSrc文件夹是什么?

2.2 创建buildSrc文件夹及插件编写

2.3 引用插件

2.4 验证插件功能

2.5 buildSrc文件夹优缺点

3.自定义module并上传到maven仓库

3.1 创建module

3.2 配置build.gradle

3.3 编写插件

3.4 配置properties文件

3.5 上传插件到maven仓库

3.6 使用插件

3.7 验证远程插件

4.参考资料:

5.下篇预告


最近在学习AOP全埋点,里面用到了Gradle插件,网上相关教程已经相当完备,学完之后感觉受益匪浅,所以准备把制作方法及学习过程中遇到的问题做个记录,便于以后查看。

Gradle插件制作方法一共三种,分别为:在app的builde.gradle中制作、在buildSrc文件夹下制作、自定义module并上传到maven仓库。三种方法实现大致相似,均实现了Plugin<Project>接口。下面分别介绍这三种方法的实现方式。

1.在app的builde.gradle中制作

1.1 创建一个Android项目

1.2 打开app目录下找到builde.gradle文件,在里面编写插件

如果不懂Groovy语法也没关系,我们可以直接使用java进行编写,如下:

class MyPlugin implements Plugin<Project>{

    @Override
    void apply(Project project) {

        println("MyPlugin执行")

        project.task("mytask"){

            doLast {
                println('doLast-MyPlugin中的task执行了')

            }
            doFirst {
                println('doFirst-MyPlugin中的task执行了')
            }
        }
    }
}

定义一个MyPlugin插件实现Plugin接口。然后在apply方法中自定义一个task。一个简单的插件就完成了。

然后在当前build.gradle文件中引入插件

apply plugin:MyPlugin

到此,一个简单的插件已经制作完成。

然后在控制台执行一下我们自己的task,window下命令:gradlew mytask 输出如下,Mac执行./gradlew mytask ,执行结果如下:

   

1.3 插件制作完成

下面图片为我的代码所在文件位置:

2.在buildSrc文件夹下制作

 2.1 buildSrc文件夹是什么?

  这个文件夹是可以直接被Android项目Geadle识别的,可以理解为一个专门用来管理插件的地方,编译的时候Gradle会自动识别这个目录,将其内的代码编译成插件。虽然是默认识别,但是我们创建的android项目中,默认是没有这个文件夹的,需要我们自己来创建。

 由于是被Gradle默认识别的,所以该文件夹里的目录子文件夹名字是固定的,否则无法被项目识别到,具体结果如下(看红框部分即可):

2.2 创建buildSrc文件夹及插件编写

 创建的方式有两种,一种是直接在项目根目录创建这个文件夹,另一种是创建 java/android module并以buildSrc命名,之后将module里的文件全部修改成buildSrc文件夹子目录规定的名称,因为创建module时,Android studio会自动将改module加入项目根目录的settings.gradle中,此时需要移除,否则会报错,因为buildSrc文件夹已经默认是一个module了,可以自动被识别到,不需要再添加到settings.gradle中。

  1. 在buildSrc文件夹下创建src文件夹和build.gradle文件
  2. build.gradle文件中添加一行代码即可
    apply plugin: 'groovy'
  3. src文件下创建main/groovy文件夹,用来存放插件源码
  4. 在main目录下新建resources目录,然后在resources目录里面再新建META-INF目录,再在META-INF里面新建gradle-plugins目录。最后在gradle-plugins目录里面新建properties文件。properties文件名可以随便取,这个名字就是将来别人引用你这个插件时候的名字。因为插件名可以随便取的,为了保证能够通过这个名字可以映射到插件的源码,我门需要在这个配置文件中设置我门插件的入口,也就是我门插件入口的引用地址,设置给implementation-class,如下所示:
  5. 目录创建结束后,我们可以编写插件了,流程和创建一个java类一样,只不过我门的插件是groovy文件,插件的写法同第一种方法,如下所示:

2.3 引用插件

插件创建完成后,我门可以直接在app目录下的build.gradle中使用,如下:

2.4 验证插件功能

在控制台执行一下我们自己的task,window下命令:gradlew plugin3 输出如下,Mac执行./gradlew plugin3

2.5 buildSrc文件夹优缺点

该方式创建的插件整个项目都可以使用,但是如果其他项目也想使用就需要再拷贝一份,使用方式不够灵活。

3.自定义module并上传到maven仓库

   第三种方法可以将写好的插件上传到远端仓库,弥补了第二种使用上不够灵活的缺点。

3.1 创建module

     这一步可以创建java/android moudle,个人建议创建一个java module,这样改写来也简单,只需要把main/src/java改为main/src/groovy即可。之后把文件夹目录按照 2.2的3和4进行创建即可。创建完成后是下图这样的:

3.2 配置build.gradle

   参照下图进行配置即可,尽量自己敲一遍,印象会更深。

    

3.3 编写插件

   这一步和第一、二中的创建方式一样,创建groovy文件并集成与plugin即可:

3.4 配置properties文件

    和第二种方式一样,创建完插件也是需要配置改文件的,这样别人才能引用到你的插件。如下:

3.5 上传插件到maven仓库

     由于我还没建远程maven仓库,所以目前只上传到本地仓库。上传到远程的方式和这个一样,只是需要把3.2里的url换成你的远程仓库地址。

当我们在build.gradle中配置好uploadArchives里的仓库地址等内容后,as的gradle上就会出现一个uploadArchives任务,如下图,我门点击他就可以完成上传了。

3.6 使用插件

首先在项目中的build.gradle中配置插件maven地址和插件版本号,如下:

最好,在app的build.gradle中配置插件,这两布结束,一个简单的插件上传到maven及使用方法就学会了。

3.7 验证远程插件

执行./gradlew plugin4,结果如下:

正式我门插件所写的内容。

致此,三种插件的创建方式已经记录完毕。

4.参考资料:

  4.1 Android ASM自动埋点方案实践 (算是读了这篇文章入的门吧)

  4.2 Gradle之自定义插件(三种创建方式都讲了,很详细)

5.下篇预告

本打算这个月好好学下aop全埋点,无奈又有一堆需求过来了,哎,打工人太难了。不过,下一步准备研究下transform api和ASM的使用,最终会写一个简单的埋点demo,到时候学习笔记也会一并写了,大概5月底会完整这件事。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值