Android Studio是基于IntelliJ Platform平台的,开发插件需要下载IntelliJ IEDA,本文并不介绍开发环境的搭建与配置,开发插件前需要准备如下内容。
文章参考资料:官方文档
File -> New -> Project -> Gradle -> 选择支持内容 -> Next -> 填写项目信息 -> Finish
可能会出现 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
~/src/main/resources/META-INF/plugin.xml 是插件的配置文件。
官方介绍
Plugin Configuration File - plugin.xml
标签的含义
由于是采用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
插件可以通过注册Action 在IDE菜单和工具栏中添加操作,其实就是IDE中添加了一个按钮,然后响应按钮点击事件。例如Android Studio中的Build - Clean Project 按钮就是一个Action。
在 main 文件夹下新建kotlin文件夹(若采用java开发,则创建java文件夹),创建ADBAction类。
class ADBAction : AnAction() {
//用户执行操作时会调用此方法。
override fun actionPerformed(e: AnActionEvent) {
//展示一个信息弹窗
Messages.showMessageDialog("adb message", "adb title", Messages.getInformationIcon() )
}
}
鼠标选中在自定义Action类,使用快捷键ALT + Enter(快捷键可能有所不同)注册Action。
完成后可以看到 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>
点击运行按钮,运行插件程序查看效果。
上文中的对话框为自带的Dialog样式,如果需要修改显示画面,就需要进行自定义。
kotlin文件夹下,新建MessageDialog 继承于DialogWrapper。
class MessageDialog : DialogWrapper(true) {
override fun createCenterPanel(): JComponent {
TODO("Not yet implemented")
}
}
可以看到,需要返回一个 JComponent 对象,插件的显示界面就是由Java Swing开发。
在 main 文件夹下新建java文件夹,然后右键 New -> Swing UI Designer -> GUI Form,新建MyMessageDialog,并添加一些控件。
此时 MyMessageDialog.java 中的代码如下
public class MyMessageDialog {
public JTextField textField1;
public JTextField textField2;
public JPanel root;
}
修改 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()
}
}
显示效果
运行时发现,运行在 IntelliJ IDEA 中时插件可以正常运行,但运行在Android Studio 中时,出现如下错误。
java.lang.NullPointerException
com.android.tools.idea.diagnostics.AndroidStudioSystemHealthMonitor.getActionName()
解决方式,类不能直接放在 java 或 kotlin 包下,还得自己在新建一个包,最终文件结构如下。
正式发布可查看官方文档:使用Gradle发布插件
如果只是单纯的想导出插件,可以进行如下操作
gradlew buildPlugin
/build/distributions 中可查看到插件.zip文件,然后在 Android Studio -> File -> Setting -> Plugins -> Install Plugin from Disk 中安装插件。