赞
踩
目录
1.2 打开app目录下找到builde.gradle文件,在里面编写插件
最近在学习AOP全埋点,里面用到了Gradle插件,网上相关教程已经相当完备,学完之后感觉受益匪浅,所以准备把制作方法及学习过程中遇到的问题做个记录,便于以后查看。
Gradle插件制作方法一共三种,分别为:在app的builde.gradle中制作、在buildSrc文件夹下制作、自定义module并上传到maven仓库。三种方法实现大致相似,均实现了Plugin<Project>接口。下面分别介绍这三种方法的实现方式。
如果不懂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
,执行结果如下:
下面图片为我的代码所在文件位置:
这个文件夹是可以直接被Android项目Geadle识别的,可以理解为一个专门用来管理插件的地方,编译的时候Gradle会自动识别这个目录,将其内的代码编译成插件。虽然是默认识别,但是我们创建的android项目中,默认是没有这个文件夹的,需要我们自己来创建。
由于是被Gradle默认识别的,所以该文件夹里的目录子文件夹名字是固定的,否则无法被项目识别到,具体结果如下(看红框部分即可):
创建的方式有两种,一种是直接在项目根目录创建这个文件夹,另一种是创建 java/android module并以buildSrc命名,之后将module里的文件全部修改成buildSrc文件夹子目录规定的名称,因为创建module时,Android studio会自动将改module加入项目根目录的settings.gradle中,此时需要移除,否则会报错,因为buildSrc文件夹已经默认是一个module了,可以自动被识别到,不需要再添加到settings.gradle中。
apply plugin: 'groovy'
插件创建完成后,我门可以直接在app目录下的build.gradle中使用,如下:
在控制台执行一下我们自己的task,window下命令:gradlew plugin3
输出如下,Mac执行./gradlew plugin3
该方式创建的插件整个项目都可以使用,但是如果其他项目也想使用就需要再拷贝一份,使用方式不够灵活。
第三种方法可以将写好的插件上传到远端仓库,弥补了第二种使用上不够灵活的缺点。
这一步可以创建java/android moudle,个人建议创建一个java module,这样改写来也简单,只需要把main/src/java改为main/src/groovy即可。之后把文件夹目录按照 2.2的3和4进行创建即可。创建完成后是下图这样的:
参照下图进行配置即可,尽量自己敲一遍,印象会更深。
这一步和第一、二中的创建方式一样,创建groovy文件并集成与plugin即可:
和第二种方式一样,创建完插件也是需要配置改文件的,这样别人才能引用到你的插件。如下:
由于我还没建远程maven仓库,所以目前只上传到本地仓库。上传到远程的方式和这个一样,只是需要把3.2里的url换成你的远程仓库地址。
当我们在build.gradle中配置好uploadArchives里的仓库地址等内容后,as的gradle上就会出现一个uploadArchives任务,如下图,我门点击他就可以完成上传了。
首先在项目中的build.gradle中配置插件maven地址和插件版本号,如下:
最好,在app的build.gradle中配置插件,这两布结束,一个简单的插件上传到maven及使用方法就学会了。
执行./gradlew plugin4,结果如下:
正式我门插件所写的内容。
致此,三种插件的创建方式已经记录完毕。
4.1 Android ASM自动埋点方案实践 (算是读了这篇文章入的门吧)
4.2 Gradle之自定义插件(三种创建方式都讲了,很详细)
本打算这个月好好学下aop全埋点,无奈又有一堆需求过来了,哎,打工人太难了。不过,下一步准备研究下transform api和ASM的使用,最终会写一个简单的埋点demo,到时候学习笔记也会一并写了,大概5月底会完整这件事。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。