乐哈哈yoyo 发表于 2017-6-20 09:45:00

手把手教你 Android Studio 插件从开发到发布官方

前言好久没有为社区做贡献了,甚是惭愧。前不久组里先后发了《jenkins集成monkey》,《火线教你如何开发 Jenkins 插件》等实际动手的文章,想整理一下从创建到发布自己的AS插件整个详细的过程记录发布出来,希望给有需求的同行借鉴和使用。
自定义AS插件的需求来自于我们的静态代码扫描工具在公司推进过程中,开发同事提出希望能在研发流程中集成火线到他们的IDE中,方便直接本地扫描。公司大部分Android产品的研发团队已经强制使用Android Studio,所以才着手开发了这个插件,闲话少说,开始介绍。
文中图片比较多,为了方便读者更直观的了解,一步一步按照步骤来操作即可。
环境准备
[*]安装JDK和SDK环境


[*]本地JDK版本,建议1.8版本

https://testerhome.com/uploads/photo/2017/aa35245c-2c16-4d75-b4b1-3db7a452fab6.png%21large



[*]SDK请升级到最新,我本地API已经升级到25
[*]安装IntelliJ IDEA


[*]Community 是免费版,下载地址:http://www.jetbrains.org/display/IJOS/Download
[*]本文使用的版本:

https://testerhome.com/uploads/photo/2017/39939592-34a8-4b2e-968f-47d7bf4f9801.png%21large


创建工程创建插件项目,千万不要选错项目类型,File -> New Project,参考下图:

https://testerhome.com/uploads/photo/2017/2aeec70c-e3b1-43e5-95e2-1adaf898c98f.jpg%21large


此处有两点需要注意:

[*]左边选择Intellij Platform Plugin
[*]SDK选择正确的版本,底下Groovy和Scala不用管
项目介绍
[*]目录结构
创建项目完成后,目录大概是这样的:

https://testerhome.com/uploads/photo/2017/22e17e74-ecf2-4878-99e5-a185dae15aa3.png%21large



[*]Plugin.xml
plugin.xml是整个项目的核心配置文件,一些Action、Extension组件需要在这里先进行注册和声明,和AndroidManifest.xml注册组件类似。
以火线插件项目为例:

https://testerhome.com/uploads/photo/2017/8bdb58bd-115a-4ec8-896e-2cc6c5854b88.jpg%21large


< id >: 插件的ID,唯一性标识,上传到官方仓库如果如果有重复的ID是不能提交成功的,建议以工程package路径为ID。
< name >: 显示在插件仓库列表中的名称。

https://testerhome.com/uploads/photo/2017/9ea4fa23-c410-4574-a2bd-aa15f4aa6c58.png%21large


< version >:插件版本。如果和之前版本号相同则不允许提交,所以每次提交仓库记得修改版本号,历史版本显示在官网插件详情页中。

https://testerhome.com/uploads/photo/2017/b3a3a160-2f6d-4752-84aa-638104192139.png%21large


< description >:插件的描述信息,会显示在插件详细说明中。

https://testerhome.com/uploads/photo/2017/5617e887-b95e-4fc5-8d2a-efd0675a0610.png%21large


< change- notes >:更新日志,建议每个版本更新的内容都在这里描述。

https://testerhome.com/uploads/photo/2017/aba18b9d-0067-422d-b214-1fa39db7f002.png%21large


< vendor >:宣传网址、联系邮件,公司信息写在这里。

https://testerhome.com/uploads/photo/2017/0fec7f42-b131-4f00-9780-3a7ccfd0dcd8.png%21large


< idea-version since-build="141.0" >:IDE的branch number,这里不用修改。

https://testerhome.com/uploads/photo/2017/b7bdec2c-2a28-4e83-beb1-0fed988315b9.png%21large



[*]创建一个action开发插件的最终目的当然是让它干活,所以需要从第一个action入手。在src目录点击右键 -> New -> Action,正确填写字段,例如:

https://testerhome.com/uploads/photo/2017/400f3267-4747-4b7a-aaf3-4062a9452979.jpg%21large


Action ID:Action的ID,项目中可能会有多个ID,不能相互重复,否则plugin.xml中会报错。
Class Name:Action类名
Name:菜单项中显示的文字,常见的比如run,go等字样
Description:描述文字
Groups: Action的类型,比如我选择的ToolsMenu,则action会出现在工具栏“Tools”下拉列表中,以此类推如“Edit”、“File”、“Run”等等。Anchor是指action在菜单中的位置。
创建完成Action后可以直接运行,这里需要提一下run的edit configuration设置,可以参考我的截图,创建一个类型为plugin的运行任务,这里我起名字为run,如下图所示。

https://testerhome.com/uploads/photo/2017/7da8ed3a-a8f8-4363-b4e0-6157ba34315d.jpg%21large


创建成功后点击IDE右上角的绿色三角形箭头,启动后会看到这样的效果:

https://testerhome.com/uploads/photo/2017/242df8b2-6be0-45d8-98fb-7e49c52bbe99.png%21large


成功创建action后,项目会自动在plugin.xml的节点增加刚刚填写的属性,如上图第一个箭头所指。
启动插件工程后,在工具栏“Tools”中就可以找到“ShowMeTheMoney”这个action了。此时点击没有反应,因为action还没有任何逻辑实现。如果想要action去执行工作,需要在刚刚新建的action类中的actionPerformed()方法中实现代码逻辑。在方法中加入如下代码:
Messages.showDialog("Hello,火线!", "Selected Element:", new String[]{"OK"}, -1, null);再次点击运行后,点击Tools -> ShowMeTheMoney,得到提示:

https://testerhome.com/uploads/photo/2017/5bf9c0f7-a4af-4fde-8434-9a12bc357d38.jpg%21large


至此,我们完成了从创建Action到产生效果的全部过程。
右键菜单运行action火线插件有一种场景,就是选中project或单个文件点击右键菜单FireLine -> Run来执行项目扫描,如何实现这个场景?大家应该注意到此时Run事件是在FireLine菜单项下了。
很简单,打开plugin.xml在Actions节点中添加如下代码:

https://testerhome.com/uploads/photo/2017/a0af6b04-4a1a-42a9-b1a8-26dec51eedf1.jpg%21large


在id为“com.qtest.MainMenu”,文本为“Sample” 的group中增加名为“ShowMeTheMoney”的Action,运行一下就出现下图的效果:

https://testerhome.com/uploads/photo/2017/95fb54a9-d533-4156-82a9-43165e95b448.png%21large


点击“ShowMeTheMoney”运行效果如同Tools中一样,此时Tools列表中依然存在这个Action选项。如果我想给action加个红心icon,可以在Action节点中增加icon属性,比如icon="/resources/icons/Heart_16px.png",运行后的效果如下:

https://testerhome.com/uploads/photo/2017/3d7c35ce-bdff-40d1-83dc-495283f192ed.png%21large


打包&上传仓库
[*]导出插件安装包选择插件工程,单击右键,选最底下的选项,如下图:

https://testerhome.com/uploads/photo/2017/cd344401-df39-4217-a0b3-e18b4ed39f07.jpg%21large


完成后会在当前工程目录下产生一个jar(或zip)文件,就是可安装的AS插件。安装方式是File -> settings -> plugin -> Install plugin from disk,选中刚刚生成的.jar文件安装后,重启Android Studio即可。

https://testerhome.com/uploads/photo/2017/5f588595-a127-489f-8d54-7fae68e97435.png%21large



[*]上传官方仓库

[*]打开官方网站:https://plugins.jetbrains.com/
[*]注册jetbrans账户,并登录
[*]点击右上角的“UPLOAD PLUGIN”
[*]根据提示一步一步选择

[*]CATEGORY选择“Administration Tools”
[*]点击“选择文件”上传jar(zip)包
[*]点击上传,成功后得到提示信息,等待审核即可

https://testerhome.com/uploads/photo/2017/47a2e63f-e0d8-47d7-8040-a728729baea8.png%21large


注意1:第一次上传插件要有英文描述,否则会不能通过审核。
   注意2:AS插件想要在官方仓库被找到,切记要在plugin.xml中把节点的注释去掉,否则默认只能在Intellij IDEA的仓库中找到,我就遇到这个坑。

https://testerhome.com/uploads/photo/2017/41996caa-d60e-42e4-93b2-163b3c224099.png%21large


lsekfe 发表于 2017-6-20 10:02:35

全面的一篇文章。

草帽路飞UU 发表于 2017-6-20 10:03:29

厉害,学习了!

乐哈哈yoyo 发表于 2017-6-20 10:05:11

草帽路飞UU 发表于 2017-6-20 10:03
厉害,学习了!

:)

乐哈哈yoyo 发表于 2017-6-20 10:06:04

lsekfe 发表于 2017-6-20 10:02
全面的一篇文章。

对大家有帮助就行!
页: [1]
查看完整版本: 手把手教你 Android Studio 插件从开发到发布官方