分享好友 最新动态首页 最新动态分类 切换频道
使用Android Studio开发Gradle插件
2024-12-28 22:19

首先说明一下为什么会有这篇文章。前段时间,插件化以及热修复的技术很热,Nuwa热修复的工具NuwaGradle,携程动态加载技术DynamicAPK,还有希望做最轻巧的插件化框架的Small。这三个App有一个共同的地方就是大量的使用了Gradle这个强大的构建工具,除了携程的框架外,另外两个都发布了独立的Gradle插件提供自动化构建插件,或者生成热修复的补丁。所以学习一下Gradle插件的编写还是一件十分有意义的事。

Gradle的插件一般有这么几种

  • 一种是直接在项目中的gradle文件里编写,这种方式的缺点是无法复用插件代码,在其他项目中还得复制一遍代码(或者说说复制一遍文件
  • 另一种是在独立的项目里编写插件,然后发布到中央仓库,之后直接引用就可以了,优点就是可复用。就和上面的Nuwa和Small一样。

本篇文章不会详细说明Gradle相关的语法,如果要学习gradle相关的东西,请查看Gradle for Android

Gradle插件是使用Groovy进行开发的,而Groovy其实是可以兼容Java的。Android Studio其实除了开发Android App外,完全可以胜任开发Gradle插件这一工作,下面来讲讲具体如何开发。

  1. 首先,新建一个Android项目。
  2. 之后,新建一个Android Module项目,类型选择Android Library。
  3. 将新建的Module中除了build.gradle文件外的其余文件全都删除,然后删除build.gradle文件中的所有内容。
  4. 在新建的module中新建文件夹src,接着在src文件目录下新建main文件夹,在main目录下新建groovy目录,这时候groovy文件夹会被Android识别为groovy源码目录。除了在main目录下新建groovy目录外,你还要在main目录下新建resources目录,同理resources目录会被自动识别为资源文件夹。在groovy目录下新建项目包名,就像Java包名那样。resources目录下新建文件夹META-INF,META-INF文件夹下新建gradle-plugins文件夹。这样,就完成了gradle 插件的项目的整体搭建,之后就是小细节了。目前,项目的结构是这样的。

打开Module下的build.gradle文件,输入

下面我们在包名下新建一个文件,命名为PluginImpl.groovy,注意有groovy后缀,然后在里面输入,注意包名替换为你自己的包名。

然后在resources/META-INF/gradle-plugins目录下新建一个properties文件,注意该文件的命名就是你只有使用插件的名字,这里命名为plugin.test.properties,在里面输入

注意包名需要替换为你自己的包名。

这样就完成了最简单的一个gradle插件,里面有一个叫testTask的Task,执行该task后会输出一段文字,就像当初我们输出HelloWorld一样。

接着,我们需要将插件发布到maven中央仓库,我们将插件发布到本地仓库就好了,在module项目下的buidl.gradle文件中加入发布的代码。

上面的group和version的定义会被使用,作为maven库的坐标的一部分,group会被作为坐标的groupId,version会被作为坐标的version,而坐标的artifactId组成即module名,我们让其取一个别名moduleName。然后maven本地仓库的目录就是当前项目目录下的repo目录。 
这时候,右侧的gradle Toolbar就会在module下多出一个task

点击uploadArchives这个Task,就会在项目下多出一个repo目录,里面存着这个gradle插件。

目录就像上图这样,具体目录结构和你的包名等一系列有关,time是我的module名。

发布到本地maven仓库后,我们就使用它,在叫app的android项目下的gradle.build的文件中加入

apply plugin后面引号内的名字就是前文plugin.test.properties文件的文件名。而class path后面引号里的内容,就是上面grade中定义的group,version以及moduleName所共同决定的,和maven是一样的。

同步一下gradle,右侧app下other分类下就会多出一个testTask,双击执行这个Task,控制台就会输出刚才我们输入的字符串

接下来我们将其发布到jcenter中央仓库。参考之前写的一篇文章 使用Android Studio将开源库发布到Jcenter中央库

在项目根目录下的build.gradle文件中加入。

在项目根路径下新建bintray.gradle文件,输入

将对应的描述性文字修改为你自己的信息,尤其是最前面的一系列的def定义,然后在gradle.properties文件中加入BINTRAY_USER和BINTRAY_KEY。

在你的module中apply该grade文件

右侧的gradle的toolbar就会多出几个task

之后我们先运行other下的install这个task,再执行bintrayUpload这个task,如果不出意外,就上传了之后不要忘记到后台add to jcenter。成功add到jcenter之后就会有link to jcenter的字样

耐心等待add to center成功的消息,之后就可以直接引用了,将module下的gradle文件maven部分的定义

前面加入

最终的内容如下

就是这么简单,再次运行一下测试下是否成功。

最佳实践的来源是源自multidex,为什么呢,因为最近当方法数超了之后,如果选择multidex,编译的过程就会慢很多很多,为了检测到底是哪一步的耗时,需要编写一个插件来统计各个task执行的时间,因此就有了这么一个最佳实践。

在PluginImpl同级目录下新建TimeListener.groovy文件。输入

然后将PluginImpl文件中的apply方法修改为

完成后打包发布到jcenter()。之后你只要引用了该插件,就会统计各个task执行的时间,比如运行app,就会输出像下面的信息。

最佳实践的末尾,推广一下这个插件,这个插件我已经将其发布到jcenter仓库,如果要使用的话加入下面的代码即可

上面的是小试牛刀了下,接下来我们需要获得自定义的参数。

首先按照上面的步骤新建一个module。新建PluginExtension.groovy,输入

然后我们希望能传入嵌套的参数,再新建一个PluginNestExtension.groovy,输入

然后新建一个CustomTask.groovy,继承DefaultTask类,使用 @TaskAction注解标注实现的方法

只是做了拿到了参数,然后做最简单的输出操作,使用 ${project.pluginExt.param1}和 ${project.pluginExt.nestExt.nestParam1}等拿到外部的参数。

别忘了在META-INF/gradle-plugins目录下新建properties文件指定插件的接口实现类。

复制之前新建的PluginImpl.groovy到包下,修改apply方法

将插件发布到本地maven后,进行引用。

定义外部参数,这里我们定义了param1,param2,nestParam1,nestParam2,此外param3和nestParam3保持默认。

同步一下gradle,执行customTask。

上面的代码很简单,不用解释也能看到,所以不再解释了。

  • 构建神器Gradle
  • 自定义Gradle插件(一
  • 自定义Gradle插件(二
最新文章
贝仕达克加速布局C端智能产品,未来如何借助AI技术提升业绩?
在数字经济的大潮中,智能产品逐渐成为了消费者关注的焦点。最近,贝仕达克在业绩说明会上明确表示将积极布局C端智能产品业务,强调以品类创新来推动业务扩容。与此同时,公司也在战略投资方面不遗余力,尤其是在跨境电商领域,基于其充气
拼多多付费推广方式有哪些?操作技巧有哪些?
当拼多多商家们在进行付费推广时,肯定也需要先去了解一下它的推广方式有哪些,同时也要明白它的操作技巧,这样才能够更好的帮助各位卖家们做好店铺的推广工作。简单来说,付费流量是指通过付费推广我们的产品,提高我们产品实时的排名位置
“广西市场监管”微信公众号传播影响力排名创新高
近日,中国工商出版社新媒体数字出版部(@市场监管半月沙龙)和清博大数据联合发布2月份全国市场监管领域微信公众号传播影响力排行榜,广西市场监管微信公众号以WCI859.96的传播指数,跃居全国省级市场监管部门微信公众号排行榜第6位,创历
计算机科学与技术系
中国人民大学计算机学科始建于1978年,具有30余年的历史,早在1981年就获得计算机应用技术硕士点,是改革开放后的第一批工学硕士点,并陆续获得计算机应用技术博士点、计算机软件与理论博士点、计算机科学与技术一级学科博士学位授予权、计
常州地铁时刻表2024最新
  一、常州地铁最新时刻表(持续更新) 常州地铁线路 最新时刻表详情 常州地铁1号线点击查看 常州地铁2号线点击查看   二、常州地铁站点的情况   1、常州地铁1号线介绍:1号线呈南北走向,北起新北区森林公园站,途经天宁区,南至武
挖呀挖黄老师开豪车惹争议,再次冲上热搜第一​
网友:挖出了一辆迈巴赫?挖呀挖黄老师开上了迈巴赫?网友吵翻了去年,凭一首儿歌爆火的挖呀挖黄老师,近日又重新回到了网友的视线中了。起因是最近黄老师更新了一条生日的转场视频,视频中的她开着一辆车缓缓停下来,将蛋糕中的生日数字换
贵阳百度爱采购自运营
百度爱采购效果如何得到最大化展现网络营销简单来讲就是一个促成买卖的手段。如今做百度爱采购的客户数不胜数,做百度爱采购竞价客户也有不少,对于花6980做一个会员的客户而言,如何实现效果最大化成为极为关键的问题。首先就是展现,对于
有哪些word转ppt免费软件?找对软件包你不失望
摸鱼一时爽,一直摸鱼……诶,等等,怎么突然觉得有点不对劲? 是不是因为那份还没整理完的Word文档,正等着变成一份精美的PPT报告呢?别担心,现在有办法啦! 今天就给大家安利一波word
超逼真美女写真生成工具评测,教你一键获取AI女友!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个数字化飞速发展的时代,越来越多的人开始沉迷于AI技术带来的奇妙体验。想象一下,您身
相关文章
推荐文章
发表评论
0评