一、下載開(kāi)發(fā)工具
android studio插件開(kāi)發(fā)使用的是IntelliJ IDEA,其實(shí)android studio就是基于IntelliJ IDEA的社區(qū)版本發(fā)展而來(lái)的。在官網(wǎng)進(jìn)行下載IntelliJ IDEA。
二、配置IntelliJ IDEA
下載安裝啟動(dòng)IntelliJ IDEA后,點(diǎn)擊創(chuàng)建新項(xiàng)目

因?yàn)槲覀円_(kāi)發(fā)的是android studio插件,所以這里選IntelliJ Platform Plugin。右側(cè)需配置項(xiàng)目SDK,如果不配置直接點(diǎn)擊next會(huì)被提示沒(méi)有sdk。
這里有個(gè)小坑的點(diǎn),就是當(dāng)點(diǎn)擊Project SDK右側(cè)輸入框的三角選擇按鈕時(shí),會(huì)彈出本地文件選擇框,但我們并不知道這個(gè)sdk在本地的什么地方。其實(shí),就是文件選擇框正在選擇的文件目錄,我們直接點(diǎn)確定就好了。
當(dāng)然IntelliJ IDEA支持使用其他語(yǔ)言進(jìn)行開(kāi)發(fā),比如下圖左側(cè)Kotlin,甚至我們可以去IntelliJ IDEA的preference->plugin的Marketplace 下載其他插件比如python,進(jìn)行python開(kāi)發(fā),但是這里如果不選IntelliJ Platform Plugin,那么就不是我們現(xiàn)在介紹的插件開(kāi)發(fā)了。

三、plugin.xml介紹
回歸正題,選擇IntelliJ Platform Plugin后點(diǎn)擊Next,給項(xiàng)目取名后點(diǎn)擊finish,這時(shí)展示的頁(yè)面是該項(xiàng)目的plugin.xml。

這個(gè)是項(xiàng)目的配置文件,有很多配置項(xiàng),讓我們來(lái)逐一解釋下:
<id> :該項(xiàng)目的唯一id,當(dāng)該項(xiàng)目被上傳到應(yīng)用商店后,這個(gè)id將用來(lái)區(qū)分不同插件,如果嘗試上傳相同id的插件,應(yīng)用商店就會(huì)提示錯(cuò)誤。
<name> :插件名字,如果導(dǎo)出的插件安裝到android studio上,會(huì)是已安裝插件的插件名。
<version> :插件版本號(hào),升級(jí)使用
<vendor>:作者信息,其中作者名字會(huì)顯示在已安裝插件信息頁(yè)面
<description> :對(duì)插件的描述,較為重要,用戶對(duì)插件的初印象就是該描述的內(nèi)容,描述是否清晰可能直接影響到用戶對(duì)插件功能的理解,直接影響到用戶是否安裝茶幾。IntelliJ建議至少超過(guò)40字符,過(guò)少會(huì)有文字下方紅線提示
<change-notes>:這里用來(lái)寫每個(gè)版本都做了哪些改動(dòng),同樣會(huì)展示在插件信息頁(yè)
<idea-version> :支持的idea版本,寫一個(gè)較老的版本即可(比如173,代表17年3月的版本),如果這個(gè)版本過(guò)新,會(huì)導(dǎo)致老版本的IntelliJ IDEA無(wú)法使用該插件
<actions> :這里存放一個(gè)或多個(gè)<action>節(jié)點(diǎn),每個(gè)action節(jié)點(diǎn)是用戶使用插件的入口,比如,可以在這里指定一個(gè)新建的AnAction類(該類作用是運(yùn)行該插件功能的入口,比如彈出界面或執(zhí)行后臺(tái)邏輯),并指定用戶可見(jiàn)的入口位置及入口名字,方便用戶觸發(fā)該插件,甚至可以配置鍵盤快捷鍵,用戶可通過(guò)快捷鍵迅速啟動(dòng)插件。具體action的用法在下面進(jìn)行示例講解。
如下是android studio Preferences->Plugins頁(yè)面,plugin.xml中相應(yīng)的字段顯示位置已經(jīng)標(biāo)出,便于大家理解

四、開(kāi)發(fā)簡(jiǎn)單插件
我們用一個(gè)例子來(lái)說(shuō)明簡(jiǎn)單的插件開(kāi)發(fā)。
1.填寫plugin.xml基礎(chǔ)信息
按照第三部分所示的步驟創(chuàng)建好項(xiàng)目后,我們先手動(dòng)的將plugin.xml文件中id、name、version、vendor、description、change-notes字段按需要填寫好,我這里填寫如下:

2.新建彈窗
一般插件都是有與用戶交互的界面,這里我們新建一個(gè)彈窗作為簡(jiǎn)單實(shí)例。在插件開(kāi)發(fā)中,可以使用java swing的各種ui控件,也可以使用IntelliJ特有的一些ui控件,這里是一些官方ui開(kāi)發(fā)參考。
對(duì)于高手,可以完全手敲代碼創(chuàng)建,對(duì)于我們這種小白來(lái)說(shuō),有更為簡(jiǎn)單的方式實(shí)現(xiàn)。
使用如下圖所示方式創(chuàng)建一個(gè)dialog。

新建dialog類后,會(huì)自動(dòng)的生成一個(gè)java類和一個(gè).form文件

我們選中.form文件,可以通過(guò)拖動(dòng)控件的方式修改布局,實(shí)現(xiàn)簡(jiǎn)單的布局效果。

自動(dòng)生成的彈窗java類文件里也貼心的幫我們?cè)O(shè)置好了點(diǎn)擊事件、甚至我們新拖進(jìn)的控件也幫我們聲明好了。但是有一點(diǎn)還是需要注意,自動(dòng)生成的類文件中沒(méi)有設(shè)置dialog寬高,直接運(yùn)行會(huì)發(fā)現(xiàn)這個(gè)dialog十分小,因此這里我們加入簡(jiǎn)單的寬高限制
setMinimumSize(new Dimension(200, 300));
3.創(chuàng)建action
相對(duì)于一個(gè)字母一個(gè)字母的手敲創(chuàng)建,更easy的做法是使用IntelliJ自帶的Plugin DevKit生成action。注意,只有鼠標(biāo)選擇了項(xiàng)目的src或其文件夾下的文件時(shí),才能出現(xiàn)Action的新建選項(xiàng),如下所示

點(diǎn)擊Action后填寫好必要字段,Add to Group作用是該action入口顯示在哪個(gè)地方,我們這里選擇HelpMenu,代表顯示在help菜單里,這里也可以配置鍵盤快捷鍵。

點(diǎn)擊OK后,會(huì)在plugin.xml中自動(dòng)生成action

也會(huì)同時(shí)生成action類文件,在該類中,我們new并展示一個(gè)上面剛編寫好的彈窗即可

四、調(diào)試
像android studio一樣,我們可以直接運(yùn)行或單步調(diào)試(如紅框所示)

點(diǎn)擊運(yùn)行后,會(huì)彈出新的IntelliJ IDEA窗口,我們隨便新建或打開(kāi)一個(gè)項(xiàng)目,待項(xiàng)目index完畢后,可以在菜單欄內(nèi)發(fā)現(xiàn)我們剛寫的插件入口,點(diǎn)擊后就會(huì)彈出自定義彈窗。

因?yàn)樽罱K插件是運(yùn)行在android studio而非IntelliJ IDEA,而且真正插件運(yùn)行環(huán)境可能比自己測(cè)試的demo更復(fù)雜,會(huì)導(dǎo)致實(shí)際應(yīng)用中會(huì)出現(xiàn)各種bug,因此不能僅僅滿足于在intelliJ IDEA中通過(guò)debug進(jìn)行測(cè)試,需要導(dǎo)出插件包,放到真實(shí)的環(huán)境中進(jìn)行測(cè)試,但這時(shí)候的測(cè)試就無(wú)法進(jìn)行單步調(diào)試了,有問(wèn)題就不太容易發(fā)現(xiàn),可以通過(guò)在代碼一些主要邏輯節(jié)點(diǎn)上進(jìn)行彈窗顯示核心信息的方式排查問(wèn)題代碼位置,就像打log一樣。
插件打包入口在Build菜單中,點(diǎn)擊Prepare Plugin Module *** For Deployment后,左側(cè)項(xiàng)目目錄下會(huì)生成相應(yīng)的jar包,jar包名字就是項(xiàng)目名。

android studio中可在Preference->Plugin的如下入口處選擇安裝本地插件,進(jìn)行實(shí)際環(huán)境的測(cè)試

六.上傳插件
IntelliJ的插件有個(gè)官方市場(chǎng):https://plugins.jetbrains.com/,可以在這里免費(fèi)發(fā)布插件,該網(wǎng)站國(guó)內(nèi)可訪問(wèn),無(wú)需翻墻。
上傳插件首先要進(jìn)行登錄或注冊(cè),入口在官網(wǎng)右上角:

沒(méi)有賬號(hào)則點(diǎn)擊Sign up進(jìn)行注冊(cè),否則可直接點(diǎn)擊相應(yīng)的賬號(hào)類型圖標(biāo)進(jìn)行登錄

點(diǎn)擊了Sign up后在接下來(lái)的網(wǎng)址中進(jìn)行注冊(cè)即可

登錄后,發(fā)布插件的入口就會(huì)顯示在官網(wǎng)右上角

選擇上傳文件,協(xié)議選擇Apache license 2.0,Category選擇android后直接上傳插件

這時(shí)網(wǎng)站會(huì)提示插件已經(jīng)上傳

但實(shí)際上,進(jìn)入個(gè)人主頁(yè)會(huì)發(fā)現(xiàn)該插件還在審核,提示預(yù)計(jì)2個(gè)工作日有結(jié)果

審核通過(guò)后,就可以在android studio插件商店中搜到并下載使用了