美文网首页
Android Studio plugin developmen

Android Studio plugin developmen

作者: 哈啰于先生 | 来源:发表于2021-09-02 14:42 被阅读0次

0、 前言

我们在Android Studio上使用了很多插件,比如开发flutter的时候用到的FishReduxTemplate 、FlutterJsonBeanFactory等,这些插件是如何开发的呢,今天我们来开发自己的AS插件。

1、 AS插件开发介绍

AS 插件开发也就是IntelliJ IDEA插件开发。

IntelliJ IDEA 简称 IDEA,是 Jetbrains 公司旗下的一款 JAVA 开发工具,支持 Java、Scala、Groovy 等语言的开发,同时具备支持目前主流的技术和框架,擅长于企业应用、移动应用和 Web 应用的开发,提供了丰富的功能,智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等。

IntelliJ Platform 是一个构建 IDE 的开源平台,基于它构建的 IDE 有 IntelliJ IDEA、WebStorm、DataGrip、以及 Android Studio 等等。AS和IDEA 插件也是基于 IntelliJ Platform 开发的。

您可以使用IntelliJ IDEA Community EditionIntelliJ IDEA Ultimate 作为您的 IDE。两者都包括完整的插件开发工具集。要更熟悉 IntelliJ IDEA,请参阅IntelliJ IDEA Web 帮助

2、三种模板

有三个支持的工作流可用于构建插件。

1、GitHub Template
它提供了一个纯样板模板 intellij-platform-plugin-template, 以便使用推荐的Gradle设置更容易地创建新的插件项目。

2、Gradle 官方推荐

优点:

*   源集、模块和项目的表示是可移植的,
*   任何规模或复杂性的项目通常都需要用于构建管理的脚本,Gradle 可以在本地处理这些脚本,
*   一般 Gradle 主题的培训、文档和社区帮助随处可见。
特定于使用 IntelliJ IDEA 的 Gradle 插件开发 IntelliJ 平台插件:
*   更改插件目标更舒服,因为这一切都在build.gradle 中完成:
    *   切换目标 IntelliJ 平台(IDE)的版本,
    *   更改目标 IntelliJ Platform-based IDE,例如,从 IntelliJ IDEA 更改为 PyCharm,
    *   针对 JetBrains 运行时的替代版本运行插件。
*   Gradle 与持续集成系统和JetBrains Plugin Repository完全集成,因此可以轻松自定义和扩展构建和发布过程。
*   plugin.xml和插件分发结构的内置验证任务。
*   与IntelliJ Plugin Verifier工具的内置集成,用于运行在JetBrains Plugin Repository上执行的兼容性检查。

目录结构

my_gradle_plugin
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   └── resources
    │       └── META-INF
    │           └── plugin.xml
    └── test
        ├── java
        └── resources

3、Plugin DevKit
Plugin DevKit是一个捆绑的 IntelliJ IDEA 插件,用于使用 IntelliJ IDEA 的构建系统为 IntelliJ 平台开发插件。它提供其自定义 SDK 类型和一组用于在 IDE 中构建插件的操作。

本文使用的是Plugin DevKit的方式。

3、 开发环境搭建

本文开发工具使用的是 Intellij IDEA 2019
jdk版本:JDK 8

  • 启用Plugin DevKit

Plugin DevKit 是 IntelliJ 的一个插件,它使用 IntelliJ IDEA 自己的构建系统来为开发 IDEA 插件提供支持。开发 IDEA 插件之前需要安装并启用 Plugin DevKit 。

打开 IDEA,导航到 Settings | Plugins,若插件列表中没有 Plugin DevKit,点击 Install JetBrains plugin,搜索并安装。

  • 配置 IntelliJ 平台 SDK

1、安装jdk1.8,并启用
选择第一步中的 Java SDK 作为默认 Java SDK

注:官方提示不要使用比指定版本更新的 Java 版本。

截图
2、配置 Platform SDKs

导航到 File | Project Structure,选择对话框左侧栏 Platform Settings 下的 SDKs
点击 + 按钮,先选择 JDK,指定 JDK 的路径;再创建 IntelliJ Platform Plugin SDK,指定 home path 为 IDEA 的安装路径,如图

3、配置Project的 IntelliJ Platform Plugin SDK

IntelliJ Platform Plugin SDK 就是开发 IntelliJ 平台插件的SDK, 是基于 JDK 之上运行的,类似于开发 Android 应用需要 Android SDK。

创建好 IntelliJ Platform Plugin SDK 后,选择左侧栏 Project Settings 下的 Projects,在 Project SDK 下选择刚创建的 IntelliJ Platform Plugin SDK

4、设置Sandbox

IntelliJ IDEA 插件以 Debug/Run 模式运行时是在 SandBox 中进行的,不会影响当前的 IntelliJ IDEA;但是同一台机器同时开发多个插件时默认使用的同一个 Sandbox,即在创建 IntelliJ Platform SDK 时默认指定的 Sandbox Home

如果需要每个插件的开发环境是相互独立的,可以创建多个 IntelliJ Platform SDK,为 Sandbox Home 指定不同的目录 。

至此环境配置完毕。

4、开发一个简单的插件

1、 创建工程

选择 File | New | Project,左侧栏中选择 IntelliJ Platform Plugin 工程类型

Plugin dev模板工程

点击 Next,设置工程名称及位置,点击 Finish 完成创建。可以到 File | Project Structure 来自定义工程设置。

作为对比,看下Gradle模板的工程如何创建。


Gradle模板

选择左侧Gradle,右侧指定SDK,并勾选Java和Intellij Platform Plugin。

2、Plugin Dev工程的文件结构
MyFirstPluginDemo/
    resources/
      META-INF/
        plugin.xml
    src/
      xxx/...
      ...
      ...
  • src 实现插件功能的classes
  • resources/META-INF/plugin.xml 插件的配置文件,指定插件名称、描述、版本号、支持的 IntelliJ IDEA 版本、插件的 components 和 actions 以及软件商等信息。
<idea-plugin>

  <!-- 插件名称,别人在官方插件库搜索你的插件时使用的名称 -->
  <name>MyPlugin</name>

  <!-- 插件唯一id,不能和其他插件项目重复,所以推荐使用com.xxx.xxx的格式
       插件不同版本之间不能更改,若没有指定,则与插件名称相同 -->
  <id>com.example.plugin.myplugin</id>

  <!-- 插件的描述 -->
  <description>my plugin description</description>

  <!-- 插件版本变更信息,支持HTML标签;
       将展示在 settings | Plugins 对话框和插件仓库的Web页面 -->
  <change-notes>Initial release of the plugin.</change-notes>

  <!-- 插件版本 -->
  <version>1.0</version>

  <!-- 供应商主页和email-->
  <vendor url="http://www.jetbrains.com" email="support@jetbrains.com" />

  <!-- 插件所依赖的其他插件的id -->
  <depends>MyFirstPlugin</depends>

  <!-- 插件兼容IDEA的最大和最小 build 号,两个属性可以任选一个或者同时使用
       官网详细介绍:http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html-->
  <idea-version since-build="3000" until-build="3999"/>

  <!-- application components -->
  <application-components>
    <component>
      <!-- 组件接口 -->
      <interface-class>com.foo.Component1Interface</interface-class>
      <!-- 组件的实现类 -->
      <implementation-class>com.foo.impl.Component1Impl</implementation-class>
    </component>
  </application-components>

  <!-- project components -->
  <project-components>
    <component>
      <!-- 接口和实现类相同 -->
      <interface-class>com.foo.Component2</interface-class>
    </component>
  </project-components>

  <!-- module components -->
  <module-components>
    <component>
      <interface-class>com.foo.Component3</interface-class>
    </component>
  </module-components>

  <!-- Actions -->
  <actions>
    ...
  </actions>

  <!-- 插件定义的扩展点,以供其他插件扩展该插件 -->
  <extensionPoints>
    ...
  </extensionPoints>

  <!-- 声明该插件对IDEA core或其他插件的扩展 -->
  <extensions xmlns="com.intellij">
    ...
  </extensions>
</idea-plugin>

3、创建Action

一个 Action 表示 IDEA 菜单里的一个 menu item 或工具栏上的一个按钮,通过继承 AnAction class 实现,当选择一个 menu item 或点击工具栏上的按钮时,就会调用 AnAction 类的 actionPerformed 方法。

实现自定义 Action 分两步:

  • 1 、定义一个或多个 action

定义一个 Java class,继承 AnAction 类,并重写 actionPerformed 方法, 如

public class HelloWorldClass extends AnAction {
    public void actionPerformed(AnActionEvent event) {
        Project project = event.getData(PlatformDataKeys.PROJECT);
        Messages.showInputDialog(
          project,
          "What is your name?",
          "Input your name",
          Messages.getQuestionIcon());
    }
}
  • 2、注册 action,将 item 添加到菜单或工具栏上

在 plugin.xml 文件的 <actions> 元素内注册

<actions>
    <!-- Add your actions here  ProjectViewPopupMenu-->
    <action id="HelloWorldID" 
            class="HelloWorldClass" 
            text="HelloWorldName" 
            description="HelloWorld">
      <add-to-group group-id="EditMenu" anchor="first"/>
    </action>
  </actions>
  • <action> 元素会定义一个 action,指定 action 的 id、实现类、显示文本、描述
  • <group> 元素会定义一个 action group(多个action),设置 action group 的 id、文本、描述
  • <add-to-group> 元素指定其外部 action 或 action group 被添加到的位置
3+、快速创建Action

IntelliJ Platform 提供了 New Action 向导,它会帮助我们创建 action class 并配置 plugin.xml 文件:

在目标 package 上右键,选择 New | Plugin DevKit | Action:

在弹出的对话框中填充下列字段,然后点击 OK:
Action ID: action 唯一 id,推荐 format: PluginName.ID
Class Name: 要被创建的 action class 名称
Name: menu item 的文本
Description: action 描述,toolbar 上按钮的提示文本,可选
Add to Group:选择新 action 要被添加到的 action group(Groups, Actions)以及相对其他 actions 的位置(Anchor)
Keyboard Shortcuts:指定 action 的第一和第二快捷键

注意:该向导只能向主菜单中已存在的 action group 或工具栏上添加 action,若要创建新的 action group,请参考前面的内容。

4、运行调试插件

运行/调试插件可直接在 IntelliJ IDEA 进行,选择 Run | Edit Configurations...,若左侧栏没有 Plugin 类型的 Configuration, 点击右上角+ 按钮,选择 Plugin 类型,

点击Run图标运行,IntelliJ IDEA 会另启一个装有该插件的 IDEA 窗口。

5、打包插件

选择 Build | Prepare Plugin Module ‘module name’ for Deployment 来打包插件:

插件包位置:一般在工程根目录下

如果插件没有依赖任何 library,插件会被打包成一个 .jar,否则会被打包成一个 .zip,zip 中包含了所有的插件依赖。

6、安装插件

导航到 File | Settings | Plugins 页面,点击 Install plugin from disk...

安装本地插件

选择插件包的位置,点击 OK
在插件列表中,勾选插件名字后面的 check-box 来启用插件,点击 OK
重启 IDEA

7、发布插件

将插件发布到 Jetbrains Plugin market

5、For-U的flutter工程代码模板。

https://gitlab.fuyoukache.com/flutter/fy_code_gen

功能:输入Yapi接口地址,生成flutter的网络请求代码。

参考文章IntelliJ Platform Plugin SDK

相关文章

网友评论

      本文标题:Android Studio plugin developmen

      本文链接:https://www.haomeiwen.com/subject/dmuqwltx.html