前言
在日常开发中,绝大多数的工作都是开发Creator,创建UI,初始化UI,绑定数据,重复的创建ViewHolder类,findViewById代码,能不能将这些重复工作自动化呢,在看了android-butterknife-zelezny之后,我找到了灵感,使用As插件就能完成这些琐碎重复的事情啊。
API说明
Logger
和Android的Log类非常相似,包含info函数,error函数,warn函数等等
BaseGenerateAction
- isValidForClass
@Overrideprotected boolean isValidForClass(PsiClass targetClass) {
return super.isValidForClass(targetClass);
}
用户调用该插件的时候,光标所在的类,该函数主要是让开发者验证操作
- isValidForFile
// project 即为当前的工程
// editor 没有什么用
// file: 当前操作的文件
@Override
protected boolean isValidForFile(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
return super.isValidForFile(project, editor, file);
}
用户调用该插件的时候,光标所在的类,该函数主要是让开发者验证操作
- actionPerformed
响应用户的操作
Psi文件
PsiElement
类似与xml中的Element概念,AS将所有的代码语法都进行了抽象化,PsiElement是下面的PsiClass,PsiCodeBlock等等的父类
PsiField
代表类中的字段属性
PsiClass
代表一个类
PsiFile
代表一个文件
PsiCodeBlock
比如有一个函数,他的函数体就是PsiCodeBlock
PsiStatement
函数中的每一行代码就是一个PsiStatement
PsiMethod
代表一个方法
PsiElementFactory
一个用来创建上述PsiElement的工厂
BaseGenerateAction
继承自AnAction,提供了isValidForClass, isValidForFile , actionPerformed
等函数
FAQ
1. 在哪里可以看到插件开发所用到的api的文档啊
2. 导入已有的插件工程
导入plugin工程之后,有可能会无法编译,很多类都找不到,其实只要设置该Module的sdk就可以了,new sdk,选择idea安装目录 ,具体的可以参照这篇文章
3. 如何创建一个新的plugin工程
4. 如何将插件编译成jar包提供给别人安装
使用『prepare。。。。』就可以将plugin工程打成jar包,jar包的位置在工程的主目录下, 然后在Android studio中选择install from disk安装就可以了
5. 如何打印日志,查看日志
- 创建log对象
protected static final Logger log = Logger.getInstance(xxx.class); - 点击『show
log in finder』,会打开一个目录,里面有很多的log文件,你在plugin工程中使用Logger.info打印的日志都会存储在该log文件中,打开即可
6. 如何配置Action
什么是Action?
- Action就是插件配置的,用户可以选择的操作
- Action是一个插件的入口,类似于Android中的MainActivity
在下图的plugin.xml中,可以配置Action
Incorrect statement 异常
记住,在AS中 ,Statement仅仅代表一行代码,可能表述不准确,举个例子
int x = 10; 这是一个PsiStatement
int x = 10;
int y = 10;
这就不是一个PsiStatement了