在使用Android Studio开发的时候,大部分人都会使用一些插件来提高开发效率,例如我们所熟知的butternife,selector,,GsonFormat等,这些分别从不同的原理来帮助我们提高开发效率,也美化了我们的代码结构。

既然插件有这么多好处,我们就来自己实现一个简单的吧,这里为了方便讲解我们,我们就以Android tintBar作为例子来讲解。Android Studio是基于Intellij IDEA,网上查找后发现好像可以在Intellij IDEA中进行插件开发,Android Studio中new project是没有plugin选项的。

软件环境:Java 8+intellij Idea(没有的请到Intellij IDEA下载),https://www.jetbrains.com/idea/#chooseYourEdition

1,新建一个项目,File->New Project,如果你是第一次创建的时候,需要为项目制定 sdk,点击右边的new按钮就好了,它会自己为你找到sdk的索引。

项目建好后如下:

说明:其中plugin.xml为项目的配置说明文件,相当于Android项目中的AndroidManifest.xml。

<idea-plugin version="2">
  <id>com.your.company.unique.plugin.id</id>
  <name>Plugin display name here</name>
  <version>1.0</version>
  <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>

  <description><![CDATA[
      Enter short description for your plugin here.<br>
      <em>most HTML tags may be used</em>
    ]]></description>

  <change-notes><![CDATA[
      Add change notes here.<br>
      <em>most HTML tags may be used</em>
    ]]>
  </change-notes>

  <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
  <idea-version since-build="145.0"/>

  <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
       on how to target different products -->
  <!-- uncomment to enable plugin in all products
  <depends>com.intellij.modules.lang</depends>
  -->

  <extensions defaultExtensionNs="com.intellij">
    <!-- Add your extensions here -->
  </extensions>

  <actions>
    <!-- Add your actions here -->
  </actions>

</idea-plugin>

到此,我们的环境就 搭建完成了。接下来我们新建编写插件代码。

2,编写插件

在新建的包下建一个Action类。

说明:Action ID:标识ID,就像Android中xml的组件@+id 
           Class Name:生成的类名 
           Name、Description:菜单选项的名字和描述 
          Groups:定义这个菜单选项出现的位置,比如我图中设置的当点击菜单栏Edit时,第一项会出现test的选项,右边的Anchor是选择该选项出现的位置,默认First即最顶部。

系统为我们生成的Action代码:

public class PluginAction extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {
        // TODO: insert action logic here
    }
}

而在plugin.xml中也多了一段代码:

<action id="PluginID" class="PluginAction" text="PluginAction" description="PluginTest">
      <add-to-group group-id="CodeMenu" anchor="first"/>
      <keyboard-shortcut keymap="$default" first-keystroke="alt Q"/>
    </action>

这样就是实现当用户点击PluginAction菜单或者按快捷键alt +Q后的就能实现功能了。

3,创建Dialog

和Action的创建一样,Dialog也可以直接在在src或者包名下右键->new ->Dialog,新建好后是这样的。

然后我们点开图形化界面。

然后我们为当点击ok按钮的时候绑定事件。

 PluginDialog dialog = new PluginDialog();
        dialog.setVisible(true);

4,编写一个Configurable功能

当你的插件需要或允许用户自定义一些配置时,比如我的插件允许用户定义自己想要生成的代码风格,只需用户打开Settings->other settings就会看到一个配置界面。

由于版本差异,我也没找到,这个后面补上。

5,插件部署

打开项目中的plugin.xml文件,填写相关的信息,这些信息会展示在插件库中,如下图所示。

点击Bulid菜单下的Prepare Plugin按钮会在项目的根目录生成jar插件,如下图所示

6,安装插件

打开Android sutdion,File -> Settings -> Plugins -> Install plugin from disk。

7,发布插件

如果你想把你的插件提供给大家使用,还可以把插件发布到仓库,进入JetBrains官网,填写发布的相关信息,提交插件jar包,等待审核就可以了。

自己动手实现一个Android Studio插件的更多相关文章

  1. 自己编写Android Studio插件 别停留在用的程度了(转载)

    转自:自己编写Android Studio插件 别停留在用的程度了 1概述 相信大家在使用Android Studio的时候,或多或少的会使用一些插件,适当的配合插件可以帮助我们提升一定的开发效率,更 ...

  2. 推荐几款实用的Android Studio 插件

    推荐几款实用的Android Studio 插件 泡在网上的日子 发表于 2015-10-09 10:47 第 17453 次阅读 插件,Android Studio 10 编辑推荐:稀土掘金,这是一 ...

  3. 8 个最优秀的 Android Studio 插件

    Android Studio是目前Google官方设计的用于原生Android应用程序开发的IDE.基于JetBrains的IntelliJ IDEA,这是Google I/O 2013第一个宣布的作 ...

  4. [精品推荐]Android Studio插件整理

    GOOD 现在Android的开发者基本上都使用Android Studio进行开发(如果你还在使用eclipse那也行,毕竟你乐意怎么样都行).使用好Android Studio插件能大量的减少我们 ...

  5. 优秀的 Android Studio 插件

    转自:http://www.codeceo.com/article/8-android-studio-plugins.html Android Studio是目前Google官方设计的用于原生Andr ...

  6. 最完整Android Studio插件整理 (转)

    转自:http://blog.csdn.net/alpha58/article/details/62881144 现在Android的开发者基本上都使用android Studio进行开发(如果你还在 ...

  7. 非常有用的开发工具之Android Studio插件

    我们都知道Eclipse开发Android将在今年年底google不再继续提供相应的开发支持,转而开始强烈发展Android Studio,现在我就分享几款能帮助团队提升工作效率的几个Android ...

  8. Android studio 插件之 GsonFormat (自己主动生成javabean)

    概述 相信大家在做开发的过程中都写过非常多的javabean ,非常多情况下 都是一个列表数据就是一个单独的javabean.假设大家自己敲的话费时费力 还非常easy敲错. 今天给大家推荐一个插件 ...

  9. Android Studio插件推荐-GsonFormat,ButterKnifeZelezny

    原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/50557786 本篇介绍的仅仅适用android studio和 Intellij ...

随机推荐

  1. 2-XOR-SAT

    [题目描述]SAT(Satisfiability,可满足性)问题是著名的 NP 完全问题,它的内容是:判断由有限个布尔变量及其“非”用“或”操作连接起来的表达式组是否可以都为 TRUE.2-SAT 问 ...

  2. bzoj 2555: SubString

    Description 懒得写背景了,给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支 ...

  3. bzoj3038上帝造题的七分钟2

    3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1679  Solved: 713[Submit][Status][Dis ...

  4. Windows系统提供什么样的接口,Unix、Linux系统的用户接口是什么?

    Windows:图形化用户界面 Unix.Linux:独立的环境.

  5. Linux系统之TroubleShooting(故障排除)(转)

    尽管Linux系统非常强大,稳定,但是我们在使用过程当中,如果人为操作不当,仍然会影响系统,甚至可能使得系统无法开机,无法运行服务等等各种问题.那么这篇博文就总结一下一些常见的故障排除方法,但是不可能 ...

  6. mybatis下使用log4j打印sql语句和执行结果

    转载自:https://www.cnblogs.com/jeevan/p/3493972.html 本来以为很简单的问题, 结果自己搞了半天还是不行; 然后google, baidu, 搜出来各种方法 ...

  7. java.lang.NumberFormatException: For input string: " "

    原因:这个异常是说,在将字符串""转换为number的时候格式化错误.额,很简单的异常,以前我是写个方法,然后遍历对比不正确的数字或者用正则表达式之类的.现在发现一个很漂亮的方法, ...

  8. webservice服务器端获取request对象的三种方式

    有的时候在webservice里我们需要获取request对象和response对象,比如想要获得客户端的访问ip的时候就需要这么做,下面说三种方式,当然三种方式可能是针对不同方式部署webservi ...

  9. Zookeeper 快速入门(上)

    来源:holynull, blog.leanote.com/post/holynull/Zookeeper 如有好文章投稿,请点击 → 这里了解详情 Zookeeper是Hadoop分布式调度服务,用 ...

  10. 关于一些基础的Java问题的解答(四)

    16. Java面向对象的三个特征与含义 java中的面向对象的三大基本特征分别是:封装.继承.多态: 封装:把过程和数据包围起来,对数据的访问只能通过已定义的界面,主要是方便类的修改 继承:对象的一 ...