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

ReomveButterKnife插件

这是一个用于移除代码中对ButterKnife使用的AS插件,接下来咱们将从头开始讲讲AS插件开发和这个插件的开发过程 地址是RemoveButterKnife QQ截图20160624161742java

什么是AndroidStudio插件

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

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

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

一般咱们能够在AndroidStudio的右上角找到一个小小的放大镜,点击它,而后搜索plugin,就能够找到插件搜索的界面了,在这里,咱们能够搜索到本身想要的插件,固然,这些插件得上传到插件库里才行,这个后面会讲到。 step1 step2正则表达式

AndroidStudio插件应该怎么用

如今,咱们装好了插件,该怎么用呢?这就要视插件的功能而定了,好比,用于支持vim输入的插件————IdeaVim,装上咱们就能够开始使用,咱们就能在AS里面使用Vim的快捷键和操做了,很是的厉害呢。vim

RemoveButterKnife插件的设计目的

相信你们都据说过大名鼎鼎的ButterKnife,一款用于经过注解绑定View的第三方库,咱们一旦用了它,就能够不用写长长的findViewById语句了,用几个注解就能够绑定。api

再配合上AS插件——android butterknife zelezny一块儿使用,直接从布局自动生成相应的butterknife注解到你的代码里,真是太愉快了。ide

可是,事情总不是像咱们想象的那么顺利,当咱们愉快的使用着butterknife的时候,每每会遇到一些尴尬的状况,好比工具

1.ButterKnife这个第三方库每次更新以后,绑定view的注解都会改变,从bind,到inject,再到bindview,搞得不少人都不敢升级,一旦升级,就会有巨量的代码须要手动修改,很是痛苦布局

2.当咱们有一些很是棒的代码须要拿到其余项目使用,可是咱们发现,那个项目对第三方库的使用是有限制的,咱们不能使用butterknife,这时候,咱们又得从注解改回findviewbyid

针对上面的两种状况,若是view比较少还好说,若是有几十个view,那么咱们一个个的手动删除注解,写findviewbyid语句,简直是一场噩梦(别问我为何知道这是噩梦)

因此,这种有规律又重复简单的工做为何不能用一个插件来实现呢?因而RemoveButterKnife的想法就出如今了笔者脑海中。

1

开发插件前的准备工做

1.要开发插件,咱们须要一些工具,因为AS是基于Idea开发的,其实咱们开发的插件也是一个idea插件,咱们须要去下载一个idea的社区版本,你们只要搜索IntelliJ Idea就能够找到了。

2.既然是用java作插件开发,确定要设置好jdk,这个网上的资料更多,你们能够自行搜索。

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

插件开发101

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

其实,插件就是一种项目类型,咱们新建项目的时候就会发现,有plugin这个类型,咱们就新建一个这个类型的项目,中途会选择idea sdk,若是没有咱们就新建一个(点击new 而后选择你的idea安装目录就能够了) plugin

如今,咱们有了插件项目了,咱们点击src目录,这就是咱们存放代码的地方,右键,新建一个Action QQ截图20160624145412

这里会填写一些信息 QQ截图20160624145701

完成建立以后,咱们的类代码是这样的

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

说完了功能,咱们来看一个简单的对比例子,来讲明究竟是怎样的效果

整容前: QQ截图20160624154939

整容后: QQ截图20160624155124

具体实现思路

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

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 QQ截图20160624161742

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

把你的插件发布出去

你能够把你的插件发布到仓库里面去,这样就能在IDE里面找到它了,方法很简单,登录仓库地址而后注册帐号,发布插件等待经过审核便可。 仓库地址

相关文章
相关标签/搜索