由于暂时不怎么忙,就想起自己自学下gradle的自定插件。网上找了几篇博客学习了下,但是不知道是不是我的版本原因按照博客来的都失败了。最后查看官网才知道自己错在哪里,记下来,也方便读者查看。
1、首先建立一个项目,GradleDemo。项目里面一个主module。
2、再在project里面新建一个library或者modlue,因为最后我们还是会把许多配置删除的,所以新建的modlue类型library和module随意。
3、修改当前模块的build.gradle的代码,改成如下:
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
//依赖的sdk
compile localGroovy()
compile gradleApi()
}
//用于上传gradle插件的任务
uploadArchives{
repositories {
mavenDeployer{
//包名
pom.groupId = 'com.demo.custom_plugin'
//模块名
pom.artifactId = 'custom_plugin'
//版本号
pom.version = '1.0.0'
//上传的位置
repository(url: uri('../repos'))
}
}
}
4、删除新建的文件及文件夹
原本的文件目录
删除之后的目录
新建文件夹:
在main目录下新建目录:
再main目录下面新建groovy文件夹, 这个使用来放置我们定义的groovy文件的。也就是插件的代码文件。
再新建com.demo.custom_plugin,这个可以看着插件的包名吧,暂时怎么叫着,其实可以随意的。因为后面我们可以再build.gradle中指定插件的包名,也就是groupId。
新建groovy文件:CustomPlugin.groovy文件。注意这个文件就是我们书写插件代码的文件
暂时加入的代码就是:
这个一定要实现接口Plugin,插件接口。我在里面新建了一个task任务。
class CustomPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
project.task("CustomTask"){
println '这就是我自定义的插件。'
}
}
}
在src目录下,我们新建和main平级的目录:
resources。在里面新建META-INF文件夹,再在里面新建gradle-pulgins文件夹。新建文件:custom_plugin.properties文件
在custom_plugin.properties加入代码:
implementation-class=com.demo.custom_plugin.CustomPlugin
5、上面新建好了,就可以运行插件,生成插件的包了,运行方式,就是打开右侧gradle界面,找到我们插件的模块,点击build生成插件。之后再点击upload上传插件。先build再uplaodArchives。
6、点击了之后我们就会生成:
上面就是完成了插件的自定义,下面就是使用这个插件了。我就是会在使用的时候遇到一个大坑,下面就会说到。请看下面。
7、使用的配置:
再项目根目录的build.gradle中加入:
buildscript {
repositories {
maven{
//插件上传的地址,上面我们时../repos。所以在这里我们就是可以使用./repos
url uri('./repos')
}
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
//加入的groupI:模块id:版本号
classpath 'com.demo.custom_plugin:custom_plugin:1.0.0'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
8、再我们要使用的项目里面加入:
注意不能有引号。
下面说下上面引入的插件名称:apply plugin:com.demo.custom_plugin.CustomPlugin其实是上面我们新建的Groovy文件的包名和类名。如果使用的androidstudio。点击这行代码我们会跳转到:class文件。很奇怪吧。
可以这么说上面这个class文件,其实就是我们上面再groovy里面新建的groovy文件编译之后生成的class文件。所以我们想使用这个插件,其实就是导入这个class文件。
导入之后我们可以再我们项目的other里面找到我们的task
点击CustomTask我们会生成:以下log
下面说下我遇到的大坑:网上所以的文章都是说新建应用插件的时候,使用的是properties文件名,也就是说他们是这样的
apply pulgin: custom_plugin 卧槽,不管我是怎么弄,都是会报找不到id。不知道那些大神的配置是否有没有贴出来了的。我都是按照他们来的但是就是不行。
最后还是看了官网自己摸索了下,才发现应该是我们新建的groovy的文件,如果有大神看到请指导下。是否是有其他方式。