項目源碼
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 打開配置窗口)
彈出頁面中君丁,選擇默認IntelliJ IDEA文件夾,確認
二将宪、新建Plugin Project
在打開的IntelliJ IDEA 中選擇 File | New | Project绘闷,
左側(cè)菜單選擇IntelliJ Platform Plugin項目,SDK選擇剛才新配置的涧偷,下一步
其中 Groovy簸喂、Python等啥其他附加的內(nèi)容無需勾選
最后輸入項目名稱確定,完成創(chuàng)建
三燎潮、配置插件項目
創(chuàng)建好的Plugin項目中喻鳄,會默認生成一個 plugin.xml 的配置文件
其中可以修改該插件項目的相關(guān)配置信息,比如插件名稱确封、插件版本號等除呵,如下圖
各標簽意義具體為:
- <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中配置的信息了
同樣慎璧,這里也可以進行插件的刪除和添加安裝操作,每次操作都需要重啟軟件后才能生效
四跨释、開始編寫插件
插件是依附于IDE的胸私,為其提供一些小功能,比如Android Studio中鳖谈,
Code | Generate | Getter and Setter 這個自動生成get和set方法的坛猪,其實就算是個插件
當然篙悯,這些都是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)建的對話框如下
- 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選項
點擊就會觸發(fā)我們編寫的功能
如果你覺得你的插件不好找,也可以自行在根目錄上新建一個和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那主菜單欄就亂死了费变,不像藏在二級菜單里會低調(diào)的多
五摧扇、打包
(這里我們先把整個流程介紹完,更復雜的插件開發(fā)會下一篇介紹)
比較簡單挚歧,直接在頂部主菜單欄中選擇 Build | Prepare Plugin Module XXX For Deployment即可
打包前要注意把 plugin.xml 配置文件中的相關(guān)信息填寫完整
當提示完成后扛稽,會在項目根目錄下生成一個 XXX.jar 的包
類似于安卓打包生產(chǎn)的apk,這個時候你就可以把它丟給別人使用了
六滑负、發(fā)布
不過安卓的apk發(fā)布在张,通常會有一個應用市場比如Google Play用含,應用寶啥的
IntelliJ的插件也有一個市場,是官方提供的帮匾,可以在平臺上發(fā)布自己的插件
地址:https://plugins.jetbrains.com/
打開插件中心啄骇,注冊好賬號,然后選擇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保存更新
七、安裝使用
打開你常用的Android Studio開始安裝使用這些插件吧璧函,方式有兩種
從插件中心直接下載安裝
IDE中選擇 File | Settings | Plugins 傀蚌,彈出對話框中選 Browse respositories 瀏覽插件庫
搜索你自己發(fā)布的插件,然后安裝~ 安裝完成后重啟Android Studio即可開始使用插件了從本地安裝插件jar包
這種需要用到插件項目生成的jar包蘸吓,
選擇Browse respositories選項旁邊的 Install plugin from disk善炫,然后找到j(luò)ar文件選中OK即可
注意,新發(fā)布到市場的插件可能暫時搜不到库继,有延遲~
好了箩艺,介紹結(jié)束~
開始編寫你的第一個插件吧!O芴选艺谆!
后續(xù)教程還會帶著大家一起開發(fā)一個具體的實用插件,敬請期待~
最后安利下自己的插件拜英,自動布局文件的相關(guān)代碼静汤,懶人必備!還不用引入第三方的注入框架!
https://github.com/boredream/BorePlugin
歡迎star和follow