一、需要在Intellij IDEA中新建一个plugin项目
二、其实是新建一个Action
这里有两种方式:
一种是新建一个java/kotlin类继承自AnAction。
第二种是新建一个PluginDev中的Action,他会帮你配制好下面的plugin.xml中的action配置。
我这里选择的是第一种。
三、Action中实现插件功能
这里我们实现一个简单的插件,分别是 MyNotificationAction弹出一个弹窗,还有MyDialogAction弹出一个选择框,如下所示:
package com.example.plugin;
import com.intellij.notification.NotificationDisplayType;
import com.intellij.notification.NotificationGroup;
import com.intellij.notification.NotificationType;
import com.intellij.notification.impl.NotificationGroupEP;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import org.jetbrains.annotations.NotNull;
public class MyNotificationAction extends AnAction {
/**
* 所有的用户事件,都会走到这里面
* @param anActionEvent
*/
@Override
public void actionPerformed(@NotNull AnActionEvent anActionEvent) {
Project project = anActionEvent.getData(PlatformDataKeys.PROJECT);
Messages.showMessageDialog(project,"Hello World!","这是弹窗",Messages.getInformationIcon());
}
}
package com.example.plugin;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
public class MyDialogAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
MyDialog myDialog = new MyDialog();
myDialog.setVisible(true);
}
}
这里用到的Dialog组件,通过SwingUi —— createDialog生成,
可以通过拖动的方式编辑Dialog弹窗的内容,比如这里如下所示:
四、其次是需要配置
这里主要配置的是这两个地方:
1、一个是plugin.xml,用于配置插件依赖关系,还有最终展示的位置入口等。
2、另一个是build.gradle文件,用于配置最终插件之一的IDE版本,这里要注意,需要根据android studio中的版本来改配置,否则,可能出现不兼容的问题。
分别如下:
1、plugin.xml
<actions>
<group id="MyCustomPlugin.TopMenu"
text="AndroidVille"
description="This is a plugin to generate a simple notification">
<add-to-group group-id="GenerateGroup" anchor="last"/>
<action id="MyCustomAction"
class="com.example.plugin.MyNotificationAction"
text="生成新类和构造方法"
description="Click to display notification"/>
</group>
<action id="com.gpc.test" class="com.example.plugin.MyDialogAction" text="测试弹窗"
description="这是一个action">
<add-to-group group-id="HelpMenu" anchor="first"/>
</action>
</actions>
这里<action>标签中的text就是插件在IDE中展示的title,对应的类就是我们创建的MyNoticationAction,这里面实现了点击后的所有逻辑和功能。而我们的这个插件title在哪里展示呢?答案就是<add-to-group>标签中的group-id,这里我们选择在GenerateGroup中加入我们的插件Action入口,anchor代表的是加入的位置是最后还是最前,我们这里是最后。这里对应的就是IDE中的Generate入口。
2、build.gradle
其中的patchPluginXml中的sinceBuild代表支持的IDE最低版本,需要和你Android Studio中的版本对应,如果高于了Android Studio的版本,则后面安装编译出来的插件的时候,会提示你不兼容。
patchPluginXml {
sinceBuild.set("203")
untilBuild.set("222.*")
}
plugins {
id("java")
id("org.jetbrains.intellij") version "1.5.2"
}
group = "com.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
// Configure Gradle IntelliJ Plugin - read more: https://github.com/JetBrains/gradle-intellij-plugin
intellij {
version.set("2021.2")
type.set("IC") // Target IDE Platform
plugins.set(listOf(/* Plugin Dependencies */))
}
tasks {
// Set the JVM compatibility versions
withType<JavaCompile> {
sourceCompatibility = "11"
targetCompatibility = "11"
}
patchPluginXml {
sinceBuild.set("203")
untilBuild.set("222.*")
}
signPlugin {
certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))
privateKey.set(System.getenv("PRIVATE_KEY"))
password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
}
publishPlugin {
token.set(System.getenv("PUBLISH_TOKEN"))
}
}
五、最后是编译发布jar
这个jar就是android studio可以使用plugin的版本,可以直接通过gradle中buildPlugin来编译出jar,然后在android studio中安装即可。
最终运行效果第二个Action为:
第一个Action