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

項目源碼

github.com/boredream/A…html

系列教程

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

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

Android Studio Plugin 插件開發教程(三) —— 製做一個自動生成數據庫代碼的插件github

Android Studio Plugin 插件開發教程(四) —— 爲自動生成數據庫代碼的插件添加UIsql


本教程基於官方文檔編寫,原版地址以下
官方文檔 www.jetbrains.org/intellij/sd…數據庫

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

1、配置SDK

打開IDE後,選擇 File | Project Structure
在配置窗口中點擊 New... 新增SDK,選擇 IntelliJ Platform Plugin SDK
(若是第一次打開IDE,選擇右下角 Configure | Project Defaults | Project Structure 打開配置窗口)
ide

Project Structure
Project Structure

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

2、新建Plugin Project

在打開的IntelliJ IDEA 中選擇 File | New | Project
左側菜單選擇IntelliJ Platform Plugin項目,SDK選擇剛纔新配置的,下一步
其中 Groovy、Python等啥其餘附加的內容無需勾選
最後輸入項目名稱肯定,完成建立
佈局

New Project
New Project

3、配置插件項目

建立好的Plugin項目中,會默認生成一個 plugin.xml 的配置文件
其中能夠修改該插件項目的相關配置信息,好比插件名稱、插件版本號等,以下圖post

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

4、開始編寫插件

插件是依附於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那主菜單欄就亂死了,不像藏在二級菜單裏會低調的多

5、打包

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

group
group

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

jar
jar

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

6、發佈

不過安卓的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

7、安裝使用

打開你經常使用的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
相關文章
相關標籤/搜索