你还在彻彻底底的用别人写好的插件吗,想不想拥有一款属于自己的AS插件,其实写插件特别的简单,只要跟着我的脚步,分分钟写出一款好的插件,心动不如行动,赶紧来写吧。
一、AS常用插件
A8Translate:有毒的翻译插件
MaterialDesignIcon:自动生成常用小图标
CodeGlance:代码快速定位,鸟瞰图
ButterKnife:快速生成控件对象
AndroidSelector:快速生成选择器
JsonFormat:快速生成Bean
RetroLambda:在Java6,7中使用拉姆达表达式
FreeLine:神级编译器,增量编译
...
二、参考网站
三、打造插件
具体如何配置环境,创建项目,运行打包等等,请查看参考网站,这里只讲具体实现。
3.1 大致流程介绍
- 配置开发环境
- 创建一个插件项目
- 构建版本范围
- 创建一个动作意图
- 编写运行插件
- 部署插件
- 配置插件的平台
- 发布插件到插件仓库
3.2 翻译插件实现原理
内部其实很简单,总共包括三个步骤:获取选中单词,联网查询单词,弹框显示结果
-
获取选中单词
// 获取编辑器 Editor editor = e.getData(PlatformDataKeys.EDITOR); if (editor == null) return; // 获取选择模式对象 SelectionModel model = editor.getSelectionModel(); // 选中文字 String selectedText = model.getSelectedText();
联网查询单词
单词的翻译使用的是有道翻译,通过查询返回Json格式的中文结果,然后自己组装一下进行显示。
网络请求使用的是最基本的HttpURLConnection,没有特意做什么优化。
Json使用Gson解析生成JavaBean,然后使用回调来处理请求的结果。
/** 请求网络数据 */ public static void requestNetData(String queryWord, TranslateCallBack callBack) { // TODO 读取本地缓存 try { URL url = new URL(BASE_URL + queryWord); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); conn.setRequestMethod(conn.getRequestMethod()); // 连接成功 if (conn.getResponseCode() == 200) { InputStream ins = conn.getInputStream(); // 获取到Json字符串 String content = StreamUtils.getStringFromStream(ins); if (content != null) { callBack.onSuccess(new Gson().fromJson(content, callBack.mType)); } else { callBack.onFailure(TranslationBean.EMPTY); } } else { callBack.onFailure(conn.getResponseMessage()); } } catch (java.io.IOException e) { e.printStackTrace(); callBack.onFailure(e.getMessage()); } }
弹框显示查询结果(使用了Lambda表达式)
/** 第三步,弹出对话框 */
private void showPopupWindow(final String result) {
ApplicationManager.getApplication().invokeLater(() -> {
JBPopupFactory factory = JBPopupFactory.getInstance();
factory.createHtmlTextBalloonBuilder(result, null, new JBColor(new Color(186, 238, 186), new Color(73, 117, 73)), null)
.setFadeoutTime(5000)
.createBalloon()
.show(factory.guessBestPopupLocation(mEditor), Balloon.Position.below);
});
}
- 写完了实现逻辑,运行后,IDEA会让你新建一个测试插件的项目,随便建立一个项目就好,然后按快捷键就可以显示