博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IDEA插件(Android Studio插件)开发示例代码及bug解决
阅读量:4619 次
发布时间:2019-06-09

本文共 2832 字,大约阅读时间需要 9 分钟。

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文件,修改版本号

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

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

1210268-20190304225153246-666183184.png
修改插件中的plugin.xml中的版本号即可解决问题
1210268-20190304224845362-9982461.png

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文件放入即可解决问题

转载于:https://www.cnblogs.com/kexing/p/10473936.html

你可能感兴趣的文章
j2ee爬坑行之二 servlet
查看>>
JAVA基础入门(JDK、eclipse下载安装)
查看>>
最基础的applet运用--在applet上画线
查看>>
并不对劲的hdu4777
查看>>
linux使用rz、sz快速上传、下载文件
查看>>
判断数字的正则表达式
查看>>
DOC常用命令(转)
查看>>
php写一个判断是否有cookie的脚本
查看>>
Mac配置Fiddler抓包工具
查看>>
转:Java并发集合
查看>>
Word截图PNG,并压缩图片大小
查看>>
Python项目对接CAS方案
查看>>
mysql产生随机数
查看>>
编程风格
查看>>
熟悉常用的Linux命令
查看>>
易之 - 我是个大师(2014年3月6日)
查看>>
Delphi中窗体的事件
查看>>
file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did
查看>>
linux vi编辑器
查看>>
js树形结构-----(BST)二叉树增删查
查看>>