Android Studio Plugin 插件开发教程(一) —— 开发你的第一个插件

18,792 阅读8分钟

项目源码

github.com/boredream/A…

系列教程

Android Studio Plugin 插件开发教程(一) —— 开发你的第一个插件

Android Studio Plugin 插件开发教程(二) —— 插件SDK中的常用对象介绍

Android Studio Plugin 插件开发教程(三) —— 制作一个自动生成数据库代码的插件

Android Studio Plugin 插件开发教程(四) —— 为自动生成数据库代码的插件添加UI


本教程基于官方文档编写,原版地址如下
官方文档 www.jetbrains.org/intellij/sd…

搭建环境:
下载IntelliJ Idea客户端并安装
www.jetbrains.com/idea/downlo…

一、配置SDK

打开IDE后,选择 File | Project Structure
在配置窗口中点击 New... 新增SDK,选择 IntelliJ Platform Plugin SDK
(如果第一次打开IDE,选择右下角 Configure | Project Defaults | Project Structure 打开配置窗口)

Project Structure
Project Structure

弹出页面中,选择默认IntelliJ IDEA文件夹,确认
Project Structure
Project Structure

二、新建Plugin Project

在打开的IntelliJ IDEA 中选择 File | New | Project
左侧菜单选择IntelliJ Platform Plugin项目,SDK选择刚才新配置的,下一步
其中 Groovy、Python等啥其他附加的内容无需勾选
最后输入项目名称确定,完成创建

New Project
New Project

三、配置插件项目

创建好的Plugin项目中,会默认生成一个 plugin.xml 的配置文件
其中可以修改该插件项目的相关配置信息,比如插件名称、插件版本号等,如下图

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

四、开始编写插件

插件是依附于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那主菜单栏就乱死了,不像藏在二级菜单里会低调的多

五、打包

(这里我们先把整个流程介绍完,更复杂的插件开发会下一篇介绍)
比较简单,直接在顶部主菜单栏中选择 Build | Prepare Plugin Module XXX For Deployment即可
打包前要注意把 plugin.xml 配置文件中的相关信息填写完整

group
group

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

jar
jar

类似于安卓打包生产的apk,这个时候你就可以把它丢给别人使用了

六、发布

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

七、安装使用

打开你常用的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