安卓开发插件推荐

前言

​ 现在的安卓码农们,基本上都已经把锄头换成Android Studio了吧,Android Studio是基于Jetbrains 的IntelliJ IDEA开发的。 继承了Jetbrains全家桶系列的优良风格:智能,强大,界面美观。。。我刚刚从Eclipse转到IDEA的时候还很不习惯,但是为了这个颜值,还是坚持了下来,后来推出了Android Studio,立马就无缝上手了。和Eclipse一样IntelliJ IDEA也具有很强的开放性。除了Community Edition还提供了Platform SDK,让用户可以根据自己的需求开发一些插件,提高搬砖的效率。今天我就介绍一下我自己使用的几款插件。

MvpAutoCodePlus

example.gif

​ 我先抛砖引玉,厚着脸皮给自己开发的这个插件打一波广告。自从开始使用MVP架构开发以来,有一个问题让我比较苦恼,就是开发一个功能页面。比如说Login页面,分别需要新建ILoginView,ILoginPresenter,ILoginModel这样的三个接口,还要创建LoginActivity,LoginPresenter,LoginModel三个实现类,MVP接口还需要继承自父接口,还带有多个泛型,这一波搞下来,既浪费时间,又繁杂。我就在想有没有什么方式能快速生成这些代码,减少重复的无意义工作呢?答案当然是插件,在插件仓库中尝试了一些Mvp代码生成的插件后,感觉效果不是很理想。有的功能比较单一,有的是按照作者自己的编码习惯来开发的,遗憾的是不适用于我现在的开发方式。那时候就想要是可以自己按自己的习惯实现一个就好了。但是一直都没有行动起来,一是工作比较忙,二是对插件开发这方面是完全陌生的。最近项目不是很忙,上周和朋友闲聊,说到插件,就想起这个事情来。感觉是时候去尝试一下了。说干就干,先从官方文档入手,结合我下面将要介绍的一些优秀开源插件的源码。从hello world开始一步一步,历时10天。初步完成了这个符合我Mvp模版代码生成插件。很不完美,但是初步可用。比起其他轮子可能在我的车上会更稳一点点。今天不做插件开发教学,这一点点皮毛是绝对不敢班门弄斧的。我的意思是没去做未必知道不行,做过了才知道.

功能特性

  • 基于指定的父接口,父类生成MvpContract接口和对应的实现类,并添加抽象方法默认实现
  • View的实现类支持Activity和Fragment
  • 实现类的父类支持多个备选
  • 支持Java和Kotlin代码

插件首页

https://github.com/longforus/MvpAutoCodePlus

欢迎大家下载尝试,star,issue.代码很粗浅,UI部分因为采用IDEA的UI Designer实现(awt和swing本来也没用心学,都全忘了,幸好有这个利器),所以使用Java代码,其他部分使用Kotlin代码实现,如果不是很符合你的需求,也可以下载源码进行个性化定制.另外说一下Kotlin,有一些论调说Kotlin是过渡语言,而且很烂没有必要学,我其实是反对的,我承认在Google的发展规划上Kotlin确实应该是一个过渡语言,从Fuchsia,Flutter,Dart的组合来看.但是Fuchsia尚未推出,Flutter还是一个小北鼻,现在定论尚早,但是谷歌肯定是有这个意思的.就算Kotlin是谷歌的一个过渡性语言,尽管Kotlin不是尽善尽美,我还是推荐大家学习一下,主要是了解一下现代语言的一些特性,比如函数类型,传统纯Java程序员是没有这个概念的,上手也不难,花点时间一周就可以开始编码,我觉得這是很值得的.

Eventbus3 Intellij Plugin

ebip.png

EventBus是大家在开发中经常使用到的一个工具,基于观察者模式在任意位置发送事件,在任意位置订阅接收.用起来是非常的方便.但是我还是在事件传递确实不方便的时候才会使用,因为如果使用量大了以后,各种事件到处乱飞,不容易找到事件的发送处和接收处.原来我都是 选中Event类型 Find Usages 然后在结果中查找,再双击跳到对应的位置.但是有了这个插件以后,找起来就方便多了.

使用方法

安装好插件以后,重启Android Studio,在事件发送行的前面会出现一个小图标,点击就会跳转到事件的订阅处,如果有多个订阅,则会列表显示.

ebip1.png

而订阅处点击则会跳转到事件的发送处.


ebip2.png

使用起来真的是非常的方便,妈妈再也不怕我迷路了.比较遗憾的是这个插件还没有支持Kotlin,在Kotlin代码中会失效.

说到這里我要吐槽一下一些童鞋的EventBus使用姿势,多种Event使用一个Event Class,里面使用tag来区分,如果了解过EventBus的源码的话,就会发现这种姿势的弊端.

//EventBus内部维护了一个以Event的Class为key,订阅者信息列表为vlaue的Map
private final Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType; 

    //  EventBus.getDefault().register(this); 会调用到这里
    private void subscribe(Object subscriber, SubscriberMethod subscriberMethod) {
        Class<?> eventType = subscriberMethod.eventType;
        Subscription newSubscription = new Subscription(subscriber, subscriberMethod);
        CopyOnWriteArrayList<Subscription> subscriptions = subscriptionsByEventType.get(eventType);
        if (subscriptions == null) {
            subscriptions = new CopyOnWriteArrayList<>();
            subscriptionsByEventType.put(eventType, subscriptions);
        } else {
            if (subscriptions.contains(newSubscription)) {
                throw new EventBusException("Subscriber " + subscriber.getClass() + " already registered to event "
                        + eventType);
            }
        }
        //会对subscriptionsByEventType的value List进行遍历,如果只使用一个Event类型,那么这个List会很长,
        //遍历的时候会比较耗时一点,没有发挥出Map的优势,违反了作者的初衷.而且会调起其他同一Event类型的活动代码.
        int size = subscriptions.size();
        for (int i = 0; i <= size; i++) {
            if (i == size || subscriberMethod.priority > subscriptions.get(i).subscriberMethod.priority) {
                subscriptions.add(i, newSubscription);
                break;
            }
        }

        List<Class<?>> subscribedEvents = typesBySubscriber.get(subscriber);
        if (subscribedEvents == null) {
            subscribedEvents = new ArrayList<>();
            typesBySubscriber.put(subscriber, subscribedEvents);
        }
        subscribedEvents.add(eventType);
        ......
    }

而且如此使用的话,这个插件的优势也不能完全发挥,我的个人建议是一个事件类型定义一个Event Class.

插件首页

https://github.com/likfe/eventbus3-intellij-plugin

Alibaba Java Coding Guidelines

ajcg.png

去年阿里巴巴推出了Java代码规约后,又发布了这款规约扫描插件,用扫描的方式帮助我们发现代码中的潜在问题和不合规处.我在公司也推荐同事安装这个插件,虽然不可能完全按照它的规范走,但是尽量遵守,合作开发的过程中也会减少很多因规范而发生的问题.

使用方法

安装后,选中目标目录按图操作:

ajcg1.png

过一会扫描完成了:

ajcg2.png

扫描结果分为三个级别,Blocker的建议尽量修改,原因和解决方法大都会在右侧提示,部分问题还提供批量操作.Critical和Major的也应该尽量遵守.类似的插件还有FindBugs.

插件首页

https://github.com/alibaba/p3c

CodeGlance

cg.png

我把Sublime Text当默认记事本,右侧的代码预览滚动条是我的最爱,看着有逼格,跳转拖动也非常的方便,IDEA平台上有这个插件实现同样的功能.


cg1.png

装上瞬间高大上了三分有木有?一眼就能定位在当前文件中的大致位置,拖动也非常方便.

插件主页

https://github.com/Vektah/CodeGlance

Native Terminal Plugin

dtp.png

去年做组件化和自定义自动打包以来,需要在服务器上根据前台用户配置在后台自动打出根据配置生成的apk.开发的时候就要经常在命令行中输入gradle命令进行打包测试.Android Studio 集成的终端在我修改了界面字体后字体就变得很丑了,用起来就不方便,这个时候就需要一个能快速在当前工程目录打开终端的工具,后台就找到了它.

使用方法

安装重启后,在工具栏会多出一个小图标,轻轻一点就能在当前工程目录下打开系统默认终端了,so easy.

dtp1.png

还可以在Settings中修改为其他终端,相对于cmd和Powershell,我更喜欢git-bash.

插件首页

https://github.com/sburlyaev/IDEA-Native-Terminal-Plugin

插件的安装姿势

点击File> Preferences(Settings) > Plugins >

install.png

左边是JetBrains的官方插件,中间是民间插件,搜索出来后点击安装,重启Android Studio就可使用了,还有非常非常多的优秀插件等待你来发掘哦.好了今天就讲这些,都是我在使用的插件,分享给大家希望有了這些插件的帮助,让你的操作如虎添翼.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,488评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    wgl0419阅读 6,263评论 1 9
  • 文/时间细流 在一月一号的日子里,随着猫抱着新娘踏入大门的那一刻,也代表了村里的小伙伴们都结婚了。从今以后小伙伴们...
    时间细流阅读 418评论 0 3
  • 夏夜并不算寂静,躺在被蚊帐包围的床上,宋稳稳听着宿舍楼外的生物的响声。对,她就是这么无聊,不是学生会的,不是班委中...
    笛安渔阅读 188评论 0 0
  • 第四十四章 家长轮流去值班 第四十五章 换头像风波 晨新第一次值班,除了感觉新鲜,还真有点累。两堂自习课,都得...
    清晨起阅读 783评论 10 20