带你从0开始撸一个Android studio 插件-XMan(二)

235 阅读1分钟

准备工作做好之后,接下来就是正题了,在你创建好的action中,就可以开始写你的插件功能了,通过getData(PlatformDataKeys.PROJECT)获取到Project对象。

我想开发一个获取当前的项目依赖列表的插件,所以我这里新建了个弹框DevPanel

public class DevelopAction extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {
        Project project = e.getData(PlatformDataKeys.PROJECT);
        XMan.init(project);
        new DevPanel(project).show();
    }

}

DevPanel其实就是一个dialog弹框,弹出效果如下图所示

image.png

由于弹框中需要展示依赖配置列表,我创建了一个scrollPane,来包裹list(Swing中的list本身虽然是列表,但是不支持滚动,滚动效果需要scrollPanel来帮助实现)。

        val center = JPanel()

        loadKitConfig()
        val scrollPane = JScrollPane().apply {
            preferredSize = Dimension(200, 200)
            verticalScrollBarPolicy = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS
            isWheelScrollingEnabled = true
        }
        scrollPane.setViewportView(listModule)
        center.add(scrollPane, BorderLayout.CENTER)

其中loadKitConfig是用来加载本地依赖配置信息的

 private fun loadKitConfig() {
        val kitConfig = DevUtil.getProjectConfig()
        kitConfig?.modules?.let {
            val list = DefaultListModel<KitConfig.ModuleInfo>()
            it.forEach { info ->
                list.addElement(info)
            }
            listModule.model = list
        }
    }

当然最开始肯定是没有这个配置的,所以需要开发人员手动配置一下(后续版本会优化成自动获取),点击“添加模块依赖按钮”会弹出下面的弹框,用来配置你需要本地开发的依赖模块的信息: 依赖名:你项目中implementation或者api后面的sdk依赖名,比如

implementation "androidx.core:core-ktx:1.7.0" ,你这里直接写androidx.core:core-ktx; 本项目/其他项目是针对于本地依赖(比如core-ktx)的模块是否和当前project同属一个; 版本号为依赖库的版本号(1.7.0),最后在路径那里选择你本地模块的路径,点击ok即可

image.png

之后依赖列表会自动刷新你新添加的依赖。

最后附github地址