京东技术:开发属于自己的插件 | IDEA & Android Studio插件开发指南

吃苹果的上帝 2018-09-06 15:27:12 ⋅ 782 阅读

来这里找志同道合的小伙伴!

作  者  简  介

谷轩宇 ——从事安卓开发,目前效力于通天塔技术开放组


是否曾经被ide重复繁琐的操作所困扰,又或者没有心仪的UI控件而难受。那么请阅读这篇文章,掌握idea插件的开发流程,开发属于自己的插件,造福开源社区。


开发前请做好相关准备工作:

  • 安装Java SDK什么的……不做解释

  • 掌握Java语言,最好会Kotlin,因为IDEA已经有一部分用Kotlin改写了

  • 下载IDEA社区版(Community)并安装,Android Studio插件开发同样需要下载IDEA,因为Android Studio基于IDEA并且精简掉了插件开发包
    地址

    https://www.jetbrains.com/idea/download
    下载分为发行和社区版,因为社区版是开源的,所以用这个(后续需要看源码)

  • 下载或clone IDEA的社区版源码
    地址

    https://github.com/JetBrains/intellij-community

  • 打开IDEA SDK的官方文档
    地址

    http://www.jetbrains.org/intellij/sdk/docs

>>>>  入门篇

都准备好了,那就进入正题。

>>>>  一、创建新的插件项目


类型就选择IntelliJ Platform Plugin,然后一直选下一步。


>>>>  二、新建一个Action

先在src文件夹建个packge,取名随意,在packge里新建action



需要填4个内容和选择一个Groups,分别是:

  • Action ID,action的唯一标识,建议 包名.类名

  • Class Name,创建的Action类名

  • Name,action显示的文字

  • Description,描述

  • Groups,插件属于哪部分,可以定位插件的显示位置


ok之后,plugin.xml会自动加入刚刚创建的action


 
  1. <actions>  

  2.  <!-- Add your actions here -->  

  3.  <action id="xxx" class="xxx" text="xxx">  

  4.    <add-to-group group-id="xxx" anchor="last"/>  

  5.  </action>  

  6. </actions>  


anchor代表插件相对于组的位置的位置,有以下几种:

  • first,放在最前面

  • last,放在最后

  • before,放在relative-to-action属性指定的ID的前面

  • after,放在relative-to-action属性指定的ID的后面


例如,本例Group ID选择了,anchor选了last



最后插件就会在git块的这里出现



运行后插件可以出现了,但这时候点击是没有反应的,进入下一步

>>>>  三、public void actionPerformed
(AnActionEvent e)
方法

先写个简单的hello world


 
  1. @Override

  2. public void actionPerformed(AnActionEvent e) {

  3.  Projectproject=event.getProject();

  4.  Messages.showMessageDialog(project,"helloworld","mytitle",Messages.getInformationIcon());

  5. }


点击三角运行



正常会打开新的idea窗口,随便打开个项目找到刚才的插件位置,点击,不出意外会弹出一个helloworld的提示窗口了。


插件开发的过程大概如此,但是我们开发,肯定不是一个弹窗就解决需求的。由于开发需求的多样性,没法在一篇文章介绍所有api,所以在下面的部分,我将介绍IDEA开发的一些统一标准要求。

>>>>  进阶篇

IDEA官方开发者封装了大量易用的api,由于官方文档介绍很笼统,看过了仅有的文档,只能根据要开发的插件功能,去定位官方的源码相似功能部分,然后模仿着写。下面给出的一些经验,开发过程可能有的用不到,但是一定会对你大致理解整套系统有所帮助

>>>>  一、在event线程操作UI

这点很多平台都有这种规定,后台线程是不能操作UI的,Android中使用的是消息Handler机制,在IDEA中也有类似的消息机制。在event线程中不要进行耗时操作(例如网络,IO),耗时操作要放在后台线程。在后台线程获取到数据后,可以使用下面方式来更新UI。(还有其他方法,这里仅介绍一种)


 
  1. ApplicationManager.getApplication().invokeLater(new Runnable() {

  2.    @Override

  3.    public void run() {

  4.        // update UI

  5.    }

  6. });

>>>>  二、如何开启一个后台任务?

不仅限于此,这里介绍一种方法,可以使用ProgressManager来开启


 
  1. ProgressManager.getInstance().XXXX(new Runnable());


补全后可以看到很多方法,选择合适的调用即可。

>>>>  三、如何开启进度条任务(类似于构建,ide底下会出进度条)

创建自定义类MyTask继承于Task.Backgroundable,并重写run方法,run方法在后台线程执行,调用时可以如下:


 
  1. new BackgroundTaskQueue(project, "my-task-name").run(newMyTask());

>>>>  四、什么是虚拟文件系统VFS(VirtualFileSystem)?

官方文档地址:

http://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/files.html

看代码时可能会经常看见VirtualFile,初次见肯定会疑惑,简单介绍一下(摘自官档)


虚拟文件系统(VFS)是IntelliJ Platform的一个组件,它封装了用于处理文件的大部分活动。它有以下主要用途:

  • 提供用于处理文件的通用API,无论其实际位置如何(在磁盘上,存档中,在HTTP服务器上,或者git上等)

  • 在检测到修改时跟踪文件修改并提供文件内容的新旧版本。

  • 提供将附加持久数据与VFS中的文件相关联的可能性。


看一下VirtualFileSystem实例的方法,大概有以下几项:刷新、获取VirtualFile、添加监听等作用。


比较常用的是VirtualFile,看一下实例方法



可以看到我们常用的文件操作基本都在这里。而与之相对应的有个类叫 Document ,这两个是不同的概念,Document 只能用于文本的文档,而且对应的是实例文件。VirtualFile是虚拟的文件,既可用于文本也可用于二进制文件。

>>>>  五、什么是程序结构接口PSI (Program Structure Interface)?

程序结构接口,通常称为PSI,是IntelliJ平台中的一个层,负责解析文件并创建支持平台许多功能的语法和语义代码模型。(摘自官档)


也就是说对特定语言语法树,符号解析等可以使用PSI,如果有此需要,可以参考

https://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/psi.html

>>>>  六、UI相关(用户界面组件)

IntelliJ平台包含大量自定义Swing组件。在插件中使用这些组件将确保您的插件与IDE的其余部分的UI一致并且与其一致,并且与使用默认Swing组件相比,通常可以减少代码大小。


列举一些:

  • Tool Windows

  • 对话框 Dialogs

  • 弹出窗口 Popups

  • 通知 Notifications

  • 文件和类选择器 File and Class Choosers

  • 编辑器组件 Editor Components

  • 列表和树控件 List and Tree Controls

  • 以及其他很多很多


可以参考

http://www.jetbrains.org/intellij/sdk/docs/user_interface_components/user_interface_components.html

>>>>  总结

其中VFS和PSI是众多模块中比较核心的部分,开发过程中也建议参考其他开源插件的源码,多看多想,相信读者在开发过程中会有不小的收获。

>>>>  参考文献

  • AndroidStudio插件开发(HelloWorld篇)by huachao1001

    https://blog.csdn.net/huachao1001/article/details/53856916

  • IDEA官方文档

    http://www.jetbrains.org/intellij/sdk/docs

  • IDEA社区版Github

    https://github.com/JetBrains/intellij-community


---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦



全部评论: 0

    我有话说:

    开源资讯」陌陌安全团队开源Java静态代码审计

    陌陌安全本次开源Java静态代码安全审计,侧重于在编码过程中发现项目潜在安全风险,并提供一键修复能力。 此作为Java项目静态代码安全审计工具,侧重于在编码过程中发现项目潜在安全风险

    IDEA 2020.3 更新 Kotlin

    IntelliJ IDEA 2020.3 稳定版已在 12 月初发布。现在 IDEA 2020.3 更新了其中 Kotlin 并更改 Kotlin 发布周期。Kotlin

    开源资讯」ShopXO 开源商城,批量导入淘宝、天猫商品发布

    最近在OSCHINA上看到有博主开源了全套商城源码

    京东到家订单中心系统mysql到es转化之路

    原文:https://www.toutiao.com/i6796507988602389006 京东到家订单中心系统业务中,无论是外部商家订单生产,或是内部上下游系统依赖,订单查询调用量都非常

    WebMIS 1.0.0 beta.3 发布,全栈开发基础框架

    ,为企业提供一套完整技术解决方案,满足快速开发...

    京东技术京东风格移动端Vue组库NutUI2.0来啦

    移动端 Vue 组库 NutUI 自发布以来受到了广泛关注。据不完全统计,目前至少有30多个京东 web 项目正在使用 NutUI 。

    极速后台框架 FastAdmin v1.2.0.20210125 新增 API 文档生成

    FastAdmin 更新日志 v1.2.0.20210125_beta 新增自定义API文档生成 新增登录和鉴权状态显示 新增自定义测试提交参数 优化安装脚本 优化cookie加密 修复系统

    Fizz Gateway 1.1.1 发布,基于 Java异步框架WebFlux开发微服务网关

    系统可以自行扩展,并且提供友好图形化配置界...

    】TinyMCE 选择一个图片用作封面

      TinyMCE版本 4.7.6 思路:在imagetools 基础上增加一个按钮,点击之后返回当前图片节点 注意!!黄色背景内容为增加内容 》 准备阶段 去官网下载

    sync同步vscode配置完全指北

    工欲善其事必先利其器,当我们辛辛苦苦配置好一个心意编辑器,当回到🏠、换台电脑,结果还得从头再来,作为程序

    微型Java开发框架Solon 1.1发布,QPS达10万+

    简介 Solon 是一个微型Java开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,2700多次commit;内核保持0.1m身材,超高Web跑分,良好使用体验

    精品推荐:JDFlutter | 京东技术中台新一代跨平台开发框架

    DFlutter 是商城共享技术部-多端融合技术部推出新一代跨平台开发框架,可快速集成至现有 Android/iOS 工程,开发者可借助 JDFlutter 平台快速完成 Flutter 业务开发

    开源资讯」JPress v3.2.1 发布,新增模板预览功能

    JPress 是一个使用 Java 开发类似 WordPress 产品,具有完善模板和功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合功能。

    CKEditor 5 v26.0.0 发布:具有可扩展构建、内联部件样式和注释指南

    CKEditor 5 v26.0.0 已经发布,本次更新包括支持创建一个定制编辑器构建、Mac上按键管理、设计内联部件、编辑器占位符和一组关于使用协作特性注释指南等内容。 通过 DLL

    TimescaleDB 1.0 正式发布!基于 PG 时序数据库

    TimescaleDB 是基于 PostgreSQL 数据库开发一款时序数据库,以形式打包提供,随着 PostgreSQL 版本升级而升级,不会因为另立分支带来麻烦。

    Go语言集成开发环境-GoLand 2020.3稳定版发布

    简介 GoLand 是 JetBrains 公司推出 Go 语言集成开发环境。GoLand 同样基于 IntelliJ 平台开发,支持 JetBrains 体系。 GoLand 2020.3

    open-monitor 1.7.0 版本发布,基于 Prometheus 分布式监控平台

    open-monitor是一套基于Prometheus分布式监控平台,适用于wecube,WeCube通过监控来对资源以及应用监控及告警。此底层引用Prometheus,上层封装了对

    Android 12 最后一个开发者预览版发布

    谷歌已经发布了 Android 12 第三个开发者预览版,这也是最后一个以开发者为中心构建版本。第一个 Android 12 测试版将在 5 月到来,第二个和第三个测试版构建则将在 6 月至 7

    CUBA Studio 15 发布,企业级快速开发平台

    很高兴通知大家我们发布了新版 CUBA Studio - 15.0 发行说明请访问 CUBA Studio 用户向导 可以在 这里 下载 CUBA