[Android Pro] AndroidStudio IDE界面插件開發(Hello World篇)


轉載請注明出處:【huachao1001的專欄:http://blog.csdn.net/huachao1001/article/details/53856916】

工欲善其事必先利其器,自打從Eclipse轉戰AndroidStudio以來,還沒徹底擺脫Eclipse。打算從開發AndroidStudio插件開始,徹底擺脫Eclipse。AndroidStudio基於IntelliJ平台,因此,開發AndroidStudio插件其本質只是開發IntelliJ平台的插件。通常我們開發的IntelliJ平台插件主要分為如下幾類:

  1. 自定義編程語言的支持(Custom language support):包括語法高亮、文件類型識別、代碼格式化、代碼查看和自動補全等等
  2. 框架集成(Framework integration):其實就是類似基於IntelliJ開發一個IDE出來,比如AndroidStudio 將Android SDK集成進IntelliJ。其他的插件如Java EE中的Spring、Struts等framework集成到IntelliJ。使用戶在IntelliJ上面使用特定的框架更方便。
  3. 工具集成(Tool integration):對IntelliJ定制一些個性化或者是實用的工具。
  4. 附加UI(User interface add-ons):對標准的UI界面進行修改,如在編輯框里加一個背景圖片等。

1. 下載IntelliJ IDEA

在開發IntelliJ插件時,我們使用的是IntelliJ IDEA自身來開發。為什么不用AndroidStudio來開發呢?主要是AndroidStudio是面向Android開發的,在針對IntelliJ插件的各種環境都沒有,當然,你也可以自己下載插件開發環境然后在AndroidStudio上去配置。但是個人覺得過於麻煩,IntelliJ IDEA集成了插件開發環境,下載后可以直接拿來開發插件。IntelliJ IDEA下載地址如下:

https://www.jetbrains.com/idea/

2. 創建項目

選擇“File>New>Project…”,將Project選擇為IntelliJ Platform Plugin,然后再點擊Next。如下圖所示:

選擇IntelliJ Platform Plugin

填寫Project名稱及項目保存路徑,其中Project Name可以認為是插件名稱。點擊Finish,如下圖所示。

填寫Project name

完成后,創建的項目結構如下所示:

項目結構

我們比較關心的主要是src目錄和resources/META-INF/plugin.xml文件。src目錄存放的是插件對應的Java源碼,resources/META-INF/plugin.xml是配置Action的文件,關於Action后面講,現在暫時可以將resources/META-INF/plugin.xml看成是插件的配置文件。

3. 創建Action

我們在IntelliJ自定義的插件可以添加到菜單項目(如右鍵菜單中)或者是放在工具欄中。當用戶點擊時觸發一個動作事件,IntelliJ則會回調AnAction類的actionPerformed函數。因此我們只需重寫actionPerformed函數即可。 
src目錄中創建包名:com.huachao.plugin,然后,在com.huachao.plugin中創建java類,類為FirstPlugin.java

創建Java類

FirstPlugin繼承AnAction類,並重寫actionPerformed函數。

package com.huachao.plugin;

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;

/**
 * Created by HuaChao on 2016/12/24.
 */
public class FirstPlugin extends AnAction {
    @Override
    public void actionPerformed(AnActionEvent event) {
        Project project = event.getData(PlatformDataKeys.PROJECT);
        Messages.showMessageDialog(project, "Hello World!", "Information", Messages.getInformationIcon());
    }
}

  

 

4. 修改plugin.xml

上一節我通過繼承AnAction類來定義Action,現在我們需要將我們自定義的插件放入到工具類或者是菜單子項中,這就是通過plugin.xml指定。打開resources/META-INF/plugin.xml文件,IntelliJ幫我們自動生成內容如下:

<idea-plugin version="2">
    <id>com.your.company.unique.plugin.id</id>
    <name>Plugin display name here</name>
    <version>1.0</version>
    <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>

    <description><![CDATA[
        Enter short description for your plugin here.<br>
        <em>most HTML tags may be used</em>
      ]]></description>

    <change-notes><![CDATA[
        Add change notes here.<br>
        <em>most HTML tags may be used</em>
      ]]>
    </change-notes>

    <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
    <idea-version since-build="145.0"/>

    <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
         on how to target different products -->
    <!-- uncomment to enable plugin in all products
    <depends>com.intellij.modules.lang</depends>
    -->

    <extensions defaultExtensionNs="com.intellij">
      <!-- Add your extensions here -->
    </extensions>

    <actions>
      <!-- Add your actions here -->
    </actions>

</idea-plugin>

  

每個標簽的具體作用在注釋中解釋的很詳細,我們現在只關心<actions>標簽,暫時先忽略其他標簽。在<actions>標簽中添加<action>子標簽,如下所示:

<actions>

    <action id="HelloWorld.FirstPlugin" class="com.huachao.plugin.FirstPlugin" text="Hello World" description="A test menu ">
        <add-to-group group-id="HelpMenu" anchor="first"/>
    </action>

</actions>

  

 

<action>標簽屬性的簡單說明:

id:作為<action>標簽的唯一標識。一般以<項目名>.<類名>方式。 
class:即我們自定義的AnAction類 
text:顯示的文字,如我們自定義的插件放在菜單列表中,這個文字就是對應的菜單項 
description:對這個AnAction的描述

另外還有<add-to-group>標簽,這個標簽指定我們自定義的插件應該放入到哪個菜單下面。在IntelliJ IDEA菜單欄中有很多菜單如File、Edit、View、Navigate、Code、……、Help等。他們的ID一般是菜單名+Menu的方式。比如,我們想將我們自定義的插件放到Help菜單中,作為Help菜單的子選項。那么在<add-to-group>標簽中指定group-id="HelpMenu"<add-to-group>標簽的anchor屬性用於描述位置,主要有四個選項:firstlastbeforeafter。他們的含義如下:

first:放在最前面 
last:放在最后 
before:放在relative-to-action屬性指定的ID的前面 
after:放在relative-to-action屬性指定的ID的后面

relative-to-action也是<add-to-group>的屬性。

5. 運行

完成plugin.xml的修改后,點擊運行。會發現,運行時是自動再啟動新的IntelliJ IDEA。而新啟動的IntelliJ IDEA由於沒有可打開的項目會停留在如下界面:

啟動界面

為了能查看到我們的插件,可以點擊Create New Project或者是導入項目,總之,讓它正確進入到開發界面就好。

接下來,點擊help菜單,會看到如下:

查看插件

點擊·”Hello World”項,運行如下:

HelloWorld

6. 其他

6.1 自動配置plugin.xml

前面我們通過收到創建Java類,然后基礎AnAction類的方式創建Action。並且最后還需要收到配置plugin.xml。其實可以無需手動編寫,直接通過New>Action的方式創建,如下圖所示。

new Action

打開的圖形化創建界面如下:

New Action

可以看到,需要填寫的部分跟我們plugin.xml中的一一對應。

6.2 卸載插件

當我們按照上面的方面再創建一個插件時,發現上一次的插件還會出現。而且我們創建的新的插件不會出現,這是什么原因呢?這主要是,我們沒有修改插件名稱,並且沒有修改版本。這樣的話自然就沒有覆蓋原先的插件了。因此我們有2種方法,第一種就是將原來的插件卸載,第二種就是將新建的插件名稱與原先的區分開來(在plugin.xml中 <name>標簽中指定)。第二種方法比較簡單,我們看看第一種方法。

首先,點擊“File>Settings>Plugins”,如下圖。

卸載插件

找到插件名稱,這里也就是“Plugin display name here”,因為一開始我們沒有修改插件名稱,這個名詞是自動生成的。然后點擊Uninstall,最后重啟或者是關閉IntelliJ IDEA完成卸載。

6.3 打包插件並在AndroidStudio中安裝

回到主題,我們開發的插件是希望運行在AndroidStudio中。因此少不了在IntelliJ中打包和在AndroidStudio中安裝的過程。點擊“Build>Prepare All Plugin Modules For Deployment”,如下圖:

打包插件

這時在HelloWorld項目中多了一個HelloWorld.jar文件,如下圖:

jar包

這個文件即為我們導出的插件。接下來打開AndroidStudio,點擊“File>Settings>Plugins”

安裝插件

點擊“install plugin from disk…”,將HelloWorld.jar包加入即可完成安裝。

我在安裝過程中出現如下錯誤(Plugin display name here為插件名稱):

Error

從錯誤提示上看,是不兼容錯誤。回到plugin.xml,從中找到一行:

 <idea-version since-build="145.0"/>

  

這是指定IntelliJ IDEA為2016年1月發布的版本(點擊這里查看對應的版本),顯然,我的AndroidStudio還沒使用那么新的IntelliJ IDEA,因此把145修改小一點就好,比如我修改為105.0,重新打包再安裝。運行如下:

Hello Wrold

點擊后:

運行結果

參考資料:http://www.jetbrains.org/intellij/sdk/docs/index.html

 


免責聲明!

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



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