自己编写Android Studio插件 别停留在用的程度了(转载)
转自:自己编写Android Studio插件 别停留在用的程度了
1概述
相信大家在使用Android Studio的时候,或多或少的会使用一些插件,适当的配合插件可以帮助我们提升一定的开发效率,更加快乐。例如:
https://github.com/zzz40500/GsonFormat 可以帮助我们从Gson转化为实体类
https://github.com/avast/android-butterknife-zelezny 可以帮助我们更加方便的使用butterknife
https://github.com/Skykai521/ECTranslation 可以帮助在IDE里面完成英文->中文的翻译
有句话叫做授人以鱼不如授人以渔,不能一直跟随着别人的脚步去使用插件了,有必要去学习编写插件,当自己有好的创意的时候,就可以自己实现了。So,本文的内容是:
自己编写一个Android Studio插件
ok,其实编写插件并不难,官方也有详细的文档,所以你也可以选择直接阅读下文学习:
http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started.html
为了文章有一定的流畅性,决定以ECTranslation作为编写Android Studio插件的例子。
我为什么选这个呢?因为创意好,实用并且代码简单。
贴一个今天这个插件的最终效果图:
注:效果与ECTranslation基本一致,本文仅用作学习,不造轮子,如果需要使用,直接使用ECTranslation即可。
2准备工作
首先需要安装IntelliJ IDEA
下载网址:https://www.jetbrains.com/idea/
下载好就可以了~~
然后安装,运行,点击create New Project:
按照上图进行选择,如果没有SDK,则点击New新建一个即可。
然后点击Next,输入项目名称选择位置,就可以点击finish了。
项目的结构如下:
src目录下主要用于存放我们编写的代码。
这样准备工作就结束了~~
3编码
3.1 关键知识
编码实际上核心的一个类叫做AnAction,可以直接选择NEW->Action,如下图:
然后填写一些相关信息:
需要填写的属性如下:
ActionID:代表该Action的唯一的ID,一般的格式为:pluginName.ID
ClassName:类名
Name:就是最终插件在菜单上的名称
Description:对这个Action的描述信息
然后往下,选择这个Action即将存在的位置:
我们选择的是EditMenu,右侧选择为first,即EditMenu下的第一个,效果如图:
再往下就是制定快捷键了~~
都填写完成就可以点击OK了。
点击ok之后,可以看到为我们生成了下类:
此外我们刚才填写的信息,也在plugin.xml中完成了注册,大家可以进去看一眼,actions的标签中,
当我们点击菜单的时候,就回触发`actionPerformed()`方法。
那么这么看,我们在这个方法中只要完成三件事:
获得当前选中的单词
调用相关API得到单词的意思通过一个类似于PopupWindow来显示
当然,为了尽快的测试,你可以先在里面弹一个对话框,例如如下:
预期效果是点击Tranlate菜单,或者按快捷键会弹出一个提示对话框。
那么点击Run:
然后它会默认启动一个新的IntelliJ IDEA的界面,你可以随便新建一个项目,进入以后,你会发现Edit下多了一个Translate菜单,点击即可弹出我们设定的对话框:
ok,测试通过就放心了~
继续刚才的功能性的API:
1. 获得当前选中的单词
2. 调用相关API得到单词的意思
3. 通过一个类似于PopupWindow来显示
3.2 获得选中的单词
是不是觉得API很陌生,恩,我也觉得很陌生,关于API这里介绍其实没什么意义,本文主要目的是让大家对自定义插件有个类helloworld的认识,至于插件里面的代码涉及到的API等到大家需要编写插件的时候,再详细学习就好了,现在就不要浪费精力记忆这些东西了。
上面的代码就是获得选中的文本,通过一个Editor,然后拿到SelectionModel,再拿到selectedText,从字面上还是蛮好理解的。
拿到选中的文本之后,应该就是去查询该单词的意思了,查询呢,ECTranslation用的是youdao的Open SDK,其实也很简单,就是拼接一个url,然后等着解析返回数据就好了。
3.3 调用相关API拿到单词的意思
有道API的地址:
http://fanyi.youdao.com/openapi?path=data-mode
大家如果想要做单词翻译,可以看下,非常简单。
涉及到的代码:
HttpUtils就不贴了,就是直接开了个线程,通过HttpUrlConnection去访问网络,大家的项目中或者通过搜索引擎,代码一搜一堆。
baseUrl就是有道的url,加上我们选中的单词就是完整的url了,然后通过http访问,callback回调出返回的字符串,这里返回的是json类型的字符串。
baseUrl如下:
http://fanyi.youdao.com/openapi.do?keyfrom=Skykai521&key=977124034&type=data&doctype=json&version=1.1&q=name
我们根据返回的json字符串生成了一个类Translation;
然后通过Gson转化为Translation对象。
ps:拿着上面的baseUrl后面跟一个任何单词,直接访问浏览器就能看到返回的json数据了,这里大家天天写接口,类似的步骤比我肯定还熟悉。
好了,有了返回的数据以后,直接通过一个类似popupWindow展现即可。
3.4 通过一个类似popupWindow显示
涉及到的代码:
这个API,恩,我copy的源码,依然是不求记住,知道这有个类似的功能即可。
简单看一下,是通过创建一个JBPopupFactory,然后通过它创建一个HtmlTextBalloonBuilder,通过这个builder去设置各种参数,最后show。
ok,对于一个入门的例子,不要太强求对插件中这些API的掌握,还是那句话,等需要写了再去查,需要什么功能,哪怕到对应的插件中去copy源码都可以,当然也有文档:
http://www.jetbrains.org/intellij/sdk/docs/tutorials.html
有兴趣的可以整理各种类型的插件,比如弹出popupWindow,生成代码,生成文件类别的,然后对相关的API进行收集与整理。
这样代码写完了,先测试一下,点击RUN,然后看效果~
我们这里肯定是测试没问题的,效果图就是开始的那个gif.
如果没有问题,就可以去部署和发布我们的插件给别人去使用了。
这两部也非常简单。
4部署插件 4.1填写插件相关信息
打开项目文件的plugin.xml,如下图:
在里面填写id,name,version等。。。记得随便填一下~
然后,点击build->prepare plugin...,如下图:
会在项目的根目录生成一个jar,如图:
这个jar就可以用于安装了。
4.2 安装插件
打开Andorid Studio,选择Preferences -> Plugins -> Install plugin from disk,选择我们生成的jar即可,如图:
点击安装,然后重启即可。
好了,重启完成就可以在EDIT下看到Translate菜单了,选中单词,点击菜单或者快捷键都能实现翻译了。
如果你有兴趣,赶紧编写一个插件自己玩吧。
当然,还可以把我们的插件发布到仓库,支持在plugin中搜索安装,参考:
http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/publishing_plugin.html
就是注册账号,提交jar,填写信息,等着审核就可以了。
5总结
终于到了总结的环节,这么长的文章其实编写插件总结起来就几句话。
1. 下载Intellij IDEA,新建一个Intellij IDEA plugin的项目
2. 然后在里面new Action以及编写API
3. 点击prepare plugin生成jar,这个jar就可以用来安装了。
恩,就是这么简单,实践起来会比较麻烦一点,等成功以后,回过头来总结,发现步骤其实就那么几个步骤~~对于实际的Action相关的API,等你在编写相关插件的时候,参考别的类似插件,查看官方文档都可以。
自己编写Android Studio插件 别停留在用的程度了(转载)的更多相关文章
- 8 个最优秀的 Android Studio 插件
Android Studio是目前Google官方设计的用于原生Android应用程序开发的IDE.基于JetBrains的IntelliJ IDEA,这是Google I/O 2013第一个宣布的作 ...
- [精品推荐]Android Studio插件整理
GOOD 现在Android的开发者基本上都使用Android Studio进行开发(如果你还在使用eclipse那也行,毕竟你乐意怎么样都行).使用好Android Studio插件能大量的减少我们 ...
- 优秀的 Android Studio 插件
转自:http://www.codeceo.com/article/8-android-studio-plugins.html Android Studio是目前Google官方设计的用于原生Andr ...
- 最完整Android Studio插件整理 (转)
转自:http://blog.csdn.net/alpha58/article/details/62881144 现在Android的开发者基本上都使用android Studio进行开发(如果你还在 ...
- Android Studio插件:GsonFromat
这个Android Studio插件可以根据JSONObject格式的字符串,自动生成实体类参数. 具体见:https://github.com/zzz40500/GsonFormat
- 推荐几款实用的Android Studio 插件
推荐几款实用的Android Studio 插件 泡在网上的日子 发表于 2015-10-09 10:47 第 17453 次阅读 插件,Android Studio 10 编辑推荐:稀土掘金,这是一 ...
- android studio 插件
引用于:http://www.zhihu.com/question/28026027 adb-idea 支持直接在AS面板中进行ADB操作,个人觉得太实用,上面有哥们已提及,这里再介绍下: Unins ...
- 更新日志 - fir.im 回归,上线 Android Studio 插件
上周 fir.im 经历了一场前所未有的挑战,因为自查应用网站暂停,在事情发生4天内我们完成了自查,fir.im 正式回归.煎熬的 98 个小时,感谢开发者与用户对我们的信任和支持. 使用注意: 禁止 ...
- IDEA插件(Android Studio插件)开发示例代码及bug解决
IDEA插件(Android Studio插件)开发示例代码及bug解决 代码在actionPerformed方法中,有个AnActionEvent e 插件开发就是要求我们复写上述的这个方法即可,在 ...
随机推荐
- JQuery的get、post和ajax方法的使用
在JQuery中可以使用get,post和ajax方法给服务器端传递数据 get方法的使用(customForGet.js文件): function verify(){ //1.获取文本框的数据 // ...
- PHP #2003 - 服务器没有响应怎么办
1 出现这个问题的时候,首先可以肯定Apache服务器没有问题,因为如果Apache服务器有问题,则根本登不上phpMyadmin,如果你能登上localhost则说明Apache服务器没问题. 2 ...
- windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流【转】
https://github.com/illuspas/nginx-rtmp-win32 http://bashell.sinaapp.com/archives/build-nginx-rtmp-mo ...
- Android 不同View ID相同
转自:http://blog.csdn.net/program035/article/details/6905045 今天在写一段代码是,两个Activity的Button设置了相同的ID,竟然没有报 ...
- Mybatis学习记录(六)--开发中的小问题
近期開始做项目,期间遇到一些小问题,开此贴记录一下 1.关于order by 今天写一个sql查询语句,用了order by可是一直没效果,后来才发现用了#{}取值,mybatis使用这个的话对于St ...
- Node.js开发入门—HelloWorld再分析
在Node.js开发入门(1)我们用http模块实现了一个简单的HelloWorld站点,这次我们再来细致分析下代码.了解很多其它的细节. 先看看http版本号的HelloWorld代码: 代码就是这 ...
- [1-1] 把时间当做朋友(李笑来)Chapter 1 【心智的力量】 摘录
今天开了读书笔记这一专题,主要是对自己今后读的书有一个小小的记录,也为解决自己读书多年的存在的一些习惯的问题. 打小就喜欢书,可能最早的书是家人买的看图识动物.还记得七八岁时见书摊上的书时赖着不走央求 ...
- Unable to locate package错误
W: GPG error: http://nginx.org precise Release: The following signatures couldn't be verified becaus ...
- Linux命令-网络命令:setup
setup 进入设置网络信息的界面 上图中选“网络配置”进入设置网络信息 上图中选“设备配置”进行配置IP地址,下图显示网卡信息 上图中,选择“eth0”回车进入设置eth0网卡信息界面 上图中选择“ ...
- java通过CLASSPATH读取包内文件
读取包内文件,使用的路径一定是相对的classpath路径,比如a,位于包内,此时可以创建读取a的字节流:InputStream in = ReadFile.class.getResourceAsSt ...