AndroidStudio插件开发——RemoveButterKnife从构思到实现

栏目: 编程工具 · Android · 发布时间: 5年前

内容简介:这是一个用于移除代码中对ButterKnife使用的AS插件,接下来我们将从头开始讲讲AS插件开发和这个插件的开发过程 地址是相信能开始阅读这篇文章的朋友都是从事,或者有兴趣从事Android开发的,那么,我们现在最常用的开发工具无疑就是AndroidStudio了。那么,什么又是AndroidStudio插件呢?

这是一个用于移除代码中对ButterKnife使用的AS插件,接下来我们将从头开始讲讲AS插件开发和这个插件的开发过程 地址是 RemoveButterKnife AndroidStudio插件开发——RemoveButterKnife从构思到实现

什么是AndroidStudio插件

相信能开始阅读这篇文章的朋友都是从事,或者有兴趣从事Android开发的,那么,我们现在最常用的开发 工具 无疑就是AndroidStudio了。

那么,什么又是AndroidStudio插件呢?

AndroidStudio虽然是Google公司推出的一款很方便的开发环境,但是在实际的使用中,还是有一些功能是我们需要而它没有的,比如对vim输入方式的支持,这时候,就需要我们在它上面安装各种各样的插件来获得这些额外的功能了。

通常我们可以在AndroidStudio的右上角找到一个小小的放大镜,点击它,然后搜索plugin,就可以找到插件搜索的界面了,在这里,我们可以搜索到自己想要的插件,当然,这些插件得上传到插件库里才行,这个后面会讲到。 AndroidStudio插件开发——RemoveButterKnife从构思到实现 AndroidStudio插件开发——RemoveButterKnife从构思到实现

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的想法就出现在了笔者脑海中。

AndroidStudio插件开发——RemoveButterKnife从构思到实现

开发插件前的准备工作

1.要开发插件,我们需要一些工具,由于AS是基于Idea开发的,其实我们开发的插件也是一个idea插件,我们需要去下载一个idea的社区版本,大家只要搜索IntelliJ Idea就可以找到了。

2.既然是用 java 做插件开发,肯定要设置好jdk,这个网上的资料更多,大家可以自行搜索。

有了以上两点,我们的工具就准备完毕了,就可以开始写了。

插件开发101

有了想法和工具,我们就可以开始编码了,但是,插件该怎么写呢?

其实,插件就是一种项目类型,我们新建项目的时候就会发现,有plugin这个类型,我们就新建一个这个类型的项目,中途会选择idea sdk,如果没有我们就新建一个(点击new 然后选择你的idea安装目录就可以了) AndroidStudio插件开发——RemoveButterKnife从构思到实现

现在,我们有了插件项目了,我们点击src目录,这就是我们存放代码的地方,右键,新建一个Action AndroidStudio插件开发——RemoveButterKnife从构思到实现

这里会填写一些信息 AndroidStudio插件开发——RemoveButterKnife从构思到实现

完成创建之后,我们的类代码是这样的

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)等方法的使用语句

说完了功能,我们来看一个简单的对比例子,来说明到底是怎样的效果

整容前: AndroidStudio插件开发——RemoveButterKnife从构思到实现

整容后: AndroidStudio插件开发——RemoveButterKnife从构思到实现

具体实现思路

有了上面的功能分析和效果图,想必大家都有了一个比较清晰的了解了,那么我们来从代码层面分析如何实现。

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 AndroidStudio插件开发——RemoveButterKnife从构思到实现

在代码中,使用了一些idea提供的api来获取当前编辑文件的内容,并编辑,这些api都很简单,各位如果想查询的话可以到idea的支持页面上进行查找.

把你的插件发布出去

你可以把你的插件发布到仓库里面去,这样就能在IDE里面找到它了,方法很简单,登陆仓库地址然后注册账号,发布插件等待通过审核即可。仓库地址


以上所述就是小编给大家介绍的《AndroidStudio插件开发——RemoveButterKnife从构思到实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构 Python语言描述

数据结构 Python语言描述

[美] Kenneth A. Lambert 兰伯特 / 李军 / 人民邮电出版社 / 2017-12-1 / CNY 69.00

在计算机科学中,数据结构是一门进阶性课程,概念抽象,难度较大。Python语言的语法简单,交互性强。用Python来讲解数据结构等主题,比C语言等实现起来更为容易,更为清晰。 《数据结构 Python语言描述》第1章简单介绍了Python语言的基础知识和特性。第2章到第4章对抽象数据类型、数据结构、复杂度分析、数组和线性链表结构进行了详细介绍,第5章和第6章重点介绍了面向对象设计的相关知识、......一起来看看 《数据结构 Python语言描述》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试