前言

本篇文章将讲解如何通过 IntelliJ IDEA 工具来编写自定义插件,熟悉插件开发的流程,以及如何打包发布插件的流程。

一、配置SDK

打开 IntelliJ IDEA ,选择 File -> Project Structure,在弹出的配置窗口中点击 New... 新增SDK,然后选择 IntelliJ Platform Plugin SDK。如下图所示:

android studio插件自动生成json类 androidstudio插件开发_菜单栏

在弹出下面的对话框时,选择默认 IntelliJ IDEA 文件夹即可,然后点击OK,如下图所示:

android studio插件自动生成json类 androidstudio插件开发_Code_02

最后会弹出选择插件的 Java 版本的窗口,选择默认配置即可,然后点击OK,如下图所示:

android studio插件自动生成json类 androidstudio插件开发_Code_03

 

二、新建 Plugin Project

在打开的 IntelliJ IDEA 中选择 File -> New -> Project,在弹出的 New Project 窗口的左侧菜单选择 IntelliJ Platform Plugin 项目,Project SDK 选择刚才新建的配置,其中 Groovy、Scala等其他附加的内容无需勾选,然后选择 Next , 如下图所示:

android studio插件自动生成json类 androidstudio插件开发_android_04

输入项目名称和选择项目存放位置即可,点击 Finish 完成创建,如下图所示:

android studio插件自动生成json类 androidstudio插件开发_Code_05

创建完插件项目之后,会默认生成一个 plugin.xml 的配置文件,其中可以修改该插件项目的相关配置信息,比如插件名称、插件版本号等,代码如下所示:

<idea-plugin>
  <id>com.your.company.unique.plugin.id</id>
  <name>Plugin display name here</name>
  <version>1.0</version>
  <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>

  <description><![CDATA[
      Enter short description for your plugin here.<br>
      <em>most HTML tags may be used</em>
    ]]></description>

  <change-notes><![CDATA[
      Add change notes here.<br>
      <em>most HTML tags may be used</em>
    ]]>
  </change-notes>

  <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
  <idea-version since-build="173.0"/>

  <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
       on how to target different products -->
  <!-- uncomment to enable plugin in all products
  <depends>com.intellij.modules.lang</depends>
  -->

  <extensions defaultExtensionNs="com.intellij">
    <!-- Add your extensions here -->
  </extensions>

  <actions>
    <!-- Add your actions here -->
  </actions>

</idea-plugin>

各个标签的具体含义如下:

1. <id> 插件id,类似于 Android 项目的包名,不能和其他插件项目重复,所以推荐使用 com.xxx.yyy 的格式。

2. <name> 插件名称,别人在官方插件市场搜索你的插件时使用的名称。

3. <version> 插件版本号。

4. <vendor> 插件发布者信息,可以添加邮箱链接。

5. <description> 插件描述信息,在这里可以介绍你的插件内容,支持HTML标签

6. <change-notes> 插件版本变更日志,支持HTML标签

7. <idea-version> 对 IntelliJ IDEA 软件支持本插件版本号, 分为 since-build 最低版本和 until-build 最高版本,两个属性可以任选一或者同时使用,官网有详细介绍 http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html 大体规则为 since-build <= 支持版本 < until-build

8. <extensions> 自定义扩展,暂时用不到。

9. <actions> 具体的插件动作,后面会介绍。

plugin.xml 中填写的配置信息,会在别人在插件库中搜索你的插件的时候展现出来。

 

三、编写插件代码

项目创建好时有一个 src 文件夹,在这个文件夹下写插件的主要代码,主要有以下几种针对插件的特殊文件类型:

  1. GUI Form:表单界面。
  2. Dialog:对话框。
  3. XXXComponent:作用域,其中有分为 Application、Project、Module 分别作用于不同的范围。
  4. Action:处理插件交互行为。

其中最主要的是 Action 类,当我们使用 Android Studio 生成类的 getter 和 setter 方法是也是使用的插件,而生成 getter 和 setter 方法的功能是在菜单栏中的 Code -> Generate -> Getter and Setter选择的。

那么我们自己创建的插件选项在哪里呢?属于哪个菜单呢?

这里在创建 Action 类的时候就可以指定操作入口,Action 的创建的对话框如下图所示:

android studio插件自动生成json类 androidstudio插件开发_ide_06

然后在弹出的 New Action 界面配置 Action 相关的信息,如下图所示:

android studio插件自动生成json类 androidstudio插件开发_Code_07

1. Action ID: 动作 ID,推荐用“插件名.XXAction”的格式。

2. Class Name:编写 Action 的类文件名。

3. Name:动作在菜单选项中展示的名字。

4. Description:Action 描述。

5. Groups:定义这个动作选项所属的组,比如 EditMenu 就对应 IDE 菜单栏上的 Edit,CodeMenu 就对应菜单栏上的 Code 。

6. Actions:是当前选中 Groups 下已有的 Action 动作,比如上图示如果我们选择 CodeMenu 就会展示 Code 中已有的几个选项 。

7. Anchor:用来指定动作选项在 Groups 中的位置,Frist 就是最上面、Last 是最下面,也可以设在某个选项的上/下方。

8. Keyboard Shortcuts:调用插件Action的快捷键,可以不填,要注意热键冲突。

创建好 Action 后,会自动在 plugin.xml 配置文件的 actions 标签中新增一个对应的 Action 动作信息,代码如下所示:

<actions>
    <!-- Add your actions here -->
    <action id="DatabaseGenerator.GeneratorAction" class="DatabaseGeneratorAction" text="Datebase Generator"
            description="auto generator database code.">
        <add-to-group group-id="CodeMenu" anchor="last"/>
    </action>
</actions>

注意:

  1. 这里的信息我们都可以再次修改,但是 class name 修改时要注意和类文件名匹配。
  2. <add-to-group group-id> 可以修改添加多个,即在不同菜单中都可以选择使用。
  3. 同一个 group 下多个 action 的 id 不能重复。

创建好的 Action 类会默认继承抽象类 AnAction,然后实现 actionPerformed 抽象方法,在方法中添加如下代码,让点击这个 Action 的时候弹出一个输入框,代码如下所示:

public class DatabaseGeneratorAction extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {
        Project project = e.getData(PlatformDataKeys.PROJECT);
        String text = Messages.showInputDialog(project,
                "Please enter the user name.",
                "Title",
                Messages.getQuestionIcon());
        Messages.showMessageDialog(project,
                "What you have entered is:" + text,
                "Information",
                Messages.getInformationIcon());
    }
}

写好代码后,run 运行项目,此时会自动启动一个新的 IntelliJ IDEA 项目,新运行起来的 IntelliJ IDEA 中就可以看到菜单栏里的 Code 最底部就出现了一个 Database Generator 选项,如下图所示:

android studio插件自动生成json类 androidstudio插件开发_ide_08

点击 " Database Generator" 就会触发我们编写的功能,如下图所示:

android studio插件自动生成json类 androidstudio插件开发_ide_09

android studio插件自动生成json类 androidstudio插件开发_Code_10

为了更加方法的找到插件我们插件的入口,也可以在根目录上新建一个和 Code、Edit 等同级别的 Group ,需要在配置文件里新建一个group,然后<add-to-group>指定其添加到 MainMenu 主菜单上,代码如下所示:

<actions>
    <!-- Add your actions here -->
    <group id="Plugin.PluginSet" text="Database" description="group desc">
        <add-to-group group-id="MainMenu" anchor="last"/>
        <action id="DatabaseGenerator.GeneratorAction" class="DatabaseGeneratorAction" text="Datebase Generator"
                description="auto generator database code.">
        </action>
    </group>
</actions>

这个时候再 run 插件就会发现它单独建立了一个 group,如下图所示:

android studio插件自动生成json类 androidstudio插件开发_android_11

但是不建议这样使用,因为如果每一个插件都添加一个 group 在主菜单栏的话,那么主菜单栏就会非常杂乱,所以还是隐藏在二级菜单中比较好一点。

 

五、打包发布

5.1 打包

在 IntelliJ IDEA 顶部主菜单中选择 build -> Prepare Plugin Module "xxx" For Deployment 即可,如下图所示:

android studio插件自动生成json类 androidstudio插件开发_android_12

当提示完成后,会在项目根目录下生成一个 XXX.jar 的包,如下图所示:

android studio插件自动生成json类 androidstudio插件开发_菜单栏_13

这个 jar 包就可以提供给别人使用了。

5.2 发布

IntelliJ 的插件也有一个市场,是官方提供的,可以在平台上发布自己的插件,地址:https://plugins.jetbrains.com/如果没有账号的请先注册账号,发布插件如下图所示:

android studio插件自动生成json类 androidstudio插件开发_Code_14

android studio插件自动生成json类 androidstudio插件开发_android_15

上传成功将会出现如下页面。

android studio插件自动生成json类 androidstudio插件开发_ide_16

发布插件需要两个工作日审核时间。

说明: 在打包的时候 plugin.xml 中的内容不能有默认值,而且必须要有<depends>标签,实例代码如下:

<idea-plugin>
    <id>com.lx.plugin.database</id>
    <name>Database Generator</name>
    <version>1.0</version>
    <vendor email="xxx@163.com">lx</vendor>
    <description>auto generator db code</description>
    <change-notes>initial version 1.0</change-notes>

    <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
    <idea-version since-build="173.0"/>

    <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
         on how to target different products -->
    <!-- uncomment to enable plugin in all products  -->

    <depends>com.intellij.modules.lang</depends>


    <extensions defaultExtensionNs="com.intellij">
        <!-- Add your extensions here -->
    </extensions>

    <actions>
        <!-- Add your actions here -->
        <action id="DatabaseGenerator.GeneratorAction" class="DatabaseGeneratorAction" text="Datebase Generator"
                description="auto generator database code.">
            <add-to-group group-id="CodeMenu" anchor="last"/>
        </action>
    </actions>

</idea-plugin>

 

六、安装插件

打开 Android Studio 开始安装插件,安装插件入口为 File -> Settings -> Plugins 有两种方式:

1. 从本地安装插件

这种需要用到插件项目生成的 jar 包,选择 Installed 选项旁边的设置小图标,点击之后在选择 Install plugin from disk ,然后找到jar文件选中OK即可。

android studio插件自动生成json类 androidstudio插件开发_Code_17

android studio插件自动生成json类 androidstudio插件开发_Code_18

2. 从插件市场安装

弹出对话框中选 Marketplace ,搜索你自己发布的插件,然后安装即可。

android studio插件自动生成json类 androidstudio插件开发_ide_19

这里由于我刚刚发布的插件还没有通过审核,所以搜索不出来。

说明:由于插件内容过于简单,有可能通不过审核,所以这里就不在继续跟踪审核结果了。这里重点是将插件开发与打包发布流程描述清楚。

验证结果

我们在 Android Studio 中成功安装好插件之后,在 Code 菜单栏下面成功显示了 Database Generator 了。如下图所示:

android studio插件自动生成json类 androidstudio插件开发_ide_20

点击 ”Database Generator“ 之后弹出如下页面:

android studio插件自动生成json类 androidstudio插件开发_菜单栏_21

输入内容之后点击 "OK",弹出如下结果页面:

android studio插件自动生成json类 androidstudio插件开发_android_22

到此,说明插件正常在 Android Studio 中使用。