Android开发学习之路--Android Studio插件开发

前言

因为使用了mvp和dagger,所以每次新的一个功能页面都需要重新写一堆东西,比如Activity, Fragment, Presenter,dagger等,而这些代码基本上都是大同小异,完全可以写一个模板,然后生成,略微修改便可以完成我们需要的功能。而往往我们写模板的时候就需要花费半天,有可能遇到坑需要个1天时间去,如果有个插件,定义好名字,然后自动生成所需要的所有代码那就完美了。既然决定了那就实现吧。

准备

  • 首先我们需要下载个IDE去开发插件,官网下载IntelliJ IDEA: https://www.jetbrains.com/idea/

  • 安装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

上传

登录https://plugins.jetbrains.com/,把jar包上传即可

github源码

参考:
https://www.cnblogs.com/gaoteng/p/5684076.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值