IDEA插件(Android Studio插件)开发示例代码及bug解决
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解决的更多相关文章
- 非常有用的开发工具之Android Studio插件
我们都知道Eclipse开发Android将在今年年底google不再继续提供相应的开发支持,转而开始强烈发展Android Studio,现在我就分享几款能帮助团队提升工作效率的几个Android ...
- Android Studio 提高开发效率的插件
好久没有更新博客了,最近搞个listview搞得半死不活的,心累~~ 今天带来的是Android Studio插件的整理,全是我已经安装使用的,写这篇博文的目的也是因为我怕我自己给忘记怎么用(尴尬) ...
- [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络)
[Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络) 地址:http://www.eoeandroid.com/thre ...
- cordova开发插件,并在android studio中开发、调试
之前用过cordova Lib包装H5页面,自己写插件,但做法是野路子,不符合cordova插件的开发思路,这次项目又需要包装H5页面,同时需要自定义插件.所以又折腾了一次cordova自定义插件. ...
- 推荐几款实用的Android Studio 插件
推荐几款实用的Android Studio 插件 泡在网上的日子 发表于 2015-10-09 10:47 第 17453 次阅读 插件,Android Studio 10 编辑推荐:稀土掘金,这是一 ...
- Android Studio插件整理
摘录于习惯沉默的Blog https://ydmmocoo.github.io/2016/06/28/Android-Studio%E6%8F%92%E4%BB%B6%E6%95%B4%E7%90% ...
- 更新日志 - fir.im 回归,上线 Android Studio 插件
上周 fir.im 经历了一场前所未有的挑战,因为自查应用网站暂停,在事情发生4天内我们完成了自查,fir.im 正式回归.煎熬的 98 个小时,感谢开发者与用户对我们的信任和支持. 使用注意: 禁止 ...
- 8 个最优秀的 Android Studio 插件
Android Studio是目前Google官方设计的用于原生Android应用程序开发的IDE.基于JetBrains的IntelliJ IDEA,这是Google I/O 2013第一个宣布的作 ...
- [精品推荐]Android Studio插件整理
GOOD 现在Android的开发者基本上都使用Android Studio进行开发(如果你还在使用eclipse那也行,毕竟你乐意怎么样都行).使用好Android Studio插件能大量的减少我们 ...
随机推荐
- java基础知识-笔记整理
1.查看已安装jdk文件路径 CMD输入java -verbose. 2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...
- Android Studio升级3.2.1后的合并XML出错的解决方案
升级到3.2.1版本之后,遇到了合并XML出错的问题.错误内容大概如下: 当大家看到这个问题的时候,可能会有一行是可以点击的文件目录,点击到报错的地方. 如果没有可以点击的地方,也可以根据目录和 “行 ...
- 微信小程序实现标签页滑块效果
微信小程序实现标签页滑块效果 小程序完整代码: wxml: <view class="swiper-tab"> <view class="swiper- ...
- NumPy 学习笔记(一)
NumPy: 1.NumPy 是一个功能强大的第三方库(需要自己安装),主要用于对多维数组执行计算: 它提供了大量的库函数和操作,可以帮助程序员更轻松地进行数值计算 2.可以和另外两个第三方库 S ...
- Ubuntu 16.04下GDB调试
在linux中还有一个更受大家欢迎的调试工具:GDB.GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具.可以用来调试C,C++程序. GDB功 ...
- ModelState 错误信息输出
在MVC的项目中,我们通常情况下,为了方便(偷懒),会直接使用 !ModelState.IsValid 来判断实体的验证是否正确,但是这样对于用户的体验是不好的,当填写的内容比较多的时候,用户需要自己 ...
- 实现quartz定时器及quartz定时器原理介绍
今天研究定时器,在网上看了一篇不错的文章,推荐给大家! 实现quartz定时器及quartz定时器原理介绍
- vue 移动端屏幕适配 使用rem
要想移动端适配 并使用 rem 您需要先看这篇文章,配置好less ➡️ 在vue 中使用 less,就可以使用rem了 如果项目已经开发的差不多了,没有用到rem 又要使用rem,您用这招. po ...
- logstash解耦之redis消息队列
logstash解耦之redis消息队列 架构图如下: 说明:通过input收集日志消息放入消息队列服务中(redis,MSMQ.Resque.ActiveMQ,RabbitMQ),再通过output ...
- restTemplate.postForObject上传文件中文乱码(???.xls)
一.问题描述 项目中, 使用restTemplate上传文件时, 文件名中文乱码, 一串问号, 源文件名为: 测试中文乱码哦哦哦.zip, 通过restTemplate.postForObject调用 ...