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文件放入即可解決問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM