Android Studio插件开发-手把手教学

一、下载开发工具

android studio插件开发使用的是IntelliJ IDEA,其实android studio就是基于IntelliJ IDEA的社区版本发展而来的。在官网进行下载IntelliJ IDEA

二、配置IntelliJ IDEA

下载安装启动IntelliJ IDEA后,点击创建新项目


下载首次启动idea.png

因为我们要开发的是android studio插件,所以这里选IntelliJ Platform Plugin。右侧需配置项目SDK,如果不配置直接点击next会被提示没有sdk。
这里有个小坑的点,就是当点击Project SDK右侧输入框的三角选择按钮时,会弹出本地文件选择框,但我们并不知道这个sdk在本地的什么地方。其实,就是文件选择框正在选择的文件目录,我们直接点确定就好了。
当然IntelliJ IDEA支持使用其他语言进行开发,比如下图左侧Kotlin,甚至我们可以去IntelliJ IDEA的preference->plugin的Marketplace 下载其他插件比如python,进行python开发,但是这里如果不选IntelliJ Platform Plugin,那么就不是我们现在介绍的插件开发了。


首次启动配置sdk.png

三、plugin.xml介绍

回归正题,选择IntelliJ Platform Plugin后点击Next,给项目取名后点击finish,这时展示的页面是该项目的plugin.xml。

新建项目首次展示.png

这个是项目的配置文件,有很多配置项,让我们来逐一解释下:
<id> :该项目的唯一id,当该项目被上传到应用商店后,这个id将用来区分不同插件,如果尝试上传相同id的插件,应用商店就会提示错误。
<name> :插件名字,如果导出的插件安装到android studio上,会是已安装插件的插件名。
<version> :插件版本号,升级使用
<vendor>:作者信息,其中作者名字会显示在已安装插件信息页面
<description> :对插件的描述,较为重要,用户对插件的初印象就是该描述的内容,描述是否清晰可能直接影响到用户对插件功能的理解,直接影响到用户是否安装茶几。IntelliJ建议至少超过40字符,过少会有文字下方红线提示
<change-notes>:这里用来写每个版本都做了哪些改动,同样会展示在插件信息页
<idea-version> :支持的idea版本,写一个较老的版本即可(比如173,代表17年3月的版本),如果这个版本过新,会导致老版本的IntelliJ IDEA无法使用该插件
<actions> :这里存放一个或多个<action>节点,每个action节点是用户使用插件的入口,比如,可以在这里指定一个新建的AnAction类(该类作用是运行该插件功能的入口,比如弹出界面或执行后台逻辑),并指定用户可见的入口位置及入口名字,方便用户触发该插件,甚至可以配置键盘快捷键,用户可通过快捷键迅速启动插件。具体action的用法在下面进行示例讲解。

如下是android studio Preferences->Plugins页面,plugin.xml中相应的字段显示位置已经标出,便于大家理解


pluginxml文件对应关系.png

四、开发简单插件

我们用一个例子来说明简单的插件开发。

1.填写plugin.xml基础信息

按照第三部分所示的步骤创建好项目后,我们先手动的将plugin.xml文件中id、name、version、vendor、description、change-notes字段按需要填写好,我这里填写如下:


plugin示例.png

2.新建弹窗

一般插件都是有与用户交互的界面,这里我们新建一个弹窗作为简单实例。在插件开发中,可以使用java swing的各种ui控件,也可以使用IntelliJ特有的一些ui控件,这里是一些官方ui开发参考
对于高手,可以完全手敲代码创建,对于我们这种小白来说,有更为简单的方式实现。
使用如下图所示方式创建一个dialog。

创建dialog.png

新建dialog类后,会自动的生成一个java类和一个.form文件
自动生成的dialog.png

我们选中.form文件,可以通过拖动控件的方式修改布局,实现简单的布局效果。
通过拖动修改dialog布局.png

自动生成的弹窗java类文件里也贴心的帮我们设置好了点击事件、甚至我们新拖进的控件也帮我们声明好了。但是有一点还是需要注意,自动生成的类文件中没有设置dialog宽高,直接运行会发现这个dialog十分小,因此这里我们加入简单的宽高限制setMinimumSize(new Dimension(200, 300));
dialogjava类文件.png

3.创建action

相对于一个字母一个字母的手敲创建,更easy的做法是使用IntelliJ自带的Plugin DevKit生成action。注意,只有鼠标选择了项目的src或其文件夹下的文件时,才能出现Action的新建选项,如下所示


自动创建action.png

点击Action后填写好必要字段,Add to Group作用是该action入口显示在哪个地方,我们这里选择HelpMenu,代表显示在help菜单里,这里也可以配置键盘快捷键。


自动生成action.png

点击OK后,会在plugin.xml中自动生成action
自动生成的plugin中action部分.png

也会同时生成action类文件,在该类中,我们new并展示一个上面刚编写好的弹窗即可


自动生成action类文件.png

四、调试

像android studio一样,我们可以直接运行或单步调试(如红框所示)


调试入口.png

点击运行后,会弹出新的IntelliJ IDEA窗口,我们随便新建或打开一个项目,待项目index完毕后,可以在菜单栏内发现我们刚写的插件入口,点击后就会弹出自定义弹窗。


插件入口.png

因为最终插件是运行在android studio而非IntelliJ IDEA,而且真正插件运行环境可能比自己测试的demo更复杂,会导致实际应用中会出现各种bug,因此不能仅仅满足于在intelliJ IDEA中通过debug进行测试,需要导出插件包,放到真实的环境中进行测试,但这时候的测试就无法进行单步调试了,有问题就不太容易发现,可以通过在代码一些主要逻辑节点上进行弹窗显示核心信息的方式排查问题代码位置,就像打log一样。
插件打包入口在Build菜单中,点击Prepare Plugin Module *** For Deployment后,左侧项目目录下会生成相应的jar包,jar包名字就是项目名。


打包.png

android studio中可在Preference->Plugin的如下入口处选择安装本地插件,进行实际环境的测试


as安装本地插件.png

六.上传插件

IntelliJ的插件有个官方市场:https://plugins.jetbrains.com/,可以在这里免费发布插件,该网站国内可访问,无需翻墙。
上传插件首先要进行登录或注册,入口在官网右上角:

点击sign in.png

没有账号则点击Sign up进行注册,否则可直接点击相应的账号类型图标进行登录
登录或创建账号.png

点击了Sign up后在接下来的网址中进行注册即可
注册账号.png

登录后,发布插件的入口就会显示在官网右上角
上传插件入口.png

选择上传文件,协议选择Apache license 2.0,Category选择android后直接上传插件
上传.png

这时网站会提示插件已经上传
infoflow 2020-10-11 16-52-55.png

但实际上,进入个人主页会发现该插件还在审核,提示预计2个工作日有结果
提交正在审核.png

审核通过后,就可以在android studio插件商店中搜到并下载使用了

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