IDEA插件(Android Studio插件)开发示例代码及bug解决

代码在actionPerformed方法中,有个AnActionEvent e

插件开发就是要求我们复写上述的这个方法即可,在此方法中写上我们需要处理的相关逻辑

所有的对象都是PsiElement

获得Project

Project mProject = e.getData(PlatformDataKeys.PROJECT);

判断扩展名隐藏我们的Action

 //在Action显示之前,根据选中文件扩展名判定是否显示此Action
String extension = getFileExtension(event.getDataContext());
this.getTemplatePresentation().setEnabled(extension != null && "jar".equals(extension)); public static String getFileExtension(DataContext dataContext) {
VirtualFile file = DataKeys.VIRTUAL_FILE.getData(dataContext);
return file == null ? null : file.getExtension();
}

创建不同的PsiElement

参考链接

创建对话框

Messages.showMessageDialog("message", "title", Messages.getInformationIcon());

获得class文件

		PsiFile psiFile = e.getData(DataKeys.PSI_FILE);//获得文件
GlobalSearchScope globalSearchScope = GlobalSearchScope.fileScope(psiFile);
String fullName = psiFile.getName();
String className = fullName.split("\\.")[0];
PsiClass psiClass = PsiShortNamesCache.getInstance(psiFile.getProject()).getClassesByName(className, globalSearchScope)[0];//获得class文件

通关方法名找到对应java文件中的方法

PsiMethod method = psiClass.findMethodsByName("initView", false)[0];//通过方法名找到方法

获得方法中的代码

		PsiMethod method = psiClass.findMethodsByName("onCreate", false)[0];//通过方法名找到方法
PsiCodeBlock body = method.getBody();
PsiStatement[] statements = body.getStatements();//这里的PsiStatement数组就是方法中的一行行代码,通过遍历就可以找到对应的代码
for (PsiStatement statement : statements) {
String s = statement.getText();//获得代码内容
}

写文件

WriteCommandAction.runWriteCommandAction(psiClass.getProject(), new Runnable() {
@Override
public void run() {
//写文件操作
//delete,replace,add...
}
});

获得编辑器

Editor editor = e.getData(PlatformDataKeys.EDITOR);

参考

官方开发文档

开发后续使用出现的bug

1、Plugin 'Plugin display name here' is incompatible with this installation

写好插件后,导出插件到本地,然后使用Android Studio安装插件,提示“Plugin 'Plugin display name here' is incompatible with this installation”,意思是版本不兼容;

解决办法是打开插件工程的plugin.xml文件,修改版本号

<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<!--这句话的意思是最低支持的ide版本,查看当前的Android Studio版本号修改-->
<idea-version since-build="171.0"/>

IDEA的插件支持的版本最低为173,而我的Android Studio的内置IDEA的版本号为171,所以安装的时候出现了错误提示,也就是不兼容。

所以,我们查看Android Studio的版本号(help->about)



修改插件中的plugin.xml中的版本号即可解决问题

2.使用插件没有效果

原因:原本有个插件出问题了,把自己插件的错误提示给覆盖了,所以无法知道自己的插件出现了什么问题

刚开始使用插件的时候,发现没有效果,右下角出现了个错误提示,说我当前的某个插件有错误(不是我开发的那个插件)

然后我就把那个插件更新了,再次使用我的插件,右下角出现的错误提示终于是我的了

3、java.lang.NullPointerException

使用插件功能的时候,发现右下角出现错误,

java.lang.NullPointerException at com.intellij.ide.SystemHealthMonitor.getActionName

写好插件,导出插件到本地,然后使用Android Studio安装插件,提示“java.lang.NullPointerException at com.intellij.ide.SystemHealthMonitor.getActionName”

从参考链接可知,具体原因不明

但解决办法是,将所有的Action及其他Java文件都放到包下,而不是直接放在src目录下,也就是在src在新建个包,把所有的java文件放入即可解决问题

IDEA插件(Android Studio插件)开发示例代码及bug解决的更多相关文章

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

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

  2. Android Studio 提高开发效率的插件

    好久没有更新博客了,最近搞个listview搞得半死不活的,心累~~ 今天带来的是Android Studio插件的整理,全是我已经安装使用的,写这篇博文的目的也是因为我怕我自己给忘记怎么用(尴尬) ...

  3. [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络)

    [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络) 地址:http://www.eoeandroid.com/thre ...

  4. cordova开发插件,并在android studio中开发、调试

    之前用过cordova Lib包装H5页面,自己写插件,但做法是野路子,不符合cordova插件的开发思路,这次项目又需要包装H5页面,同时需要自定义插件.所以又折腾了一次cordova自定义插件. ...

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

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

  6. Android Studio插件整理

    摘录于习惯沉默的Blog  https://ydmmocoo.github.io/2016/06/28/Android-Studio%E6%8F%92%E4%BB%B6%E6%95%B4%E7%90% ...

  7. 更新日志 - fir.im 回归,上线 Android Studio 插件

    上周 fir.im 经历了一场前所未有的挑战,因为自查应用网站暂停,在事情发生4天内我们完成了自查,fir.im 正式回归.煎熬的 98 个小时,感谢开发者与用户对我们的信任和支持. 使用注意: 禁止 ...

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

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

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

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

随机推荐

  1. eclipse 工作区空格和回车键显示为乱码

    eclipse 工作区空格和回车键显示为乱码 解决方法:Windows => Preferences => General =>Editors =>Text Editor =& ...

  2. 在已有数据的表中添加id字段并且自增

    各位大牛,小弟在开发过程中,遇到了这样一个问题,由于新功能的增加需要使原有的一张表的结构作出调整,需要添加一个id主键字段,但是因为表里有很多数据了,所以,怎样才能添加这个字段,并且使原有的数据也能够 ...

  3. Linux 比较判断运算(if else)

    200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要是列举在shell命令中常出现的一些用来做比较的运算符,这些运算符是 ...

  4. Dubbo 源码分析 - 服务引用

    1. 简介 在上一篇文章中,我详细的分析了服务导出的原理.本篇文章我们趁热打铁,继续分析服务引用的原理.在 Dubbo 中,我们可以通过两种方式引用远程服务.第一种是使用服务直联的方式引用服务,第二种 ...

  5. Ubuntu18.04搭建nodejs环境

    首先安装sudo apt install curl 然后安装命令(当前最新版本是0.33.2,最新版本可以在https://github.com/creationix/nvm查看): curl -o- ...

  6. SVG之Path

    一.Path概述 1.控制命令 SVG提供了一些基础图形元素标签如<circle>.<rect>.<ellipse>.<line>.<polyli ...

  7. Metasploit Framework(7)客户端渗透(下)

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 应用场景: Kali机器IP:192.168.163. ...

  8. Target优化

    优化目标主要包括以下几方面: 1 优化平面文件 如果目标平面文件在某机器的共享目录下,则该机器最好是专门用于文件存储的,如果还应用于其他非文件存储任务,则会降低加载效率 如果Integration s ...

  9. 【Spark调优】Kryo序列化

    [Java序列化与反序列化] Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程.序列化使用场景:1.数据的持久化,通过序列化可以把数据永久 ...

  10. 剑指offer【06】- 旋转数组的最小数字(java)

    题目:旋转数组的最小数字 考点:查找和排序 题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...