目录
- 1. 前期准备
- 2. 创建项目
- 2.1 步骤
- 2.1 可能出现的问题
- 3. 项目文件介绍
- 3.1 plugin.xml
- 2.2 build.gradle
- 4. 开始开发
- 4.1 Action 动作
- 4.1.1 自定义Action
- 4.1.2 注册自定义Action
- 4.1.3 Action显示效果
- 4.2 自定义显示界面
- 4.2.1 自定义DialogWrapper
- 4.2.2 编写Swing GUI
- 4.2.3 完成自定义显示界面
- 4.2.4 问题点解决
- 5. 导出插件
1. 前期准备
Android Studio是基于IntelliJ Platform平台的,开发插件需要下载IntelliJ IEDA,本文并不介绍开发环境的搭建与配置,开发插件前需要准备如下内容。
- IntelliJ IEDA
- Android Studio
- Java、Kotlin
文章参考资料:官方文档
2. 创建项目
2.1 步骤
File -> New -> Project -> Gradle -> 选择支持内容 -> Next -> 填写项目信息 -> Finish
2.1 可能出现的问题
可能会出现 Java heap space 的错误,程序超过了JVM堆设置的最大值。
A problem occurred configuring root project 'xxx'.
> A build operation failed.
Java heap space
> Java heap space
解决方式
在Project 的 gradle.properties文件中添加代码
org.gradle.jvmargs=-Xmx4096m
- -Xms:初始值
- -Xmx:最大值
- -Xmn:最小值
3. 项目文件介绍
3.1 plugin.xml
~/src/main/resources/META-INF/plugin.xml 是插件的配置文件。
官方介绍
Plugin Configuration File - plugin.xml
标签的含义
- < id >:插件ID,唯一标志。
- < name >:插件名称。
- < vendor >:插件发布者的相关信息。
- < description >:插件的描述内容。
- < depends >:添加其它插件或模块的依赖。
- < extensions >:注册插件扩展。
- < actions >:注册插件操作动作,查看4.1。
2.2 build.gradle
由于是采用Gradle构建的项目,所以此插件项目中也有 build.gradle 文件。
可以看到项目中引入了一个插件 gradle-intellij-plugin,它是用于构建 IntelliJ IDEA插件的插件。可以通过该插件,对我们开发的插件进行一些配置。
intellij {
// 对应的IDEA版本号
version '2019.1'
}
runIde {
// 默认运行插件是启动IntelliJ IDEA,如果想直接启动Android Studio 指定运行的ide路径。
// windows
ideDirectory 'C:/Program Files/Android/Android Studio'
// // macOS
// ideDirectory '/Applications/Android Studio.app/Contents'
}
IntelliJ IDEA 版本号:IntelliJ IDEA Build Number Ranges Android Studio对应的 IDEA版本号:mac 在 Android Studio About中查看,windows 在 help/about中查看。
更多配置信息请查看: gradle-intellij-plugin
4. 开始开发
4.1 Action 动作
插件可以通过注册Action 在IDE菜单和工具栏中添加操作,其实就是IDE中添加了一个按钮,然后响应按钮点击事件。例如Android Studio中的Build - Clean Project 按钮就是一个Action。
4.1.1 自定义Action
在 main 文件夹下新建kotlin文件夹(若采用java开发,则创建java文件夹),创建ADBAction类。
class ADBAction : AnAction() {
//用户执行操作时会调用此方法。
override fun actionPerformed(e: AnActionEvent) {
//展示一个信息弹窗
Messages.showMessageDialog("adb message", "adb title", Messages.getInformationIcon() )
}
}
4.1.2 注册自定义Action
鼠标选中在自定义Action类,使用快捷键ALT + Enter(快捷键可能有所不同)注册Action。
- Action ID :Action 唯一标志
- Class Name:Action对应的类名.
- Name :显示名称
- Description:对Action的描述
- Add to Group:选择添加到哪个组里面
- Anchor:指定放置位置
完成后可以看到 plugin.xml文件,< actions > 标签下多了如下内容
<actions>
<action id="ADBAction" class="ADBAction" text="ADB Action" description="ADB action">
<add-to-group group-id="ToolsMenu" anchor="last"/>
<keyboard-shortcut keymap="$default" first-keystroke="alt 1" second-keystroke="alt 2"/>
</action>
</actions>
4.1.3 Action显示效果
点击运行按钮,运行插件程序查看效果。
4.2 自定义显示界面
4.2.1 自定义DialogWrapper
上文中的对话框为自带的Dialog样式,如果需要修改显示画面,就需要进行自定义。
kotlin文件夹下,新建MessageDialog 继承于DialogWrapper。
class MessageDialog : DialogWrapper(true) {
override fun createCenterPanel(): JComponent {
TODO("Not yet implemented")
}
}
可以看到,需要返回一个 JComponent 对象,插件的显示界面就是由Java Swing开发。
4.2.2 编写Swing GUI
在 main 文件夹下新建java文件夹,然后右键 New -> Swing UI Designer -> GUI Form,新建MyMessageDialog,并添加一些控件。
此时 MyMessageDialog.java 中的代码如下
public class MyMessageDialog {
public JTextField textField1;
public JTextField textField2;
public JPanel root;
}
4.2.3 完成自定义显示界面
修改 MessageDialog.kt 中的代码。
class MessageDialog(
private val text1: String,
private val text2: String
) : DialogWrapper(true) {
init {
//Dialog的一些初始化操作
init()
}
override fun createCenterPanel(): JComponent {
return MyMessageDialog().apply {
//修改UI布局内容
textField1.text = text1
textField2.text = text2
}.root
}
}
ADBAction 中修改调用方式
class ADBAction : AnAction() {
//用户执行操作时会调用此方法。
override fun actionPerformed(e: AnActionEvent) {
//展示一个自定义对话框
MessageDialog("adb message1", "adb message2").show()
}
}
显示效果
4.2.4 问题点解决
运行时发现,运行在 IntelliJ IDEA 中时插件可以正常运行,但运行在Android Studio 中时,出现如下错误。
java.lang.NullPointerException
com.android.tools.idea.diagnostics.AndroidStudioSystemHealthMonitor.getActionName()
解决方式,类不能直接放在 java 或 kotlin 包下,还得自己在新建一个包,最终文件结构如下。
5. 导出插件
正式发布可查看官方文档:使用Gradle发布插件 如果只是单纯的想导出插件,可以进行如下操作
gradlew buildPlugin
/build/distributions 中可查看到插件.zip文件,然后在 Android Studio -> File -> Setting -> Plugins -> Install Plugin from Disk 中安装插件。