Android Studio插件开发1之插件介绍与环境搭建

插件开发系列
Android Studio插件开发1之插件介绍与环境搭建
Android Studio插件开发2之Action System
Android Studio插件开发3之Extensions And Extension Points(扩展与扩展点)

我们每天都在使用Android Studio进行开发,测试,review。在这过程中,免不了接触到各种IDE插件来帮助我们的工作,包括Android Studio本身其实就是在Intellij IDEA的基础上添加各种插件以及针对性的优化形成的。所以其实为Android Studio开发插件,其实很多情况下也适用于Itellij IDEA(只要没有依赖特定平台的特性)。那么,既然插件这么厉害,为什么我们不去自己学着写一写呢?

什么是插件

维基百科上关于插件的定义如下:

插件(又译外挂,英文为Plug-in、Plugin、add-in、addin、add-on、addon或extension)是一种电脑程序,通过和应用程序(例如网页浏览器,电子邮件客户端)的互动,用来替应用程序增加一些所需要的特定的功能。最常见的有游戏、网页浏览器的插件和媒体播放器的插件。
应用程序之所以支持插件的使用原因很多,主要包括:使得第三方的开发者可以对应用程序进行扩充、精简,或者将源代码从应用程序中分离出来,去除因软件使用权限而产生的不兼容。

插件的类型

依据官方文档的说法,主要有以下4中类型的插件

  1. Custom language support

    运用Intellij平台的强大的开放性和扩展性,添加对一种编程语言的支持,如文件识别,词法分析,语法高亮,代码补全,语法检查等等,我使用过或著名的这类型的比较出名的插件有

    markdown-support

    bashsupport

    kotlin

    scala

  2. Framework integration

    整个编程框架的功能,这种插件进行web开发的话会接触的更多,Android开发的话,本身Android插件就是一个最好的例子

  3. Tool integration

    在IDE内与第三方工具交互,例如如果我们的开发电脑的usb被禁或没有数据线的话可以用以下插件

    adb-wifi

  4. User interface add-ons

    改变IDE的界面,例如各种主题插件

实际上,还有各种类型的扩展平台功能的插件,在官方插件网站上列出的插件种类有如下图列出的这么多种

categories.png

插件能干什么

实际上,插件的类型的部分就很好的解答了这个问题。通过应用插件,IDE可以为我们构建开发环境、可以整合我们与优秀的工具,如git,可以批量生成代码,减少重复的敲样板代码,可以帮助我们寻找代码的问题,提高代码的质量......

Intellij插件开发与Android Application开发的对比

作为一个Android开发者,从Android Application开发的角度来类比就最恰当不过了。为Intellij平台写插件就好像为Android平台写应用。Intellij这个平台就相当于一个系统,插件就是各种应用程序,Intellij平台向外提供各种API来改变它的UI和行为,给开发者使用。

而事实上,Intellij插件开发的框架架构和Android应用程序有挺大的相似之处

  • 插件组件 vs Android 四大组件

    Intellij提供了Action、Extension、(Application/Project/Module)conponent、Service等插件的组件,像Android四大组件一样,这些组件都需要在plugin.xml文件了注册,这些基本的组件了插件的主要功能

  • UI component vs View/widget

    UI界面的基本组件

  • plugin.xml vs AndroidManifest.xml

    plugin.xml就是插件的说明文件,提供了插件所有的基本信息:名字、作者、联系方式、使用说明,最重要的是插件组件的声明,想AndroidManifest.xml文件一样,Intellij通过这个文件读取并收集插件的信息,在适当时候调用通过plugin.xml注册的组件的功能。

插件开发环境搭建

进行Intellij平台的插件开发,应该先安装如下的软件或下载相关代码

使用Plugin DevKit

Intellij IDEA提供了一个工具专门给开发者开发插件,值得一提的是,Plugin DevKit本身也是插件,不得不说Intellij功能真的是强大。

此种方式建立插件工程比较简单 File->new->project,打开new project对话框,在左边选择Intellij Platform Plugin后一直确认即可

1.png

Plugin DevKit的使用比较简单,这里不再叙述,下面重点说说用为插件工程引入gradle构建的功能

创建Project SDK

在上图所示创建项目的时候,有个Project SDK的选项。写插件的时候,我们不只依赖JDK了,毕竟我们要用到Intellij IDEA的API。这时用到的是Plugin SDK,如果还没有的话,点击new新建,选择 Intellij Platform Plugin SDK,路径选择你的Intellij IDEA的安装目录。

关联源码

  1. 下载源码
    git clone --depth 1 git://git.jetbrains.org/idea/community.git idea

  2. 创建工程后,依次点击File / Project Structure / SDKs,选择Plugin SDK,点击SourcePath,按“+”号选择源码目录

3.png

使用gradle构建

其实环境搭建这样基本的开发步骤,本来是不想讲的,不过,官网关于使用gradle的说明非常简要并且我发现其实有问题的,在多次碰壁和阅读其他插件的源码才搞明白怎样使用,详细步骤如下

  • 创建一个gradle工程,在上图的左边选择Gradle,按提示完成

  • 在build.gradle文件加入如下内容

      buildscript {
          repositories {
              maven {
                  url "https://plugins.gradle.org/m2/"
              }
              maven {
                  url 'http://dl.bintray.com/jetbrains/intellij-plugin-service'
              }
      
          }
          dependencies {
              classpath "gradle.plugin.org.jetbrains:gradle-intellij-plugin:0.1.10"
          }
      }
      
      apply plugin: 'org.jetbrains.intellij'
    

此时编译工程,其实是无法构建的,因为还没有用到intellij这个gradle插件的命令,加入如下内容即可

    intellij {
        plugins 'android' //使用android插件
        version 'IC-2016.2.5' //指明使用的Intellij IDEA版本
        pluginName 'xxxx' //插件名字
        alternativeIdePath 'path to android studio'//如果想在Android Studio里运行,给出Android Studio的路径
        //下面两个选项跟适配Intellij的版本有关,具体可查看官网
        updateSinceUntilBuild = false
        sameSinceUntilBuild = false
    }       

其中最重要的是version这一项,如果注释掉这一项的话,gradle默认去下载最新版本的Intellij IDEA源码,麻烦的地方就在此,每次有版本更新,编译时就会去下载源码,即使本地仓库已经有这个依赖,所以最好指定一个版本的源码,避免多次下载源码,并且有时下载的速度很慢。

在官网上可以查看详细的版本列表

如果在右侧gradle的tool view里看到tasks里有intellij的选项

2.png

双击runIdea或者命令行输入gradle runIdea,即可构建插件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容