Android Studio插件開發(fā)1之插件介紹與環(huán)境搭建

插件開發(fā)系列
Android Studio插件開發(fā)1之插件介紹與環(huán)境搭建
Android Studio插件開發(fā)2之Action System
Android Studio插件開發(fā)3之Extensions And Extension Points(擴(kuò)展與擴(kuò)展點(diǎn))

我們每天都在使用Android Studio進(jìn)行開發(fā),測(cè)試,review奠支。在這過(guò)程中站楚,免不了接觸到各種IDE插件來(lái)幫助我們的工作趣兄,包括Android Studio本身其實(shí)就是在Intellij IDEA的基礎(chǔ)上添加各種插件以及針對(duì)性的優(yōu)化形成的跋理。所以其實(shí)為Android Studio開發(fā)插件,其實(shí)很多情況下也適用于Itellij IDEA(只要沒(méi)有依賴特定平臺(tái)的特性)拳恋。那么氮发,既然插件這么厲害渴肉,為什么我們不去自己學(xué)著寫一寫呢?

什么是插件

維基百科上關(guān)于插件的定義如下:

插件(又譯外掛爽冕,英文為Plug-in仇祭、Plugin、add-in扇售、addin前塔、add-on嚣艇、addon或extension)是一種電腦程序承冰,通過(guò)和應(yīng)用程序(例如網(wǎng)頁(yè)瀏覽器,電子郵件客戶端)的互動(dòng)食零,用來(lái)替應(yīng)用程序增加一些所需要的特定的功能困乒。最常見的有游戲、網(wǎng)頁(yè)瀏覽器的插件和媒體播放器的插件贰谣。
應(yīng)用程序之所以支持插件的使用原因很多娜搂,主要包括:使得第三方的開發(fā)者可以對(duì)應(yīng)用程序進(jìn)行擴(kuò)充、精簡(jiǎn)吱抚,或者將源代碼從應(yīng)用程序中分離出來(lái)百宇,去除因軟件使用權(quán)限而產(chǎn)生的不兼容。

插件的類型

依據(jù)官方文檔的說(shuō)法秘豹,主要有以下4中類型的插件

  1. Custom language support

    運(yùn)用Intellij平臺(tái)的強(qiáng)大的開放性和擴(kuò)展性携御,添加對(duì)一種編程語(yǔ)言的支持,如文件識(shí)別,詞法分析啄刹,語(yǔ)法高亮涮坐,代碼補(bǔ)全,語(yǔ)法檢查等等誓军,我使用過(guò)或著名的這類型的比較出名的插件有

    markdown-support

    bashsupport

    kotlin

    scala

  2. Framework integration

    整個(gè)編程框架的功能袱讹,這種插件進(jìn)行web開發(fā)的話會(huì)接觸的更多,Android開發(fā)的話昵时,本身Android插件就是一個(gè)最好的例子

  3. Tool integration

    在IDE內(nèi)與第三方工具交互捷雕,例如如果我們的開發(fā)電腦的usb被禁或沒(méi)有數(shù)據(jù)線的話可以用以下插件

    adb-wifi

  4. User interface add-ons

    改變IDE的界面,例如各種主題插件

實(shí)際上债查,還有各種類型的擴(kuò)展平臺(tái)功能的插件非区,在官方插件網(wǎng)站上列出的插件種類有如下圖列出的這么多種

categories.png

插件能干什么

實(shí)際上,插件的類型的部分就很好的解答了這個(gè)問(wèn)題盹廷。通過(guò)應(yīng)用插件征绸,IDE可以為我們構(gòu)建開發(fā)環(huán)境、可以整合我們與優(yōu)秀的工具俄占,如git管怠,可以批量生成代碼,減少重復(fù)的敲樣板代碼缸榄,可以幫助我們尋找代碼的問(wèn)題渤弛,提高代碼的質(zhì)量......

Intellij插件開發(fā)與Android Application開發(fā)的對(duì)比

作為一個(gè)Android開發(fā)者,從Android Application開發(fā)的角度來(lái)類比就最恰當(dāng)不過(guò)了甚带。為Intellij平臺(tái)寫插件就好像為Android平臺(tái)寫應(yīng)用她肯。Intellij這個(gè)平臺(tái)就相當(dāng)于一個(gè)系統(tǒng),插件就是各種應(yīng)用程序鹰贵,Intellij平臺(tái)向外提供各種API來(lái)改變它的UI和行為晴氨,給開發(fā)者使用。

而事實(shí)上碉输,Intellij插件開發(fā)的框架架構(gòu)和Android應(yīng)用程序有挺大的相似之處

  • 插件組件 vs Android 四大組件

    Intellij提供了Action籽前、Extension、(Application/Project/Module)conponent敷钾、Service等插件的組件枝哄,像Android四大組件一樣,這些組件都需要在plugin.xml文件了注冊(cè)阻荒,這些基本的組件了插件的主要功能

  • UI component vs View/widget

    UI界面的基本組件

  • plugin.xml vs AndroidManifest.xml

    plugin.xml就是插件的說(shuō)明文件挠锥,提供了插件所有的基本信息:名字、作者侨赡、聯(lián)系方式蓖租、使用說(shuō)明纱控,最重要的是插件組件的聲明,想AndroidManifest.xml文件一樣菜秦,Intellij通過(guò)這個(gè)文件讀取并收集插件的信息甜害,在適當(dāng)時(shí)候調(diào)用通過(guò)plugin.xml注冊(cè)的組件的功能。

插件開發(fā)環(huán)境搭建

進(jìn)行Intellij平臺(tái)的插件開發(fā)球昨,應(yīng)該先安裝如下的軟件或下載相關(guān)代碼

使用Plugin DevKit

Intellij IDEA提供了一個(gè)工具專門給開發(fā)者開發(fā)插件主慰,值得一提的是嚣州,Plugin DevKit本身也是插件,不得不說(shuō)Intellij功能真的是強(qiáng)大共螺。

此種方式建立插件工程比較簡(jiǎn)單 File->new->project,打開new project對(duì)話框该肴,在左邊選擇Intellij Platform Plugin后一直確認(rèn)即可

1.png

Plugin DevKit的使用比較簡(jiǎn)單,這里不再敘述藐不,下面重點(diǎn)說(shuō)說(shuō)用為插件工程引入gradle構(gòu)建的功能

創(chuàng)建Project SDK

在上圖所示創(chuàng)建項(xiàng)目的時(shí)候匀哄,有個(gè)Project SDK的選項(xiàng)。寫插件的時(shí)候雏蛮,我們不只依賴JDK了涎嚼,畢竟我們要用到Intellij IDEA的API。這時(shí)用到的是Plugin SDK挑秉,如果還沒(méi)有的話法梯,點(diǎn)擊new新建,選擇 Intellij Platform Plugin SDK犀概,路徑選擇你的Intellij IDEA的安裝目錄立哑。

關(guān)聯(lián)源碼

  1. 下載源碼
    git clone --depth 1 git://git.jetbrains.org/idea/community.git idea

  2. 創(chuàng)建工程后,依次點(diǎn)擊File / Project Structure / SDKs姻灶,選擇Plugin SDK铛绰,點(diǎn)擊SourcePath,按“+”號(hào)選擇源碼目錄

3.png

使用gradle構(gòu)建

其實(shí)環(huán)境搭建這樣基本的開發(fā)步驟木蹬,本來(lái)是不想講的至耻,不過(guò)若皱,官網(wǎng)關(guān)于使用gradle的說(shuō)明非常簡(jiǎn)要并且我發(fā)現(xiàn)其實(shí)有問(wèn)題的镊叁,在多次碰壁和閱讀其他插件的源碼才搞明白怎樣使用,詳細(xì)步驟如下

  • 創(chuàng)建一個(gè)gradle工程走触,在上圖的左邊選擇Gradle晦譬,按提示完成

  • 在build.gradle文件加入如下內(nèi)容

      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'
    

此時(shí)編譯工程,其實(shí)是無(wú)法構(gòu)建的互广,因?yàn)檫€沒(méi)有用到intellij這個(gè)gradle插件的命令敛腌,加入如下內(nèi)容即可

    intellij {
        plugins 'android' //使用android插件
        version 'IC-2016.2.5' //指明使用的Intellij IDEA版本
        pluginName 'xxxx' //插件名字
        alternativeIdePath 'path to android studio'//如果想在Android Studio里運(yùn)行卧土,給出Android Studio的路徑
        //下面兩個(gè)選項(xiàng)跟適配Intellij的版本有關(guān),具體可查看官網(wǎng)
        updateSinceUntilBuild = false
        sameSinceUntilBuild = false
    }       

其中最重要的是version這一項(xiàng)像樊,如果注釋掉這一項(xiàng)的話尤莺,gradle默認(rèn)去下載最新版本的Intellij IDEA源碼,麻煩的地方就在此生棍,每次有版本更新颤霎,編譯時(shí)就會(huì)去下載源碼,即使本地倉(cāng)庫(kù)已經(jīng)有這個(gè)依賴涂滴,所以最好指定一個(gè)版本的源碼友酱,避免多次下載源碼,并且有時(shí)下載的速度很慢柔纵。

在官網(wǎng)上可以查看詳細(xì)的版本列表

如果在右側(cè)gradle的tool view里看到tasks里有intellij的選項(xiàng)

2.png

雙擊runIdea或者命令行輸入gradle runIdea缔杉,即可構(gòu)建插件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市搁料,隨后出現(xiàn)的幾起案子或详,更是在濱河造成了極大的恐慌,老刑警劉巖郭计,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸭叙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拣宏,警方通過(guò)查閱死者的電腦和手機(jī)沈贝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)勋乾,“玉大人宋下,你說(shuō)我怎么就攤上這事〖” “怎么了学歧?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)各吨。 經(jīng)常有香客問(wèn)我枝笨,道長(zhǎng),這世上最難降的妖魔是什么揭蜒? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任横浑,我火速辦了婚禮,結(jié)果婚禮上屉更,老公的妹妹穿的比我還像新娘徙融。我一直安慰自己,他們只是感情好瑰谜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布欺冀。 她就那樣靜靜地躺著树绩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隐轩。 梳的紋絲不亂的頭發(fā)上饺饭,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音职车,去河邊找鬼砰奕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛提鸟,可吹牛的內(nèi)容都是我干的军援。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼称勋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼胸哥!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赡鲜,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤空厌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后银酬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘲更,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年揩瞪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赋朦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡李破,死狀恐怖宠哄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗤攻,我是刑警寧澤毛嫉,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站妇菱,受9級(jí)特大地震影響承粤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闯团,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一辛臊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偷俭,春花似錦浪讳、人聲如沸缰盏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至负溪,卻和暖如春透揣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背川抡。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工辐真, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崖堤。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓侍咱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親密幔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子楔脯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容