1. 程式人生 > >Android開發學習之路--Android Studio外掛開發

Android開發學習之路--Android Studio外掛開發

前言

因為使用了mvp和dagger,所以每次新的一個功能頁面都需要重新寫一堆東西,比如Activity, Fragment, Presenter,dagger等,而這些程式碼基本上都是大同小異,完全可以寫一個模板,然後生成,略微修改便可以完成我們需要的功能。而往往我們寫模板的時候就需要花費半天,有可能遇到坑需要個1天時間去,如果有個外掛,定義好名字,然後自動生成所需要的所有程式碼那就完美了。既然決定了那就實現吧。

準備

安裝java1.8

準備好後我們便開始新建工程開發我們需要的外掛了。

新建工程

新建工程,選擇IntelliJ Platform Plugin,這裡新建名為CCDCodeGenerate的工程

image

新建完後如下所示目錄:

image

  • resources/META-INF: 有個plugin.xml檔案,該檔案用來配置plugin的資訊
  • src目錄: 就是需要編寫的外掛的程式碼

注:需要在src下新建包名,要不然Android Studio會出問題,這裡新建com.ccd

編寫Dialog

Dialog主要是在Android Studio中通過輸入資訊互動使用。通過如下方式新建:

image

生成MyCodeCreateDialog和MyCodeCreateDialog.form,其中MyCodeCreateDialog是對應的程式碼, MyCodeCreateDialog.form是對應的佈局檔案 佈局內容如下:

image

這裡主要由JLabel和JTextField組成。

編寫程式碼如下:

package com.ccd;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyCodeCreateDialog extends JDialog {
    private JPanel contentPane;
    private JButton buttonOK;
    private JButton buttonCancel;
    private JTextField textField1;
    private
JTextField textField2; private JTextField textField3; private DialogCallBack mCallBack; public MyCodeCreateDialog(DialogCallBack callBack) { this.mCallBack = callBack; setTitle("Code Create Helper"); setSize(500, 300); // 設定視窗大小 // 設定視窗位置 2017/3/18 09:50 Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize(); int Swing1x = 500; int Swing1y = 300; setBounds((screensize.width - Swing1x) / 2, (screensize.height - Swing1y) / 2 - 100, Swing1x, Swing1y); setContentPane(contentPane); setModal(true); getRootPane().setDefaultButton(buttonOK); buttonOK.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onOK(); } }); buttonCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onCancel(); } }); // call onCancel() when cross is clicked setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { onCancel(); } }); // call onCancel() on ESCAPE contentPane.registerKeyboardAction(new ActionListener() { public void actionPerformed(ActionEvent e) { onCancel(); } }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); } private void onOK() { // add your code here if (null != mCallBack){ mCallBack.ok(textField1.getText().trim(), textField2.getText().trim(), textField3.getText().trim()); } dispose(); } private void onCancel() { // add your code here if necessary dispose(); } private void createUIComponents() { // TODO: place custom component creation code here } public interface DialogCallBack{ void ok(String author, String moduleName, String functionName); } }

這裡處理了三個TextField, 通過介面,在後續的Action中處理

編寫Action

主要的功能還是編寫Action了,所有的邏輯都在這裡完成。

新建Action如下圖所示:

image

填寫需要的資訊

image

然後會生成對應的action配置:

 <actions>
    <!-- Add your actions here -->
    <action id="CCDCodeGenerateID" class="com.ccd.CodeGenerate" text="CCD Code Generate" description="生成mvp,dagger模板程式碼">
      <add-to-group group-id="CodeMenu" anchor="first"/>
    </action>
  </actions>

接著在actionPerformed方法中處理事情

 @Override
    public void actionPerformed(AnActionEvent e) {
    }

這裡主要是定義了一些模板,然後根據模板替換dialog中輸入的模組名和功能名稱。

image

當然可以根據自己的專案來設定特定的模板檔案

這裡通過獲取工程名稱和滑鼠選中的目錄來新建相應的模板檔案,具體可以參考原始碼,這裡不再做過多講解

project = e.getData(PlatformDataKeys.PROJECT);
virtualFile = e.getData(PlatformDataKeys.VIRTUAL_FILE);

打包上傳

打包

既然功能都實現了,那麼就可以打包嘗試下

image

開啟Android Studio->File->Settings 選中Plugins,然後點選Install Plugin from disk,選中上面打包的jar包

image

安裝好後重啟Android Studio

我們來看下執行效果

image

由圖可知在Code處多了CCD Code Generate,點選會彈出我們需要的對話方塊

image

填入內容,然後就會生成對應的程式碼了。

image

上傳