如何写一个Andorid下苹果关闭自动更新插件的插件

39560人阅读
【Android微知识点】(3)
本文为原创,授权公众号:独家代理原创发布。
转载请标明出处:
相信大家在使用Android Studio的时候,或多或少的会使用一些插件,适当的配合插件可以帮助我们提升一定的开发效率,更加快乐。例如:
可以帮助我们从Gson转化为实体类
可以帮助我们更加方便的使用butterknife
可以帮助在IDE里面完成英文-&中文的翻译
有句话叫做授人以鱼不如授人以渔,不能一直跟随着别人的脚步去使用插件了,有必要去学习编写插件,当自己有好的创意的时候,就可以自己实现了。So,本文的内容是:
自己编写一个Android Studio插件
ok,其实编写插件并不难,官方也有详细的文档,所以你也可以选择直接阅读下文学习:
为了文章有一定的流畅性,决定以ECTranslation作为编写Android Studio插件的例子。
我为什么选这个呢?因为创意好,实用并且代码简单。
贴一个今天这个插件的最终效果图:
注:效果与ECTranslation基本一致,本文仅用作学习,不造轮子,如果需要使用,直接使用ECTranslation即可。
二、准备工作
首先需要安装IntelliJ IDEA
下载网址:
下载好就可以了~~
然后安装,运行,点击create New Project:
按照上图进行选择,如果没有SDK,则点击New新建一个即可。
然后点击Next,输入项目名称选择位置,就可以点击finish了。
项目的结构如下:
src目录下主要用于存放我们编写的代码。
这样准备工作就结束了~~
(1) 关键知识
编码实际上核心的一个类叫做AnAction,可以直接选择NEW-&Action,如下图:
然后填写一些相关信息:
需要填写的属性如下:
ActionID:代表该Action的唯一的ID,一般的格式为:pluginName.ID
ClassName:类名
Name:就是最终插件在菜单上的名称
Description:对这个Action的描述信息
然后往下,选择这个Action即将存在的位置:
我们选择的是EditMenu,右侧选择为first,即EditMenu下的第一个,效果如图:
再往下就是制定快捷键了~~
都填写完成就可以点击OK了。
点击ok之后,可以看到为我们生成了下类:
public class TranslateAction extends AnAction {
public void actionPerformed(AnActionEvent e) {
此外我们刚才填写的信息,也在plugin.xml中完成了注册,大家可以进去看一眼,actions的标签中,
当我们点击菜单的时候,就回触发actionPerformed()方法。
那么这么看,我们在这个方法中只要完成三件事:
获得当前选中的单词
调用相关API得到单词的意思
通过一个类似于PopupWindow来显示
当然,为了尽快的测试,你可以先在里面弹一个对话框,例如如下:
public void actionPerformed(AnActionEvent event) {
Messages.showMessageDialog("Hello World !", "Information", Messages.getInformationIcon());
预期效果是点击Tranlate菜单,或者按快捷键会弹出一个提示对话框。
那么点击Run:
然后它会默认启动一个新的IntelliJ IDEA的界面,你可以随便新建一个项目,进入以后,你会发现Edit下多了一个Translate菜单,点击即可弹出我们设定的对话框:
ok,测试通过就放心了~
获得当前选中的单词
调用相关API得到单词的意思
通过一个类似于PopupWindow来显示
剩下的就是功能性的API了~
(2) 获得当前选中的单词
public void actionPerformed(AnActionEvent e) {
final Editor mEditor = e.getData(PlatformDataKeys.EDITOR);
if (null == mEditor) {
SelectionModel model = mEditor.getSelectionModel();
final String selectedText = model.getSelectedText();
if (TextUtils.isEmpty(selectedText)) {
是不是觉得API很陌生,恩,我也觉得很陌生,关于API这里介绍其实没什么意义,本文主要目的是让大家对自定义插件有个类helloworld的认识,至于插件里面的代码涉及到的API等到大家需要编写插件的时候,再详细学习就好了,现在就不要浪费精力记忆这些东西了。
上面的代码就是获得选中的文本,通过一个Editor,然后拿到SelectionModel,再拿到selectedText,从字面上还是蛮好理解的。
拿到选中的文本之后,应该就是去查询该单词的意思了,查询呢,ECTranslation用的是youdao的Open SDK,其实也很简单,就是拼接一个url,然后等着解析返回数据就好了。
(3)调用相关API得到单词的意思
有道API的地址:
大家如果想要做单词翻译,可以看下,非常简单。
涉及到的代码:
String baseUrl = "http://fanyi.youdao.com/openapi.do?keyfrom=Skykai521&key=&type=data&doctype=json&version=1.1&q=";
HttpUtils.doGetAsyn(baseUrl + selectedText, new HttpUtils.CallBack() {
public void onRequestComplete(String result) {
Translation translation = gson.fromJson(result, Translation.class);
showPopupBalloon(mEditor, translation.toString());
HttpUtils就不贴了,就是直接开了个线程,通过HttpUrlConnection去访问网络,大家的项目中或者通过搜索引擎,代码一搜一堆。
baseUrl就是有道的url,加上我们选中的单词就是完整的url了,然后通过http访问,callback回调出返回的字符串,这里返回的是json类型的字符串。
baseUri是:
我们根据返回的json字符串生成了一个类Translation;
然后通过Gson转化为Translation对象。
ps:拿着上面的baseUrl后面跟一个任何单词,直接访问浏览器就能看到返回的json数据了,这里大家天天写接口,类似的步骤比我肯定还熟悉。
好了,有了返回的数据以后,直接通过一个类似popupWindow展现即可。
(4)通过一个类似于PopupWindow来显示
涉及到的代码:
private void showPopupBalloon(final Editor editor, final String result) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
public void run() {
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(editor), Balloon.Position.below);
这个API,恩,我copy的源码,依然是不求记住,知道这有个类似的功能即可。
简单看一下,是通过创建一个JBPopupFactory,然后通过它创建一个HtmlTextBalloonBuilder,通过这个builder去设置各种参数,最后show。
ok,对于一个入门的例子,不要太强求对插件中这些API的掌握,还是那句话,等需要写了再去查,需要什么功能,哪怕到对应的插件中去copy源码都可以,当然也有文档:
有兴趣的可以整理各种类型的插件,比如弹出popupWindow,生成代码,生成文件类别的,然后对相关的API进行收集与整理。
这样代码写完了,先测试一下,点击RUN,然后看效果~
我们这里肯定是测试没问题的,效果图就是开始的那个gif.
如果没有问题,就可以去部署和发布我们的插件给别人去使用了。
这两部也非常简单。
四、部署插件
(1)填写插件相关信息
打开项目文件的plugin.xml,如下图:
在里面填写id,name,version等。。。记得随便填一下~
然后,点击build-&prepare plugin…,如下图:
会在项目的根目录生成一个jar,如图:
这个jar就可以用于安装了。
(2)安装插件
打开Andorid Studio,选择Preferences -& Plugins -& Install plugin from disk,选择我们生成的jar即可,如图:
点击安装,然后重启即可。
好了,重启完成就可以在EDIT下看到Translate菜单了,选中单词,点击菜单或者快捷键都能实现翻译了。
如果你有兴趣,赶紧编写一个插件自己玩吧。
当然,还可以把我们的插件发布到仓库,支持在plugin中搜索安装,参考:
就是注册账号,提交jar,填写信息,等着审核就可以了。
终于到了总结的环节,这么长的文章其实编写插件总结起来就几句话。
下载Intellij IDEA,新建一个Intellij IDEA plugin的项目
然后在里面new Action以及编写API
点击prepare plugin生成jar,这个jar就可以用来安装了。
恩,就是这么简单,实践起来会比较麻烦一点,等成功以后,回过头来总结,发现步骤其实就那么几个步骤~~对于实际的Action相关的API,等你在编写相关插件的时候,参考别的类似插件,查看官方文档都可以。
微信公众号:
- 不要错过每一篇干货 - 支持投稿
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
积分:51235
积分:51235
排名:第64名
原创:205篇
评论:15578条
长期为您推荐优秀博文、开源项目、视频等,进入还有好玩的等着你,欢迎扫一扫。
请勿重复加群,Thx
文章:11篇
阅读:242898
文章:10篇
阅读:138855
文章:67篇
阅读:6655375利用 DexClassLoader 实现 Android 插件化,从而达到动态加载
点击广告支持我
我维护的 Android 经验分享的公众号
最新 Android 高薪内推
点击下面广告支持我
站内推荐文章
阿里、滴滴内推,年 40w 以上
那些著名开源库的原理分析
(157,233)(125,770)(109,876)(103,163)(101,712)(96,227)(81,995)(77,530)(76,537)(71,372)
阿里、滴滴内推,年 40w 以上
C 轮融资近 30 亿元理财推荐2293人阅读
Android(22)
在使用Android Studio开发的时候,大部分人都会使用一些插件来提高开发效率,比如:
自动生成注解代码
更方便的进行Android 6.0权限处理
像这样的插件还有很多很多,但我们不能一直停留在用的程度,这样太不符合程序猿的风格了,今天就让我们自己动手来写一个插件,当以后自己有好的想法的时候,也能写一个出色的插件给大家使用。
想到以前写系统原生dialog的时候还要写一大串代码,简直太麻烦,今天就用这个做例子,写一个插件来实现一键生成dialog代码。
注:本文只是为了熟悉Android Studio插件开发,所以用一个比较简单的例子来演示。
2.环境搭建
首先需要安装IntelliJ IDEA
安装完成后,运行起来是这个样子的:
点击Create New Project新建一个Plugin项目,填写项目名称,选择位置就可以点击finish了。
项目结构如下图所示:
src目录下建包,和平时使用Android Studio的方式是一样的。
到这里,环境就搭建成功了(^-^)V
3.编写插件
新建Action
在新建的包下建一个Action类
然后填写一些信息
ActionID:Action唯一的ID,一般的格式为:pluginName.ID
ClassName:类名
Name:插件最终显示在菜单上的名称
Description:对这个Action的描述信息
然后往下,选择插件在菜单中的位置,这里选择的是Code菜单下第一的位置,然后定义一个快捷键。
点击OK,就创建了一个Action类了,
public class CreateDialogAction extends BaseGenerateAction {
public CreateDialogAction() {
super(null);
public CreateDialogAction(CodeInsightActionHandler handler) {
super(handler);
public void actionPerformed(AnActionEvent e) {
注意把继承的AnAction改成BaseGenerateAction,下文需要用到BaseGenerateAction类中的相关方法。
主要实现在类中自动生成代码,首先获取相关的操作类,已在代码中加入注释说明。
public class CreateDialogAction extends BaseGenerateAction {
public CreateDialogAction() {
super(null);
public CreateDialogAction(CodeInsightActionHandler handler) {
super(handler);
public void actionPerformed(AnActionEvent e) {
Project project = e.getData(PlatformDataKeys.PROJECT);
Editor editor = e.getData(PlatformDataKeys.EDITOR);
PsiFile file = PsiUtilBase.getPsiFileInEditor(editor, project);
PsiClass targetClass = getTargetClass(editor, file);
PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
new LayoutCreator(project, targetClass, factory, file).execute();
生成代码,需要继承WriteCommandAction.Simple类,在run方法中写生成代码的逻辑,将生成dialog的代码存入StringBuilder,然后调用targetClass类中的add方法生成代码,最后再导入需要的类。
public class LayoutCreator extends WriteCommandAction.Simple {
private PsiF
private PsiClass targetC
private PsiElementF
public LayoutCreator(Project project, PsiClass targetClass, PsiElementFactory factory, PsiFile... files) {
super(project, files);
this.project =
this.file = files[0];
this.targetClass = targetC
this.factory =
protected void run() throws Throwable {
StringBuilder dialog = new StringBuilder();
dialog.append("public void showDialog(){");
dialog.append("android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder(this);");
dialog.append("builder.setTitle(\"Title\")\n");
dialog.append(".setMessage(\"Dialog content\")\n");
dialog.append(".setPositiveButton(\"OK\", new android.content.DialogInterface.OnClickListener() {\n" +
"@Override\n" +
"public void onClick(DialogInterface dialog, int which) {\n" +
dialog.append(".setNegativeButton(\"Cancel\", new DialogInterface.OnClickListener() {\n" +
"@Override\n" +
"public void onClick(DialogInterface dialog, int which) {\n" +
dialog.append(".show();");
dialog.append("}");
targetClass.add(factory.createMethodFromText(dialog.toString(), targetClass));
JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(project);
styleManager.optimizeImports(file);
styleManager.shortenClassReferences(targetClass);
点击编译器右上角的绿色Run按钮,会重新启动一个新的IntelliJ IDEA的界面,在这里创建一个Android工程,点击Code,会看到Android Dialog选项,看下效果:
OK,到这里我们就成功的创建了一个插件,下面让我们来看看如何来部署插件。
4.部署插件
填写相关信息
打开项目中的plugin.xml文件,填写相关的信息,这些信息会展示在插件库中,如下图所示。
点击Bulid菜单下的Prepare Plugin按钮会在项目的根目录生成jar插件,如下图所示:
打开Andorid Studio,选择File -& Settings -& Plugins -& Install plugin from disk,选择我们生成的jar然后重启即可,如下图所示,红框标记的部分就是我们刚才在plugin.xml文件中填写的信息:
还可以把插件发布到仓库,让其他人也能使用,进入官网,注册账号,提交插件jar包,填写相关信息,等待审核就可以了。
5.遇到的问题
安装插件的时候出现下面的报错,是因为IDEA中jdk的版本是1.8,而我的Android Studio中jdk的版本是1.7导致的,版本统一就好了。
Android Dialog threw an uncaught PluginException.
总结一下之前的步骤:
下载Intellij IDEA,新建一个Intellij Platform Plugin的项目(注意jdk版本的问题,最新的IDEA需要jdk 1.8版本)
在项目中新建一个Action,把继承的AnAction改成BaseGenerateActio
编写API,这个可以参考其他插件的写法
点击Bulid菜单下的Prepare Plugin按钮生成jar,这个jar就可以直接用来安装了
7.写在最后
源码已托管到GitHub上,欢迎Fork,觉得还不错就Start一下吧!
GitHub地址:
欢迎同学们吐槽评论,如果你觉得本篇博客对你有用,那么就留个言或者顶一下吧(^-^)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:110819次
积分:1739
积分:1739
排名:千里之外
原创:51篇
评论:270条
阅读:9295
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'97061人阅读
Android Studio笔记(25)
这个月因为各种事情在忙,包括赶项目,回老家,还有准备旅游的事,所以应该写不了四篇博客了。今天介绍一下关于Android Studio 的几个好用的插件,都是我在用的,它们或能帮你节省时间,或者让你心情愉悦。
还是老话,本文原创,转载请注明在CSDN博客上的出处:
http://blog.csdn.net/maosidiaoxian/article/details/
以下所有插件都可以在Idea的插件库中找到,如果你与我一样在Android Studio中无法搜索到任何插件的话,可以用离线安装的方式,先在IDEA插件的站点(http://plugins.jetbrains.com/category/?idea&category_id=all)上搜索下载,然后在Android Studio 的插件管理中选择 Install plugin from disk。注意,可能需要翻墙才能打开。
1. Android Parcelable code generator
顾名思义,这是个生成实现了Parcelable接口的代码的插件。
在你的类中,按下alt + insert键弹出插入代码的上下文菜单,你会看到在下面有一个Parcelable,如下所示。选择它之后,就会在你的类当中插入实现了Parcelable接口的代码。从此不用再手动写Parcelable代码,感觉怎样呢?
2. AndroidCodeGenerator
它的介绍说是可以生成ViewHolder和findView方法的代码。不过怎么生成findView方法的代码我还没找到,但生成ViewHolder也是挺酷炫的。
在你的Adapter实现类的getView当中,将光标定位到你的布局文件的ID的变量中,按Alt+Insert插件代码,可以看到多了一项Create view holder,如下图。
选择它之后,它会根据布局文件里的声明了id的元素,为你生成对应的ViewHolder代码,如下所示:
public class ViewHolder {
public final TextV
public final ImageV
public final TextV
public final TextV
public final ImageV
public final CircleImageV
public final RelativeL
public final V
public ViewHolder(View root) {
time = (TextView) root.findViewById(R.id.time);
isnew = (ImageView) root.findViewById(R.id.is_new);
username = (TextView) root.findViewById(R.id.username);
department = (TextView) root.findViewById(R.id.department);
enter = (ImageView) root.findViewById(R.id.enter);
avatar = (CircleImageView) root.findViewById(R.id.avatar);
listcontent = (RelativeLayout) root.findViewById(R.id.list_content);
this.root =
很方便吧?
3. Android Layout ID Converter
由于上面的插件当中我没找到生成findView代码的使用方法,于是我又找到了另一个插件来生成这样的代码。
使用方法:在你的布局文件当中右键,在弹出来的菜单当中选择Convert Android layout xml,如下图所示:
然后它会弹出一个面板,如下所示。选择要生成的代码的格式,按OK,这时它已经把生成的代码复制在你的粘贴板中,然后你在使用这个布局文件的Activity或Fragment中,按Ctrl + V 把代码粘贴出来就可以了。
4. SelectorChapek for Android
这是用于生成Selector的插件。你需要在drawable文件夹中右键,在弹出的菜单中选择Generate Android Selectors,如下所示,它就会根据你的几个drawable文件夹里的资源的命名,帮你生成Selector代码。当然,你的资源文件需要根据约定的后缀来命名。比如按下状态为_pressed,正常状态为_normal,不可用状态为_disable,等等。更详细的说明可以看Github上该项目的说明文件,项目地址为:https://github.com/inmite/android-selector-chapek。
5. Sexy Editor
这个可是本文的压轴插件,给你们看一下效果:
感觉码代码顿时有了满满的激情有木有!安装之后会在设置面板的Other Settings多出一个Sexy Editor,其它使用方法不多说,看官方说明或自己摸索。相信在此图激励下,你们很快就会学会怎么用的。
注意:本插件有一个副作用,就是开久了会卡,甚至死掉。笔者台式机,8G内存(永久区只设了三四百M吧),在经常切换打开文件的情况下,会越来越卡,半天时间就可能OOM了。不用这个插件的时候,还没遇到过让IDE OOM的情况。所以自己权衡吧。
以上插件已全部传到CSDN资源上了,地址为:http://download.csdn.net/detail/maosidiaoxian/8583491
如果本文点击量过万或被顶次数破百,请记得通知我分享从搜狗壁纸网站中抓取的三千妹子图。
PS:点击过万了,补上以前从搜狗壁纸中抓的图:http://pan.baidu.com/s/1rqMPS。 ——
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2093320次
积分:14043
积分:14043
排名:第1011名
原创:137篇
译文:88篇
评论:883条
个人博客:
Android高级开发群:
Andriod Studio Tech:
阅读:30337
文章:21篇
阅读:178723
文章:67篇
阅读:151486
文章:29篇
阅读:353380
(2)(4)(4)(7)(1)(5)(1)(2)(8)(1)(1)(2)(6)(1)(1)(4)(1)(4)(4)(2)(5)(6)(1)(1)(4)(4)(4)(9)(4)(4)(1)(9)(13)(21)(5)(5)(4)(14)(4)(7)(7)(6)(2)(4)(1)(8)(8)(3)
微信关注我的公众号

我要回帖

更多关于 苹果关闭自动更新插件 的文章

 

随机推荐