内容简介:这是一个用于移除代码中对ButterKnife使用的AS插件,接下来我们将从头开始讲讲AS插件开发和这个插件的开发过程 地址是相信能开始阅读这篇文章的朋友都是从事,或者有兴趣从事Android开发的,那么,我们现在最常用的开发工具无疑就是AndroidStudio了。那么,什么又是AndroidStudio插件呢?
这是一个用于移除代码中对ButterKnife使用的AS插件,接下来我们将从头开始讲讲AS插件开发和这个插件的开发过程 地址是 RemoveButterKnife
什么是AndroidStudio插件
相信能开始阅读这篇文章的朋友都是从事,或者有兴趣从事Android开发的,那么,我们现在最常用的开发 工具 无疑就是AndroidStudio了。
那么,什么又是AndroidStudio插件呢?
AndroidStudio虽然是Google公司推出的一款很方便的开发环境,但是在实际的使用中,还是有一些功能是我们需要而它没有的,比如对vim输入方式的支持,这时候,就需要我们在它上面安装各种各样的插件来获得这些额外的功能了。
通常我们可以在AndroidStudio的右上角找到一个小小的放大镜,点击它,然后搜索plugin,就可以找到插件搜索的界面了,在这里,我们可以搜索到自己想要的插件,当然,这些插件得上传到插件库里才行,这个后面会讲到。
AndroidStudio插件应该怎么用
现在,我们装好了插件,该怎么用呢?这就要视插件的功能而定了,比如,用于支持vim输入的插件————IdeaVim,装上我们就可以开始使用,我们就能在AS里面使用Vim的快捷键和操作了,非常的厉害呢。
RemoveButterKnife插件的设计目的
相信大家都听说过大名鼎鼎的ButterKnife,一款用于通过注解绑定View的第三方库,我们一旦用了它,就可以不用写长长的findViewById语句了,用几个注解就可以绑定。
再配合上AS插件——android butterknife zelezny一起使用,直接从布局自动生成相应的butterknife注解到你的代码里,真是太愉快了。
但是,事情总不是像我们想象的那么顺利,当我们愉快的使用着butterknife的时候,往往会遇到一些尴尬的情况,比如
1.ButterKnife这个第三方库每次更新之后,绑定view的注解都会改变,从bind,到inject,再到bindview,搞得很多人都不敢升级,一旦升级,就会有巨量的代码需要手动修改,非常痛苦
2.当我们有一些非常棒的代码需要拿到其他项目使用,但是我们发现,那个项目对第三方库的使用是有限制的,我们不能使用butterknife,这时候,我们又得从注解改回findviewbyid
针对上面的两种情况,如果view比较少还好说,如果有几十个view,那么我们一个个的手动删除注解,写findviewbyid语句,简直是一场噩梦(别问我为什么知道这是噩梦)
所以,这种有规律又重复简单的工作为什么不能用一个插件来实现呢?于是RemoveButterKnife的想法就出现在了笔者脑海中。
开发插件前的准备工作
1.要开发插件,我们需要一些工具,由于AS是基于Idea开发的,其实我们开发的插件也是一个idea插件,我们需要去下载一个idea的社区版本,大家只要搜索IntelliJ Idea就可以找到了。
2.既然是用 java 做插件开发,肯定要设置好jdk,这个网上的资料更多,大家可以自行搜索。
有了以上两点,我们的工具就准备完毕了,就可以开始写了。
插件开发101
有了想法和工具,我们就可以开始编码了,但是,插件该怎么写呢?
其实,插件就是一种项目类型,我们新建项目的时候就会发现,有plugin这个类型,我们就新建一个这个类型的项目,中途会选择idea sdk,如果没有我们就新建一个(点击new 然后选择你的idea安装目录就可以了)
现在,我们有了插件项目了,我们点击src目录,这就是我们存放代码的地方,右键,新建一个Action
这里会填写一些信息
完成创建之后,我们的类代码是这样的
import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; public class test extends AnAction { @Override public void actionPerformed(AnActionEvent e) { // TODO: insert action logic here } }
每次我们在菜单或者快捷键激活我们的插件的时候,actionPerformed方法就会被调用,里面的代码就会执行。
到此为止,我们的第一个插件就完成了,是不是很简单呢。
RemoveButterKnife的主要功能分析
知道了怎么写插件,接下来我们就要开始想一想,我们的插件应该有哪些功能了
1.适用于Activity/Fragment,使用了ButterKnife的情况
2.删除对butterknife的引用
3.删除butterknife的注解(@bind(R.id.xyz))
4.生成findviewbyid语句
5.删除ButterKnife.inject(this)等方法的使用语句
说完了功能,我们来看一个简单的对比例子,来说明到底是怎样的效果
整容前:
整容后:
具体实现思路
有了上面的功能分析和效果图,想必大家都有了一个比较清晰的了解了,那么我们来从代码层面分析如何实现。
1.由于import语句都是固定的,我们可以直接匹配,记录行号
2.因为注解语句有很多种,我们可能需要正则表达式去匹配,并提取id和view的名字信息,并生成一个map,用来对应id和名字以及view的类型,当然,也记录下注解的行号
3.对于butterknife.method的方法调用,使用字符串匹配,也记录下来行号
4.删除记录下行号的行
5.根据记录下的id和name的map,找到oncreate/oncreateview方法,在设置了layout的代码下面生成findviewbyid语句
具体代码分析
为了实现上述的功能,我们用了三个
1.MainAction ———— 主要用于扫描匹配,记录行号,生成id和name的map
2.DeleteAction ———— 主要用于删除记录下行号的代码
3.FindViewByIdWriter ———— 用于生成findviewbyid代码
具体的代码可以在github上面找到 地址是 RemoveButterKnife
在代码中,使用了一些idea提供的api来获取当前编辑文件的内容,并编辑,这些api都很简单,各位如果想查询的话可以到idea的支持页面上进行查找.
把你的插件发布出去
你可以把你的插件发布到仓库里面去,这样就能在IDE里面找到它了,方法很简单,登陆仓库地址然后注册账号,发布插件等待通过审核即可。仓库地址
以上所述就是小编给大家介绍的《AndroidStudio插件开发——RemoveButterKnife从构思到实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 扒一扒CARBANAK的源代码,看它们是如何巧妙构思并运行的?(三)
- 73岁Hinton老爷子构思下一代神经网络:属于无监督对比学习
- IDEA 插件:多线程文件下载插件开发
- 从头开发一个Flutter插件(二)高德地图定位插件
- Gradle插件开发系列之gradle插件调试方法
- Gradle插件开发系列之开发第一个gradle插件
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Compilers
Alfred V. Aho、Monica S. Lam、Ravi Sethi、Jeffrey D. Ullman / Addison Wesley / 2006-9-10 / USD 186.80
This book provides the foundation for understanding the theory and pracitce of compilers. Revised and updated, it reflects the current state of compilation. Every chapter has been completely revised ......一起来看看 《Compilers》 这本书的介绍吧!