Android Studio Plugin 插件開發(fā)教程(一) —— 開發(fā)你的第一個插件

項目源碼

https://github.com/boredream/AndroidDatabaseGeneratorPlugin

系列教程

Android Studio Plugin 插件開發(fā)教程(一) —— 開發(fā)你的第一個插件

Android Studio Plugin 插件開發(fā)教程(二) —— 插件SDK中的常用對象介紹

Android Studio Plugin 插件開發(fā)教程(三) —— 制作一個自動生成數(shù)據(jù)庫代碼的插件

Android Studio Plugin 插件開發(fā)教程(四) —— 為自動生成數(shù)據(jù)庫代碼的插件添加UI


本教程基于官方文檔編寫朝氓,原版地址如下
官方文檔 http://www.jetbrains.org/intellij/sdk/docs/welcome.html

搭建環(huán)境:
下載IntelliJ Idea客戶端并安裝
https://www.jetbrains.com/idea/download/

一魔市、配置SDK

打開IDE后主届,選擇 File | Project Structure
在配置窗口中點擊 New... 新增SDK,選擇 IntelliJ Platform Plugin SDK
(如果第一次打開IDE待德,選擇右下角 Configure | Project Defaults | Project Structure 打開配置窗口)

Project Structure

彈出頁面中君丁,選擇默認IntelliJ IDEA文件夾,確認
Project Structure

二将宪、新建Plugin Project

在打開的IntelliJ IDEA 中選擇 File | New | Project绘闷,
左側(cè)菜單選擇IntelliJ Platform Plugin項目,SDK選擇剛才新配置的涧偷,下一步
其中 Groovy簸喂、Python等啥其他附加的內(nèi)容無需勾選
最后輸入項目名稱確定,完成創(chuàng)建

New Project

三燎潮、配置插件項目

創(chuàng)建好的Plugin項目中喻鳄,會默認生成一個 plugin.xml 的配置文件
其中可以修改該插件項目的相關(guān)配置信息,比如插件名稱确封、插件版本號等除呵,如下圖

Paste_Image.png

各標簽意義具體為:

  • <id> 插件id,類似于Android項目的包名爪喘,不能和其他插件項目重復颜曾,所以推薦使用com.xxx.xxx的格式
  • <name> 插件名稱,別人在官方插件庫搜索你的插件時使用的名稱
  • <version> 插件版本號
  • <vendor> 插件發(fā)布者信息秉剑,可以添加郵箱鏈接
  • <description> 插件描述信息泛豪,在這里可以介紹你的插件內(nèi)容,支持HTML標簽
  • <change-notes> 插件版本變更日志侦鹏,支持HTML標簽
  • <idea-version> 對IntelliJ IDEA軟件支持本插件版本號
    分為since-build最低版本 和 until-build最高版本诡曙,兩個屬性可以任選一或者同時使用
    官網(wǎng)有詳細介紹 http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html
    大體規(guī)則為 since-build <= 支持版本 < until-build
  • <extensions> 自定義擴展,暫時用不到
  • <actions> 具體的插件動作略水,后面會介紹

配置中填寫的信息价卤,會在別人搜索你插件的時候展現(xiàn)介紹
File | Settings | Plugins 中查看已有插件,或者再點擊Browse respositories中瀏覽插件中心里其他人發(fā)布的插件
當選中一個插件時渊涝,右側(cè)就可以看到plugin.xml中配置的信息了
同樣慎璧,這里也可以進行插件的刪除和添加安裝操作,每次操作都需要重啟軟件后才能生效

Plugins

四跨释、開始編寫插件

插件是依附于IDE的胸私,為其提供一些小功能,比如Android Studio中鳖谈,
Code | Generate | Getter and Setter 這個自動生成get和set方法的坛猪,其實就算是個插件

Getter and Setter

當然篙悯,這些都是Android Studio中默認自帶的拭宁,我們可以根據(jù)需要開發(fā)新的插件

項目創(chuàng)建好時有一個src文件夾,可以在其中File | New ...新建文件帮非,
主要有這么幾種針對插件的特殊文件類型

  • GUI Form:表單界面
  • Dialog:對話框
  • XXXComponent:作用域類,其中又分為Application拿愧、Project阀趴、Module分為作用于不同范圍
  • Action:處理插件交互行為的類

其中最主要的是Action類
之前例子中提到了,生成getter setter方法的功能是在菜單欄中的Code | Generate | Getter and Setter選擇的
那么我們自己創(chuàng)建的插件選項在哪里呢郭毕?屬于哪個菜單呢它碎?

這里在創(chuàng)建Action類的時候就可以指定操作入口,Action的創(chuàng)建的對話框如下


New Action
  • Action ID: 動作ID显押,推薦用“插件名.XXAction”的格式
  • Class Name:編寫Action的類文件名
  • Name:動作在菜單選項中展示的名字
  • Description:動作描述
  • Groups:定義這個動作選項所屬的組扳肛,比如EditMenu就對應IDE菜單欄上的Edit,CodeMenu就對應菜單欄上的Code
  • Actions:是當前選中Groups下已有的Action動作乘碑,比如上圖示如果我們選擇CodeMenu就會展示Code中已有的幾個選項
  • Anchor:用來指定動作選項在Groups中的位置挖息,F(xiàn)rist就是最上面、Last是最下面兽肤,也可以設(shè)在某個選項的上/下方
  • Keyboard Shortcuts:調(diào)用插件Action的快捷鍵套腹,可以不填,要注意熱鍵沖突

創(chuàng)建好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修改時要注意和類文件名匹配
  • <add-to-group group-id>可以修改添加多個,即在不同菜單中都可以選擇使用
  • 同一個group下多個action的id不能重復

src下創(chuàng)建好的Action類會默認繼承 AnAction笤休,然后實現(xiàn) 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項目,這個新項目里就會包含我們剛編寫的插件選項了

如果想調(diào)試Android代碼底洗,可以先在IntelliJ中的Project Structure里配置好Android環(huán)境腋么,然后run插件項目運行新的IntelliJ時建一個Android Project就好了

新運行起來的IDE中就可以看到菜單欄里的 Code 最底部就出現(xiàn)了一個Database Generator選項

plugin

點擊就會觸發(fā)我們編寫的功能

plugin run

plugin run

如果你覺得你的插件不好找,也可以自行在根目錄上新建一個和Code亥揖、Edit等同級的group珊擂,需要在配置文件里新建一個group,然后<add-to-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插件就會發(fā)現(xiàn)它單獨建立了一個group

group

但是要慎用~ 畢竟每個插件都加一個group那主菜單欄就亂死了费变,不像藏在二級菜單里會低調(diào)的多

五摧扇、打包

(這里我們先把整個流程介紹完,更復雜的插件開發(fā)會下一篇介紹)
比較簡單挚歧,直接在頂部主菜單欄中選擇 Build | Prepare Plugin Module XXX For Deployment即可
打包前要注意把 plugin.xml 配置文件中的相關(guān)信息填寫完整

group

當提示完成后扛稽,會在項目根目錄下生成一個 XXX.jar 的包

jar

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

六滑负、發(fā)布

不過安卓的apk發(fā)布在张,通常會有一個應用市場比如Google Play用含,應用寶啥的
IntelliJ的插件也有一個市場,是官方提供的帮匾,可以在平臺上發(fā)布自己的插件
地址https://plugins.jetbrains.com/

publish plugin

打開插件中心啄骇,注冊好賬號,然后選擇Upload Plugin
將你生成的插件jar包上傳瘟斜,然后選擇分類缸夹,最后確認完成上傳

此時雖然完成上傳,但是最好要完善一下Plugin Detail信息螺句,方便別人對你的插件有更詳細的了解
還要再設(shè)置一下插件的支持IDE范圍虽惭,否則別人可能在Android Studio插件庫里搜不到你的plugin!I呱小芽唇!

IntelliJ開發(fā)的插件是針對所有IntelliJ旗下產(chǎn)品的,而他們之間的插件庫市場是非相通的
所以發(fā)布插件的時候一定要指定你的插件是那些IDE可以使用的佣蓉,比如要支持AndroidStudio
完善Plugin Detail信息的時候披摄,會有一個選項 Supported products 即支持產(chǎn)品范圍
默認是 勾選了“使用插件中的配置里指定的產(chǎn)品范圍”
這種使用插件項目里的配置方式,需要你在plugin.xml中添加<depends>標簽說明勇凭,比較麻煩
<depends>用法參考 http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html

不過你也可以取消勾選疚膊,直接在上傳中心這里設(shè)置產(chǎn)品范圍,推薦這種方式~
IntelliJ的倆是默認的虾标,然后我們再勾選Android Studio寓盗,最后save保存更新

Paste_Image.png

七、安裝使用

打開你常用的Android Studio開始安裝使用這些插件吧璧函,方式有兩種

  1. 從插件中心直接下載安裝
    IDE中選擇 File | Settings | Plugins 傀蚌,彈出對話框中選 Browse respositories 瀏覽插件庫
    搜索你自己發(fā)布的插件,然后安裝~ 安裝完成后重啟Android Studio即可開始使用插件了

  2. 從本地安裝插件jar包
    這種需要用到插件項目生成的jar包蘸吓,
    選擇Browse respositories選項旁邊的 Install plugin from disk善炫,然后找到j(luò)ar文件選中OK即可

Install Plugin

注意,新發(fā)布到市場的插件可能暫時搜不到库继,有延遲~

好了箩艺,介紹結(jié)束~

開始編寫你的第一個插件吧!O芴选艺谆!

后續(xù)教程還會帶著大家一起開發(fā)一個具體的實用插件,敬請期待~


最后安利下自己的插件拜英,自動布局文件的相關(guān)代碼静汤,懶人必備!還不用引入第三方的注入框架!
https://github.com/boredream/BorePlugin
歡迎star和follow

Layout Creator
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虫给,一起剝皮案震驚了整個濱河市藤抡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抹估,老刑警劉巖杰捂,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棋蚌,居然都是意外死亡,警方通過查閱死者的電腦和手機挨队,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門谷暮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盛垦,你說我怎么就攤上這事湿弦。” “怎么了腾夯?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵颊埃,是天一觀的道長。 經(jīng)常有香客問我蝶俱,道長班利,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任榨呆,我火速辦了婚禮罗标,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘积蜻。我一直安慰自己闯割,他們只是感情好,可當我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布竿拆。 她就那樣靜靜地躺著宙拉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丙笋。 梳的紋絲不亂的頭發(fā)上谢澈,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機與錄音不见,去河邊找鬼澳化。 笑死,一個胖子當著我的面吹牛稳吮,可吹牛的內(nèi)容都是我干的缎谷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼列林!你這毒婦竟也來了瑞你?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤希痴,失蹤者是張志新(化名)和其女友劉穎者甲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砌创,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡虏缸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嫩实。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刽辙。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖甲献,靈堂內(nèi)的尸體忽然破棺而出宰缤,到底是詐尸還是另有隱情,我是刑警寧澤晃洒,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布慨灭,位于F島的核電站,受9級特大地震影響球及,放射性物質(zhì)發(fā)生泄漏氧骤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一吃引、第九天 我趴在偏房一處隱蔽的房頂上張望语淘。 院中可真熱鬧,春花似錦际歼、人聲如沸惶翻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吕粗。三九已至,卻和暖如春旭愧,著一層夾襖步出監(jiān)牢的瞬間颅筋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工输枯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留议泵,地道東北人。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓桃熄,卻偏偏與公主長得像先口,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內(nèi)容