Android Studio Plugin 外掛開發教程(一) —— 開發你的第一個外掛

boredream發表於2017-08-25

專案原始碼

github.com/boredream/A…

系列教程

Android Studio Plugin 外掛開發教程(一) —— 開發你的第一個外掛

Android Studio Plugin 外掛開發教程(二) —— 外掛SDK中的常用物件介紹

Android Studio Plugin 外掛開發教程(三) —— 製作一個自動生成資料庫程式碼的外掛

Android Studio Plugin 外掛開發教程(四) —— 為自動生成資料庫程式碼的外掛新增UI


本教程基於官方文件編寫,原版地址如下
官方文件 www.jetbrains.org/intellij/sd…

搭建環境:
下載IntelliJ Idea客戶端並安裝
www.jetbrains.com/idea/downlo…

一、配置SDK

開啟IDE後,選擇 File | Project Structure
在配置視窗中點選 New... 新增SDK,選擇 IntelliJ Platform Plugin SDK
(如果第一次開啟IDE,選擇右下角 Configure | Project Defaults | Project Structure 開啟配置視窗)

Project Structure
Project Structure

彈出頁面中,選擇預設IntelliJ IDEA資料夾,確認
Project Structure
Project Structure

二、新建Plugin Project

在開啟的IntelliJ IDEA 中選擇 File | New | Project
左側選單選擇IntelliJ Platform Plugin專案,SDK選擇剛才新配置的,下一步
其中 Groovy、Python等啥其他附加的內容無需勾選
最後輸入專案名稱確定,完成建立

New Project
New Project

三、配置外掛專案

建立好的Plugin專案中,會預設生成一個 plugin.xml 的配置檔案
其中可以修改該外掛專案的相關配置資訊,比如外掛名稱、外掛版本號等,如下圖

Paste_Image.png
Paste_Image.png

各標籤意義具體為:

  • [ id ] 外掛id,類似於Android專案的包名,不能和其他外掛專案重複,所以推薦使用com.xxx.xxx的格式
  • [ name ] 外掛名稱,別人在官方外掛庫搜尋你的外掛時使用的名稱
  • [ version ] 外掛版本號
  • [ vendor ] 外掛釋出者資訊,可以新增郵箱連結
  • [ description ] 外掛描述資訊,在這裡可以介紹你的外掛內容,支援HTML標籤
  • [ change-notes ] 外掛版本變更日誌,支援HTML標籤
  • [ idea-version ] 對IntelliJ IDEA軟體支援本外掛版本號
    分為since-build最低版本 和 until-build最高版本,兩個屬性可以任選一或者同時使用
    官網有詳細介紹 www.jetbrains.org/intellij/sd…
    大體規則為 since-build <= 支援版本 < until-build
  • [ extensions ] 自定義擴充套件,暫時用不到
  • [ actions ] 具體的外掛動作,後面會介紹

配置中填寫的資訊,會在別人搜尋你外掛的時候展現介紹
File | Settings | Plugins 中檢視已有外掛,或者再點選Browse respositories中瀏覽外掛中心裡其他人釋出的外掛
當選中一個外掛時,右側就可以看到plugin.xml中配置的資訊了
同樣,這裡也可以進行外掛的刪除和新增安裝操作,每次操作都需要重啟軟體後才能生效

Plugins
Plugins

四、開始編寫外掛

外掛是依附於IDE的,為其提供一些小功能,比如Android Studio中,
Code | Generate | Getter and Setter 這個自動生成get和set方法的,其實就算是個外掛

Getter and Setter
Getter and Setter

當然,這些都是Android Studio中預設自帶的,我們可以根據需要開發新的外掛

專案建立好時有一個src資料夾,可以在其中File | New ...新建檔案,
主要有這麼幾種針對外掛的特殊檔案型別

  • GUI Form:表單介面
  • Dialog:對話方塊
  • XXXComponent:作用域類,其中又分為Application、Project、Module分為作用於不同範圍
  • Action:處理外掛互動行為的類

其中最主要的是Action類
之前例子中提到了,生成getter setter方法的功能是在選單欄中的Code | Generate | Getter and Setter選擇的
那麼我們自己建立的外掛選項在哪裡呢?屬於哪個選單呢?

這裡在建立Action類的時候就可以指定操作入口,Action的建立的對話方塊如下

New Action
New Action

  • Action ID: 動作ID,推薦用“外掛名.XXAction”的格式
  • Class Name:編寫Action的類檔名
  • Name:動作在選單選項中展示的名字
  • Description:動作描述
  • Groups:定義這個動作選項所屬的組,比如EditMenu就對應IDE選單欄上的Edit,CodeMenu就對應選單欄上的Code
  • Actions:是當前選中Groups下已有的Action動作,比如上圖示如果我們選擇CodeMenu就會展示Code中已有的幾個選項
  • Anchor:用來指定動作選項在Groups中的位置,Frist就是最上面、Last是最下面,也可以設在某個選項的上/下方
  • Keyboard Shortcuts:呼叫外掛Action的快捷鍵,可以不填,要注意熱鍵衝突

建立好Action後,會自動在plugin.xml配置檔案的actions標籤中新增一個對應的Action動作資訊

<actions>
    <!-- Add your actions here -->
    <action id="DatabaseGenerator.GenAction" class="DatabaseGenerateAction" text="Database Generator"
            description="auto generate db code, such as Table / CRUD sql ...">
      <add-to-group group-id="CodeMenu" anchor="last"/>
    </action>
  </actions>複製程式碼

注意

  • 這裡的資訊我們都可以再次修改,但是class name修改時要注意和類檔名匹配
  • 可以修改新增多個,即在不同選單中都可以選擇使用
  • 同一個group下多個action的id不能重複

src下建立好的Action類會預設繼承 AnAction,然後實現 actionPerformed 方法,
我們仿造官方文件中的例子,在方法中新增如下程式碼,讓點選這個Action的時候彈出一個輸入框

public class DatabaseGeneratorAction extends AnAction {
    @Override
    public void actionPerformed(AnActionEvent e) {
        Project project = e.getData(PlatformDataKeys.PROJECT);
        String txt = Messages.showInputDialog(project,
                "What is your name?",
                "Input your name",
                Messages.getQuestionIcon());
        Messages.showMessageDialog(project,
                "Hello, " + txt + "!\n I am glad to see you.", 
                "Information",
                Messages.getInformationIcon());
    }
}複製程式碼

寫好程式碼後,run執行專案~
此時會自動啟動一個新的IntelliJ IDEA專案,這個新專案裡就會包含我們剛編寫的外掛選項了

如果想除錯Android程式碼,可以先在IntelliJ中的Project Structure裡配置好Android環境,然後run外掛專案執行新的IntelliJ時建一個Android Project就好了

新執行起來的IDE中就可以看到選單欄裡的 Code 最底部就出現了一個Database Generator選項

plugin
plugin

點選就會觸發我們編寫的功能

plugin run
plugin run
plugin run
plugin run

如果你覺得你的外掛不好找,也可以自行在根目錄上新建一個和Code、Edit等同級的group,需要在配置檔案裡新建一個group,然後指定其新增到MainMenu主選單上

<actions>
   <!-- Add your actions here -->
   <group id="BoredreamPlugin.PluginSet" text="BdPlugin" description="the plugin set by boredream">
      <add-to-group group-id="MainMenu" anchor="last"  />
      <action id="DatabaseGenerator.GenAction" class="DatabaseGenerateAction" text="Database Generator" description="A test menu item" />
   </group>
</actions>複製程式碼

這個時候再run外掛就會發現它單獨建立了一個group

group
group

但是要慎用~ 畢竟每個外掛都加一個group那主選單欄就亂死了,不像藏在二級選單裡會低調的多

五、打包

(這裡我們先把整個流程介紹完,更復雜的外掛開發會下一篇介紹)
比較簡單,直接在頂部主選單欄中選擇 Build | Prepare Plugin Module XXX For Deployment即可
打包前要注意把 plugin.xml 配置檔案中的相關資訊填寫完整

group
group

當提示完成後,會在專案根目錄下生成一個 XXX.jar 的包

jar
jar

類似於安卓打包生產的apk,這個時候你就可以把它丟給別人使用了

六、釋出

不過安卓的apk釋出,通常會有一個應用市場比如Google Play,應用寶啥的
IntelliJ的外掛也有一個市場,是官方提供的,可以在平臺上釋出自己的外掛
地址plugins.jetbrains.com/

publish plugin
publish plugin

開啟外掛中心,註冊好賬號,然後選擇Upload Plugin
將你生成的外掛jar包上傳,然後選擇分類,最後確認完成上傳

此時雖然完成上傳,但是最好要完善一下Plugin Detail資訊,方便別人對你的外掛有更詳細的瞭解
還要再設定一下外掛的支援IDE範圍,否則別人可能在Android Studio外掛庫裡搜不到你的plugin!!!

IntelliJ開發的外掛是針對所有IntelliJ旗下產品的,而他們之間的外掛庫市場是非相通的
所以釋出外掛的時候一定要指定你的外掛是那些IDE可以使用的,比如要支援AndroidStudio
完善Plugin Detail資訊的時候,會有一個選項 Supported products 即支援產品範圍
預設是 勾選了“使用外掛中的配置裡指定的產品範圍”
這種使用外掛專案裡的配置方式,需要你在plugin.xml中新增標籤說明,比較麻煩

用法參考 www.jetbrains.org/intellij/sd…

不過你也可以取消勾選,直接在上傳中心這裡設定產品範圍,推薦這種方式~
IntelliJ的倆是預設的,然後我們再勾選Android Studio,最後save儲存更新

Paste_Image.png
Paste_Image.png

七、安裝使用

開啟你常用的Android Studio開始安裝使用這些外掛吧,方式有兩種

  1. 從外掛中心直接下載安裝
    IDE中選擇 File | Settings | Plugins ,彈出對話方塊中選 Browse respositories 瀏覽外掛庫
    搜尋你自己釋出的外掛,然後安裝~ 安裝完成後重啟Android Studio即可開始使用外掛了

  2. 從本地安裝外掛jar包
    這種需要用到外掛專案生成的jar包,
    選擇Browse respositories選項旁邊的 Install plugin from disk,然後找到jar檔案選中OK即可

Install Plugin
Install Plugin

注意,新發布到市場的外掛可能暫時搜不到,有延遲~

好了,介紹結束~

#開始編寫你的第一個外掛吧!!!

後續教程還會帶著大家一起開發一個具體的實用外掛,敬請期待~


最後安利下自己的外掛,自動佈局檔案的相關程式碼,懶人必備!還不用引入第三方的注入框架!
github.com/boredream/B…
歡迎star和follow

Layout Creator
Layout Creator

相關文章