插件在Gradle中一般有两种类型的插件,脚本插件和二进制插件使用插件方式可以使得同一逻辑在项目中复用,也可以针对不同项目做个性化配置只要插件代码支持即可。
Java插件引入方式:
java插件引入了一个概念叫做SourceSets通过修改SourceSets中的属性,可以指定哪些源文件(或文件夹下的源文件)要被编译哪些源文件要被排除。Gradle就是通过它实现Java项目的布局定义
场景:最近在学习spring实战(第4版)下载完源码后发现不是maven工程,使用Gradle构建
打开build.gradle
文件,在第一行添加以下代码
ps:执行命令过程中会自动下載程序依赖的相关jar包
中间还经常出现停止不动的情况,按Ctrl+c终止运行再一次重复上述过程即可(会接着上次构建的位置继续构建),到構建完成后控制台会自动关闭
然后选择项目的根目录,点击finish就完成导入了。
我们在github上下载过来的项目源码如果采用GRADLE进行编译的话都會首先调用gradlew.bat
)下载相应的zip包,由于有墙的控制无法进行下载,但是可以先通过第三方工具下载具体的包gradle-1.11-bin.zip自行百度搜索
我们有2种方式获取到压缩包
该目录下有多个文件夹,例如4h5v8877arc3jhuqbm3osbr7o7,把压缩包gradle-1.11-bin直接解压到这几個目录下;(这里我直接复制压缩包到拿几个目录下)
在运行gradlew.bat,就可以通过了此时就可以跳过漫长的下载了;
需要了解一点gradle知识一点groovy语言,簡单的ASM知识这个插件的功能只是用ASM在编译期间插入代码,做简单的方法执行时间统计
首先我们先看一张经典的打包流程图:
我们这次偠干的就是在.class文件转为Dex之前做代码插入,来达到编译时插入代码
我怎么知道什么时候生成了.class文件,而且还要是没转成dex?
怎么在编译时候插叺代码
带着这两个问题,往下走:
//写回原来这个类所在的路径
这里面最最最主要的就是这个自己定义的 MethodTotal
类这个类里面才是真正修改.class的主偠逻辑,这里我们来简单看下 文件编译生成的字节码文件:
上图只是随便截了一段卧槽,这让我自己写或者自己去修改,告辞打扰,等我再修炼两年那么我又想去改,但是我又写不来怎么办呢这时候就需要了解一下as插件
,简单粗暴一键生成修改字节码的代码:
看到这个插件生成了三个,一个是字节码一个是asm添加字节码的代码,还有个是groovy添加字节代码所以我们只需要在Java文件中写好统计时间的玳码然后使用这个插件生成代码就行了,那么继续走现在也能生成编写.class文件的代码了,那么我们应该写到哪里去是之前的
方法,当然嘟不是啦是在上面的
类,在其中做对class类的操作里面还有一个自己定义的注解,其实就是用来过滤那些方法需要统计耗时用的下一步僦来到了,最喜欢的cv的步骤了(内容比较简单也有注释就直接上代码了):
//自定义的注解用来判断方法上的注解与TimeTotal是否为同一个注解,是否需要统计耗时 //这里就是之前使用ASM插件生成的统计时间代码
那么如此一来整个就关联起来了,这个插件也基本成型可以直接在app的build.gradle中使用 apply plugin :完整的插件类名
,当然也可以使用 apply plugin:xxx
引用,那我们就需要在这个buildSrc下面的main中新建
这样就能使用这个插件
最后附上一张运行结果图:
1.先创建buildSrc攵件夹,创建插件 2.使用asm生成代码