Android Studio IDE 插件开发

作者:字节跳动终端技术——周宸韬

概述

这篇文章旨在向读者介绍IntelliJ IDE插件的开发流程以及常用的一些通用功能,任何基于IntelliJ开发的IDE都可以通过该方式制作插件,例如Android Studio(AS),本篇也将基于Android Studio进行展开介绍,读者将从0到1学习到 Android Studio插件开发。

背景介绍

什么是IDE插件、IDE插件能做什么?

IDE插件是将一些功能集成到了IDE界面当中,当我们使用IDE进行开发工作时能很方便的通过UI界面使用这些功能,例如大家熟悉的project工程目录,Gradle工具栏,IDE底部的Run、Terminal、Build界面等,都是通过IDE插件来实现的,可以说大部分需要通过命令行执行、或用户手动的一些操作都可以通过插件实现,并以UI的形式呈现。

如下图:左图为Android Studio IDE界面右侧Gradle工具栏,包含了很多Gradle任务,点击UI的效果等同于用户在命令行中输入Gradle命令。右图为IDE顶部菜单栏版本控制部分,其中对于版本的提交、拉取等按钮等价于命令行输入对应指令。

为什么要做Android Studio IDE插件?

笔者作为中台部门开发者,经常涉及到一些通用的功能的开发,并以工具或组件等形式交由外部使用。所以如何降低用户学习成本、提高工作效率是我的目标,而这些优化方向都离不开巧妙的使用工具。例如本次要介绍的IDE插件的开发背景就是以此为目标:将原本需要使用命令行完成的工作、或者学习成本较高的操作通过UI进行包装,并且依附在原生的AS界面中,通过UI的交互大幅降低用户学习成本,同时提升使用体验。

举例对比一下,下面两幅图片是某个工程自动搭建功能的截图,左右两图分别为使用命令行和使用AS插件的体验对比,可以看到左侧在使用CLI命令行进行工程搭建时界面信息不够简洁明了,且用户交互体验较差,用户必须在使用前阅读文档,并且没有容错机制,输错就得从头开始。而相同的功能使用右侧AS插件的体验则好很多,不仅各条信息清楚明了,还能拓展更多细节功能,如动态检验用户输入,输入无误才可进行下一步等等,用户完全可以在零知识背景的情况下使用该插件并轻松完成所有功能操作,而且接近原生的界面更美观。

如何开发一个IDE插件?

准备工作

在开发第一个插件前,我们要下载正确的开发工具,在JetBrain官网中下载IntelliJ IDEA,***下载链接***。

这里使用的开发工具是IntelliJ IDEA而不是Android Studio,因为AS是基于IntelliJ为模版开发的,IDE插件必须通过IntelliJ开发、发布,再安装到Android Studio中才能使用。

我们需要确认我们使用的Android Studio是基于哪个IntelliJ版本。这很重要,和你当前使用的Android Studio版本相同能让你在调试时很方便,而新版的IntelliJ包含的features在你使用的AS上可能并没有,导致插件无法安装,或提示兼容性报错。(图中的报错也会出现在未开启向高版本兼容时发生,开发时按需开启) 。

下载时请跟随这个步骤:

  1. 打开你的Android Studio,查看版本号(The Build Number),这就是我们需要的IntelliJ版本号。
  2. 下载页面,点击Other versions,找到对应的IntelliJ版本,下载安装即可。

创建新的工程 + 配置

这部分也可参照官网:https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started.html

  1. 创建新工程包含两个向导页面,【选择工程模版框架 + 填写插件工程信息】,按图中配置即可。
  1. 完成两步向导程序后自动创建工程,我们需要先了解两个核心文件:【build.gradle + plugin.xml】,并做一些前置的配置工作。

build.gradle

因为build.gradle和Android工程中的构建文件非常类似,这里只解释Android中没有的配置。

  • version:intellij闭包创建时只带一个属性 version,该属性代表用来构建这个插件的IntelliJ 平台IDE的版本,如果我们在开发时调用【runIde】这个Gradle task,一个基于这个版本的IntelliJ IDE实例就会被创建。
  • localPath:因为我们希望在AS的环境下测试我们的插件,所以我们需要将AS作为我们插件的一个依赖,增加一个属性叫localPath指定本机Android Studio应用程序Contents的安装目录,一个基于这个版本的Android Studio实例就会被创建(注意localPath不能和version属性同时使用,因为我们本地的AS路径中已经有了版本信息)。
  • plugins:添加开发需要的依赖插件。可以在这里添加很多我们想用的插件,比如我们想在插件中执行git命令,我们可以添加 ’git4idea‘ plugin。
intellij {
   
    version '2020.1.4'
    localPath '/Applications/Android Studio.app/Contents'
    plugins = ['Kotlin','android','git4idea']
}

plugin.xml

在resource文件夹下可以找到plugin.xml文件,这个文件中可以配置我们插件的各项属性,核心功能是注册我们插件包含的components和service(功能类实现后还需要在这里进行注册才能使用,类似在AndroidManifest.xml中声明Activity和Service)。

  • 声明我们的插件需要并且和AS相兼容:增加android和android studio modules作为依赖。
<idea-plugin>
    ...
    <depends>com.intellij.modules.platform</depends>
    <depends>org.jetbrains.android</depends>
    <depends>com.intellij.modules.androidstudio</depends>

    <extensions defaultExtensionNs="com.intellij">
        <!-- Add your extensions here -->
    </extensions>

    <actions>
        <!-- Add your actions here -->
    </actions>

</idea-plugin>

运行插件

配置完成后我们可以尝试运行插件工程,具体位置在Gradle工具栏 项目名称/Tasks/intelliJ/runIde路径。运行runIde任务,因为我们配置了Android Studio为启动路径,所以一个Android Studio模拟IDE会打开,所有内容都和我们本地的Android Studio没有差别。

IDE插件常用功能介绍

创建一个Action

什么是Action?

Actions官方介绍: The system of actions allows plugins to add their own items to IDEA menus and toolbars. An action is a class, derived from the AnAction.

Actions是用户调用插件功能最常见的方式,如下图的工具目录是开发者经常用到的,里面所有的可选项都是一个Action,可以进一步展开的则是Action Group。

如何创建一个Action?

两个步骤:

  • 【code implementation - 实现Action的具体代码逻辑】:决定了这个action在哪个context下有效,并且在UI中被选择后的功能(继承父类AnAction并重写actionPerformed()方法,用于Action被执行后的回调)。
  • 【registered - 在配置文件中注册】:决定了这个action在IDE界面的哪个位置出现(创建新的group或存放进现有的ActionGroup,以及在group中的位置)。

两个条件达成,action就可以从IntelliJ Platform中获得用户执行动作后的回调,例子: ‘HelloWorld’。

Code implementation
class HelloWorldAction : AnAction() {
   

    
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值