自己撸一个 Android Studio 插件

一、前言

用过 Android Studio 进行开发的人一般都使用过插件,因为使用插件可以大大提高我们的开发效率。例如我们常用的插件有:

都知道插件很好用,那这些插件是怎么制作的呢?这篇文章就讲下怎么制作一个 Android Studio 插件。

二、准备工作

  1. 首先需要下载开发工具 IntelliJ IDEA,点击下载
  2. 下载后点击安装,安装成功打开界面是这样的:
  1. 点击 Create New Project 创建一个新的项目,因为是开发插件,所以这里选择 IntelliJ Platform Plugin,然后选择项目的 SDK,点击到 “Next” 下一步。具体如下图所示:
  1. 最后填写项目名称,选择项目的存储路径,点击 “Finish” 即可。具体如下图所示:
  1. 创建完成项目的结构如下图所示:

其中 plugin.xml 为插件的一些相关信息,src 用来存放编写的代码。

三、编写插件

1. 填写插件相关信息

插件相关信息需要在 plugin.xml 文件中填写,具体如下图所示:

每个标签的意思为:

  • id:插件 id,需要唯一值
  • name:插件名称
  • version:插件版本号
  • vendor:插件作者信息
  • description:插件描述
  • change-notes:插件版本更新日志
  • idea-version:对 IntelliJ IDEA 软件支持本插件版本号,默认即可
  • depends:指定你的插件是哪些 IDE 可以使用。
    例如我这里的表示 IntelliJ IDEA 与 Android Studio 可以使用,如果只想在 Android Studio 使用,则写成 <depends>com.intellij.modules.androidstudio</depends>,具体写法可参考 Plugin Compatibility with IntelliJ Platform Products
  • extensions:扩展,用不到可以不改
  • actions:插件动作,后面创建 Action 的时候会自动配置

这些信息会在搜索该插件的时候展示,例如搜索 GsonFormat :

2. 新建 Action

不能直接在 src 文件夹下新建 Action(原因见文末注意事项),包括后面我们插件的功能代码也不能直接放在 src 文件夹下,而是在 src 文件夹下新建一个包(方法与 Android Studio 一样),然后在这个包下新建 Action。即在包上右键点击如下选项:

然后填写 Action 相关信息,如下图所示:

  • Action ID: 代表该 Action 的唯一 ID,一般的格式为:pluginName.ID
  • Class Name:Action 的类名
  • Name:插件在菜单上显示的名字
  • Description:这个 Action 的描述
  • Groups:指定该插件在 IDE 菜单栏上的位置,如下选择 EditMenu(Edit)表示该插件在 IDE 菜单栏上的 Edit 处
  • Anchor:指定插件在 Groups 中的哪个选项,Frist 表示在第一个选项
  • Keyboard Shortcuts:使用插件的快捷键

点击 “OK” 后会创建一个刚刚命名的 ShowDialog 类继承 AnAction 并实现 actionPerformed 方法,而且在 plugin.xml 文件中会自动配置我们刚刚填写的 Action 信息。如下图所示:

3. 编写 Action

我们仿照 官方例子,在 actionPerformed 方法中添加如下代码,表示点击插件的时候弹出一个dialog

public class ShowDialogAction 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());
    }
}
4. 使用插件

Action 代码完成后,点击 Run Plugin 运行项目,会自动启动一个新的 IntelliJ IDEA 项目,在这个项目中就可以使用我们刚刚制作的插件了。如下图所示:


四、生成插件

点击菜单栏上的 Build -> Prepare Plugin Module 'xxx' For Deployment 即可,如下图所示:

运行完成会在项目的根目录生成一个 xxx.jar 的文件,这个就是最终生成的插件文件,如下图所示:

五、安装插件

打开 Andorid Studio,点击菜单栏上的 File -> Settings -> Plugins -> Install plugin from disk,然后选择我们刚刚生成的 jar 文件,如下图所示:

然后点击 “OK”,重启 Andorid Studio 后即可像上面那样使用插件。

六、上传插件

前面生成的插件只能从本地选择安装,要想从插件库直接下载安装则需要将插件上传到插件库-JetBrains Plugins Repository,打开插件库,注册账号(这里可直接使用 Github 账号授权登录),登录后选择 Upload plugin,填写相关信息,点击 Upload 即可上传。如下图所示:

  • License:开源许可协议,我这里选择 Apache license 2.0
  • Category:插件分类,我这里选择 Android

出现如下界面表示上传成功,但只是上传成功,还需要等审核通过才能在插件库搜索到。

点击上图的链接,跳转到插件详情,点击编辑可完善插件信息。具体如下图所示:

如果在 plugin.xml 文件中没有指定插件是哪些 IDE 可以使用,也可以在这里指定。具体如下:(这种方式我试过审核没有通过,所以我自己用的是在 plugin.xml 文件中指定的方式

进入编辑界面滑到最底部可以看到 Supported products,即支持的产品。这里默认是 勾选了 “Determine supported products by dependencies in plugin.xml”,表示根据 plugin.xml 文件中的配置项来确定支持的产品。

这里我们不使用配置 plugin.xml 文件的方式,而是在这里手动选择。即去掉默认勾选,然后选中 Android Studio,表示插件支持在 Android Studio 中使用,其他 3 项 IntelliJ 是默认勾选的不用管,最后点击保存即可。


等审核通过后,我们就可以在插件库搜索到啦!如下图所示:

七、注意事项

使用插件出现 NullPointerException
  • 问题
    写好插件,然后使用 Android Studio 安装插件并使用,提示
    java.lang.NullPointerException at com.android.tools.idea.diagnostics.AndroidStudioSystemHealthMonitor.getActionName
  • 解决
    也就是前面 “2. 新建 Action” 那里说的,需要将所有的 Action 及其他 Java 文件都放到包下,而不是直接放在 src 目录下。
在菜单栏上找不到插件
  • 问题
    写完 Action,然后点击 Run Plugin 运行项目后在菜单栏上找不到插件。
  • 解决
    在运行项目前需要填写 plugin.xml 文件中的 id 与 name 标签,不能用默认的。
    其实这个有点诡异,一般不上传到插件库是可以不填的,但是我用平时常用的电脑反复测试的确是有这个问题,后来换另一部电脑竟然没有这个问题了~,所以我也不知道是因为环境还是什么问题,反正你们遇到就跟我一样解决就可以了。

八、总结

文章看起来好长好复杂呀!嗯,那是因为我是良心博主呀,每一步都给你们写的清清楚楚,还带截图!其实按照我的步骤执行下去,真的挺简单的,也就以下几步:

  1. 下载开发工具 IntelliJ IDEA 并安装。
  2. 新建 IntelliJ Platform Plugin 项目,然后编写插件,即新建 Action。
  3. 生成插件,然后在 Andorid Studio 中安装即可使用。

插件源码:ShowDialog

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容