Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Studio插件開發實踐--從創建到發布

Android Studio插件開發實踐--從創建到發布

編輯:關於Android編程

前言

前幾天在github發現一個蠻不錯的Android Studio插件ECTranslation,在一些源碼注釋中遇到不認識的英文單詞可以很方便地查看中文翻譯。當時懷著好奇心也想試著開發一個小插件,在網上查資料發現插件開發的資料很少,大部分blog都只是簡單地搭建了個開發環境然後彈出個Hello World的對話框就完了,而jetbrains也只提供了一份DevGuide並沒有比較詳細的API文檔。因此遇到大部分都只能啃它的那份英文指導手冊和參考別人發布在github的插件源碼。現在這個小插件完成得差不多了,想把自己這幾天的開發過程整理一下分享出來,希望能給其他有興趣嘗試plugin開發的朋友一點幫助。

明確需求

開發一款插件最先要考慮的當然是它要實現什麼功能了。比如我想做的是varname-go-die主要功能就是讓開發者有時候遇到起變量名但是不知道英文怎麼拼時,不需要切換到翻譯軟件去查找再copy過來,只需要在編輯器中輸入中文就可以實現聯網翻譯,並且可以通過一個列表選擇自己設置的常用變量格式。

這是我考慮實現的功能:
1. 在Android Studio設置界面有VarNameGoDie的設置選項,開發者可以根據自己對變量名的命名風格進行設置
2. 在編輯器輸入並選取要轉換的中文,快捷鍵啟動一個ChangeVar的Action,聯網查找翻譯並彈出設置中的變量名格式列表,選擇後替換編輯器中的中文
3. 在編輯器中輸入英文單詞也可以進行格式轉換

具體的效果參見下圖:

環境准備及項目創建

Android Studio是基於Intellij IDEA,網上查找後發現好像可以在Intellij IDEA中進行插件開發,Android Studio中new project是沒有plugin選項的。
1. 下載Intellij IDEA,Community是免費的
2. 創建plugin項目,File->New Project,然後按照下圖操作,注意:關於Project SDK,如果沒有需要創建一個,點擊New,然後指向Intellij IDEA的安裝目錄就OK了。

成功建立工程後項目結構如下:

其中plugin.xml為項目的配置說明文件,相當於Android項目中的AndroidManifest.xml,負責一些Action、Extension等等已經項目版本信息、作者的注冊和聲明。
默認plugin.xml文件:


  com.your.company.unique.plugin.id
  Plugin display name here
  1.0
  YourCompany

  
  
      most HTML tags may be used
    ]]>

  
  
      most HTML tags may be used
    ]]>
  

  
  


  
  


  
    
  


  
    
  

編寫一個菜單選項

點擊菜單欄都會出來各種各樣的菜單選項,大部分選項都會有快捷鍵支持,如我們常用的Undo、Copy等。

創建一個上圖所示的菜單選項是很簡單的:

 

然後填寫這個Action的配置信息:


Action ID:標識ID,就像Android中xml的組件@+id
Class Name:生成的類名
Name、Description:菜單選項的名字和描述
Groups:定義這個菜單選項出現的位置,比如我圖中設置的當點擊菜單欄Edit時,第一項會出現test的選項,右邊的Anchor是選擇該選項出現的位置,默認First即最頂部。

點擊OK後會自動生成一個TestAction.java的類:

public class TestAction extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {
        // TODO: insert action logic here
        //點擊菜單Edit的test後會跳進這個方法
    }
}

plugin.xml中也多了一段代碼,即剛剛填寫的配置信息:


  
  
    
    
  

這樣,一個菜單選項就完成了,接下來就要實現當用戶點擊test菜單或者按快捷鍵alt T後的功能代碼了。

對話框Dialog創建

和Action的創建一樣,Dialog也可以直接在在src或者包名下右鍵->new ->Dialog,填寫類名後會生成一個xxx.java和xxx.form的文件,xxx.java就是一個繼承JDialog的類,了解一點java swing編程的同學都能看懂,而xxx.form是Intellij Idea自帶的GUI Designer,可以通過可視化的界面設計輕松地創建用戶界面布局。


只需要開發者從右邊將不同的組件拖動到中間布局的對應位置,然後在左下角設置適當的屬性,則這些屬性即可自動bind到xxx.java文件中的對應組件上。這簡化了開發者寫界面布局的繁瑣操作,即使你不怎麼懂swing編程,也可以很輕松地實現自己的界面。

當你設計好Dialog的界面並實現裡面的數據加載和按鈕或其他事件的監聽操作,當你想要把它顯示出來,也只需要簡單的兩行代碼:

TestDialog dialog = new TestDialog();
dialog.setVisible(true);    

編寫一個Configurable功能

當你的插件需要或允許用戶自定義一些配置時,比如我的插件允許用戶定義自己想要生成的代碼風格,只需用戶打開Settings->other settings就會看到一個配置界面:

剛開始需要實現這個功能,找了挺久未果,在查看一些比較火的插件時發現ButterKnifeZelezny項目也有這種功能實現,因此去github找到了項目源碼並模仿著實現了這個功能。所以當有時候遇到某些功能實現沒有找到很好的資料時,可以去查查一些其他作者的項目,看看能不能找到類似的學習學習。

實現一個配置界面需要自己實現設置界面,並且實現Configurable的接口。實現界面像Dialog的創建一樣,new->GUI Form這樣也會生成一個java文件和一個form文件,同樣的設計好界面,然後在java文件中實現Configurable接口,需要Override一些方法:

getDisplayName():Other Settings下顯示的配置名稱
getHelpTopic():看方法名像是獲取幫助時展示的信息,沒用到
createComponent():組件創建和初始數據配置
apply():當配置界面點擊底下的apply按鈕調用該方法,一般在這裡保存修改的數據
reset():配置界面點擊右上角的Reset調用該方法,一般還原初始化數據

當設計界面的時候,有時候需要自定義一些組件,比如需要在JList裡加入JCheckBox之類的,直接在form中將JCheckBox拖到JList中貌似是不行的,需要在form界面右下角對應組件的Property-Value配置欄中勾選Custom Create項,就會在java文件中生成createUIComponents方法,然後在這個方法裡面創建並添加。

當設計界面並在java文件中實現好功能後,只需在 plugin.xml進行注冊後即可實現配置界面了:


    

至此,基本界面設計都完成的差不多了,下面說說我在開發項目中遇到的一些具體功能性問題。

編輯器獲取用戶選擇內容並替換

varname-go-die首先需要得到用戶選取要轉換的英文/中文詞組,怎麼獲取用戶此時選取的內容呢?

Editor mEditor = e.getData(PlatformDataKeys.EDITOR);
String selectText = mEditor.getSelectionModel().getSelectedText();

這樣用戶此時選取的內容就獲得了,那要怎樣將其替換成其他內容呢?

private void changeSelectText(String text) {
    Project  mProject = e.getData(PlatformDataKeys.PROJECT);
    Document document = mEditor.getDocument();
    SelectionModel selectionModel = mEditor.getSelectionModel();

    final int start = selectionModel.getSelectionStart();
    final int end = selectionModel.getSelectionEnd();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            document.replaceString(start, end, text);
        }
    };
    WriteCommandAction.runWriteCommandAction(mProject, runnable);
    selectionModel.removeSelection();
}

通過以上代碼,即可成功替換用戶所選的內容。

Settings配置信息保存

當用戶在settings中設置自定義一些配置,你需要保存起來,並在應用到的時候讀取出來。

PropertiesComponent.getInstance().setValue() //保存基本類型及String等
PropertiesComponent.getInstance().setValues() //可保存數字

獲取參數的方法與之類似,Android開發的同學一點能夠輕易想到Android中類似的SharedPreferences。

運行及調試插件

點擊Run即可運行插件,會重開一個Intellij Idea,基本設置和創建test工程後插件項目效果在新開的工程中體現。

插件打包發布、上傳Plugins倉庫

插件代碼實現並調試成功後,如果你想要開源出來讓更多的小伙伴都能用到,你只需要將自己的項目打包成jar,然後發送給需要的人,對方在Settings->Plugins界面即可通過Install plugin from disk然後在本地找到jar文件安裝即可使用了。但是這樣太麻煩,你想讓小伙伴直接通過Browse repositories在倉庫中即可找到自己開發的插件,這時你就需要將自己的jar上傳到對應IDE的plugins倉庫並等待通過審核。
打包:右鍵項目名->Prepare Plugin Module ‘xxxx’ For Deployment,稍後會在項目下生成jar包
發布
1. plugin發布到官方倉庫地址
2. 還記得plugin.xml中注釋的那段代碼麼:

  
  

這是指定你的插件發布到jetbrains plugins倉庫的產品類型,jetbrains公司有很多種產品,並且都支持插件開發,如Intellij Idea,Android Studio等等,如果你上面那段代碼注釋了,那麼你在上面網站上傳的時候會默認上傳到Intellij Idea的產品倉庫,到時候只能在Intellij Idea的倉庫中搜到你的插件,Android Studio是沒有的。因此詳細配置說明請參考上面注釋中給出的網站上查看配置。我的插件將默認的com.intellij.modules.lang打開,即默認上傳到所以產品倉庫,便可以在多個IDE插件倉庫中搜索到。
3. 修改完plugin.xml並生成jar後,到步驟1中的官網上注冊用戶,然後Add New Plugin,填寫插件相關的信息,剩下的只要等待1天左右的審核,就可以在插件倉庫中查詢到自己的插件並安裝使用了!

寫在最後

花了幾天時間各種查閱資料各種折騰終於把想要的功能實現了,感覺還是蠻不錯的,同時也把我這開發經歷分享出來,希望能給其他想躍躍欲試著的開發者朋友帶來一點幫助,也希望更多有著奇思妙想的朋友們給我們分享更多能讓我們可以更加“偷懶”的插件。
同時我的代碼也開源在github上—varname-go-die,歡迎大家Star&Fork&Follow! : )

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved