写了个类似Butter Knife
的开发库,但是并没有与其配套的AndroidStudio插件,抽时间研究了以下IDEA的api文档,撸了一个对应的插件,源码在这里
之前写的一些小demo可以看看这篇文章
初步编写IDEA\AndroidStudio翻译插件
以及另外一个插件项目
https://github.com/huangyuanlove/VariableNameStyleTransfer
本项目代码参考 android-butterknife-zelezny
所用到的知识点:
- 查找文件
- 解析xml
- 写文件
IDEA插件开发文档:https://jetbrains.org/intellij/sdk/docs/intro/welcome.html
创建项目
官方推荐创建gradle项目,这里贴个图,创建过程按照官网叙述的创建就好
https://jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html
这里说明一下,如果想要在AndroidStudio中进行debug,阅读一下这个
https://jetbrains.org/intellij/sdk/docs/products/android_studio.html
也就是在项目根目录的的build.gradle
中配置 intellij
和runIde
,具体含义可在网页中找到,这里不再赘述
// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
version '201.8743.12'
type 'IC'
plugins = ['android', 'java']
}
runIde {
// Absolute path to installed target 3.5 Android Studio to use as IDE Development Instance
// The "Contents" directory is macOS specific.
// ideDirectory '/Applications/Android Studio.app/Contents' //for mac
// ideDirectory '/home/huangyuan/androidStudio' //for linux
ideDirectory 'G:\\AndroidStudio' //for window
}
创建类
创建一个继承AnAction 的类,这里创建的方式有两种,一个是直接创建java类,然后再去注册;另外一个就是通过想到直接创建(就像我们创建Activity一样);
具体可以看这里 https://jetbrains.org/intellij/sdk/docs/tutorials/action_system/working_with_custom_actions.html
这里我们需要解析layout文件(xml文件)并且还要写入文件,所以就直接继承BaseGenerateAction
,重写其中的两个方法
@Override
public void update(@NotNull AnActionEvent e) {
// Using the event, evaluate the context, and enable or disable the action.
e.getPresentation().setEnabledAndVisible(e.getProject() != null);
}
@Override
public void actionPerformed(@NotNull AnActionEvent event) {
// Using the event, implement an action. For example, create and show a dialog.
}
当工程处于indexing的时候,我们不想让插件生效,可以实现DumbAware
接口,继续向actionPerformed
方法中添加逻辑