热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发Idea的插件

写在前面在使用AndroidStudio的时候,为了提高效率,我们会使用一些插件来拓展IDE的使用。那么有时候因为一些功能插件没有提供,或是作者过久没维护导致失效,我们也可以尝试自己来开发

写在前面

在使用Android Studio的时候,为了提高效率,我们会使用一些插件来拓展IDE的使用。那么有时候因为一些功能插件没有提供,或是作者过久没维护导致失效,我们也可以尝试自己来开发一个插件,诸如Android Studio,PhpStorm之类的都是属于JetBrains,那么也就是说我们开发的一个插件是有可能在多个不同的编辑器里是通用的。

开发plugin用到的工具是Intelij IDEA

步骤
Created with Raphaël 2.1.2 开始 创建plugin工程 创建Action 编写逻辑代码 注册plugin.xml 打包发布

1. 新建InteliJ Platform Plugin工程

这里写图片描述

新建完成后,我们要关注的就是plugin.xml和用来写代码的src文件夹两个地方了。
这里写图片描述

2.介绍

2.1 plugin.xml

这个文件是一个注册文件,如果开发过Android的话,就类似于Android里的AndroidManifest.xml文件,包含一些注册信息。在Android里开发一个界面我们说新建个Activity,那在plugin这里是被称为Action,用来开发点击我们的插件后要执行的操作。

我们Activity写后会在AndroidManifest.xml里注册,那么这里的Action我们就要在plugin.xml里注册。所以你只要看下plugin.xml里的内容就很容易明白了。

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

<description> Enter short description for your plugin here.

most HTML tags may be used
]]>
description>

<change-notes> Add change notes here.

most HTML tags may be used
]]>

change-notes>


<idea-version since-build="173.0"/>




<extensions defaultExtensionNs="com.intellij">

extensions>

<actions>

actions>

idea-plugin>

2. Action

前面说了,开发一个plugin主要的就是Action,这是我们的入口,在Action里写入我们的代码,实现我们想要的功能。

2.1 新建Action

这里写图片描述

在这里填写一些基础信息:
Name表示到时在菜单里显示的标题;
Description就写一些介绍的话;
Groups里表示你要让这个插件在菜单里出现的位置,在这里我们试下选择EditMenu,然后右边是first,也就是说这个插件将来会出现在Edit菜单下的第一个位置;
Keyboard Shortcuts表示可以定义一些快捷键;
这里写图片描述

新建完成后:

public class ClickAction extends AnAction {

@Override
public void actionPerformed(AnActionEvent e) {
//在这里写下你的逻辑代码
Messages.showErrorDialog("Error message" , "Error Title");
}
}

我们看下plugin.xml里的变化:

<actions>

<action id="Test.Test" class="ClickAction" text="MyIdeaPlugin" description="This is my first plugin test">
<add-to-group group-id="EditMenu" anchor="first"/>
action>
actions>

2.2 运行Action

我们直接run,它将会打开一个新的装好我们这个插件的IDE窗口,然后我们就可以在Edit菜单看到我们定义的Action的入口了。点击会弹出我们刚才写的窗口。
这里写图片描述

这里写图片描述

注:我这里有个问题,我在开发过程中,点击这个action没有反应,反倒是使用了初始化时定义的快捷键才有用,我还不知道是什么问题。而且菜单里的其它选项也是,需要使用快捷键,而点击是无效的。但看其他人的文章没发现有这样的情况。

3. 发布插件

我们开发完后就可以将插件进行打包,生成一个jar包,然后我们可以安装到我们的Android Studio之类的IDE上了。
在Build下选择Prepare Plugin Module ‘名字’ For Deployment , IDE就会自动在项目目录下生成jar包了。
这里写图片描述

大致的流程就是这样。


其它

必备的知识

  1. 因为这里我们会涉及到对一些界面的操作,那就要学习下swing,用Jpanel,JButton之类的做一些简单的界面实现,这跟开发Android的流程是类似的;

遇到的问题

1. 兼容性

在写完一个插件并生成jar包后,我在Android Studio里安装的时候出现了不兼容的错误,导致无法安装,这里主要是版本的问题。虽然这些IDE都是JetBrains的,但它们之间存在着版本差异。
我们要修改的地方是plugin.xml里的

version since-build="173.0"/>

那么要如何修改版本号到匹配我们想要的IDE呢?要在这里查看即可:
http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html
这里写图片描述

所以我这里目前Android Studio的最新版本是1.3,那么我们就要改成141:

<idea-version since-build="141"/>

参考

AndroidStudio 插件开发(进阶篇之 Action 机制)

Quick Start Guide


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
author-avatar
Apollo宫保鸡丁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有