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,
左側菜單選擇IntelliJ Platform Plugin項目,SDK選擇剛才新配置的,下一步
其中 Groovy、Python等啥其他附加的內容無需勾選
最后輸入項目名稱確定,完成創(chuàng)建

New Project

三、配置插件項目

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

Paste_Image.png

各標簽意義具體為:

  • <id> 插件id,類似于Android項目的包名,不能和其他插件項目重復,所以推薦使用com.xxx.xxx的格式
  • <name> 插件名稱,別人在官方插件庫搜索你的插件時使用的名稱
  • <version> 插件版本號
  • <vendor> 插件發(fā)布者信息,可以添加郵箱鏈接
  • <description> 插件描述信息,在這里可以介紹你的插件內容,支持HTML標簽
  • <change-notes> 插件版本變更日志,支持HTML標簽
  • <idea-version> 對IntelliJ IDEA軟件支持本插件版本號
    分為since-build最低版本 和 until-build最高版本,兩個屬性可以任選一或者同時使用
    官網有詳細介紹 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ā)布的插件
當選中一個插件時,右側就可以看到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是最下面,也可以設在某個選項的上/下方
  • Keyboard Shortcuts:調用插件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項目,這個新項目里就會包含我們剛編寫的插件選項了

如果想調試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那主菜單欄就亂死了,不像藏在二級菜單里會低調的多

五、打包

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

group

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

jar

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

六、發(fā)布

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

publish plugin

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

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

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

不過你也可以取消勾選,直接在上傳中心這里設置產品范圍,推薦這種方式~
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,然后找到jar文件選中OK即可

Install Plugin

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

好了,介紹結束~

開始編寫你的第一個插件吧?。?!

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


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

Layout Creator
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容