{"id":20176683,"url":"https://github.com/joehaivo/first-plugin","last_synced_at":"2025-03-03T05:21:17.084Z","repository":{"id":165113065,"uuid":"385181843","full_name":"Joehaivo/first-plugin","owner":"Joehaivo","description":"Android Studio Plugin/Intellij IDEA Plugin 插件开发入门，开发属于自己的第一款插件","archived":false,"fork":false,"pushed_at":"2021-07-12T09:41:24.000Z","size":68,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-13T16:26:08.823Z","etag":null,"topics":["android-studio-plugin","intellij-idea-plugin"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Joehaivo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-12T08:45:30.000Z","updated_at":"2023-07-04T06:47:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"2b24bbe3-13e9-4288-b7ff-b231e7d19d3c","html_url":"https://github.com/Joehaivo/first-plugin","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joehaivo%2Ffirst-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joehaivo%2Ffirst-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joehaivo%2Ffirst-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joehaivo%2Ffirst-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Joehaivo","download_url":"https://codeload.github.com/Joehaivo/first-plugin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241612224,"owners_count":19990754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-studio-plugin","intellij-idea-plugin"],"created_at":"2024-11-14T02:10:50.788Z","updated_at":"2025-03-03T05:21:17.078Z","avatar_url":"https://github.com/Joehaivo.png","language":"Java","readme":"## Android Studio Plugin/Intellij IDEA Plugin插件开发入门，开发属于自己的第一款插件\n\n## 前置知识\n\u003e Android Studio是基于Intellij IDEA开发的，所以需要使用IDEA开发插件，同时，开发出的插件可以适用于所有基于Jetbrain Intellij的系列产品，除非插件使用了特定平台的依赖库或者限定了适用的平台\n\n## 功能需求\n\u003e 对安卓工程下的各个res/mipmap内的不同大小的logo图片进行一键替换\n\n![微信截图_20210712165128.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/445c20eef18b4a52b6687f4b57cadf16~tplv-k3u1fbpfcp-watermark.image)\n\n## 仓库地址\n[GitHub](https://github.com/Joehaivo/first-plugin)\n\n## 1. 初始化工程\n1. 打开IntelliJ IDEA Ultimate （我使用的是2021.1.3），点击New Project\n2. 左侧选择Gradle类型（不再推荐左侧选择Intellij Platform Plugin类型），右侧指定JDK版本为1.8，勾选Java和Intellij Platform Plugin，点击Next\n\n![微信截图_20210712160041.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/93d7f9d3ad9d4713ad1ef22a33c838fa~tplv-k3u1fbpfcp-watermark.image)\n3. 输入工程名first-plugin，点击Finish\n\n## 2. 修改配置信息\n### 1. 修改build.gradle文件\n```gradle\nintellij {\n    version = '2020.1' // 因为Android Studio 4.1是基于IDEA 2020.1 Community版本开发的，所以这里调试也指定为此版本\n    plugins = ['android']\n}\n\nbuildSearchableOptions {\n    enabled = false\n}\n\npatchPluginXml {\n    changeNotes = \"\"\"\n      Add change notes here.\u003cbr\u003e\n      \u003cem\u003emost HTML tags may be used\u003c/em\u003e\"\"\"\n    sinceBuild = '191' // 插件适用的IDEA版本范围，此范围基本涵盖了Android Studio最近两三年的版本\n    untilBuild = '212.*'\n}\n```\n### 2. 修改plugin.xml文件\n- 按需修改\\\u003cname\u003e、\\\u003cvendor\u003e、\\\u003cdescription\u003e标签内的内容\n- 在\\\u003cdepends\u003e标签下新增：\n```xml\n\u003cdepends\u003ecom.intellij.modules.platform\u003c/depends\u003e\n\u003cdepends\u003ecom.intellij.modules.xml\u003c/depends\u003e // 支持xml文件操作\n\u003cdepends\u003eorg.jetbrains.android\u003c/depends\u003e // AS相关\n```\n### 3. 创建包结构\n在/src/main/java文件夹上右键，New package创建com.haivo.plugin包\n\n## 2. 同步工程\n点击Gradle Sync同步工程, 第一次同步需要下载IDEA-IC2020.1版本以及android依赖，可能需要10-20分钟，耐心等待同步完成。\n\n## 3. 创建菜单项（Action）\n1. 在com.haivo.plugin文件夹上右键，选择New \u003e Plugin Devkit \u003e Action\n\n![微信截图_20210712160530.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7435282612354fcbb5033b14d7e7aa88~tplv-k3u1fbpfcp-watermark.image)\n\n2. 依次填入id name等信息，Action ID最好采用全限定名，Group选择ProjectViewPopupMenu，表示将此菜单附加到右键菜单项内，你也可以选择ToolsMenu，表示附加到顶部Tools选项菜单内\n   ![微信截图_20210712135832.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6b68314ff22c4d7e9590cbacfb55a87c~tplv-k3u1fbpfcp-watermark.image)\n\n3. 另一种创建Action的方式是直接编辑plugin.xml的\\\u003cactions\u003e标签，并创建相应的class，这种方式还可以灵活的为Action创建一组ActionGroup，效果就是菜单项会出现“▷”可展开项\n```xml\n\u003cactions\u003e\n        \u003c!-- Add your actions here --\u003e\n        \u003caction id=\"com.haivo.plugin.importpictureaction\" class=\"ImportPictureAction\" text=\"导入图片\"\n                description=\"一键批量导入图片\"\u003e\n            \u003cadd-to-group group-id=\"ProjectViewPopupMenu\" anchor=\"last\"/\u003e\n        \u003c/action\u003e\n\u003c/actions\u003e\n```\n\n## 4. 创建对话框（Dialog）\n1. 在com.haivo.plugin文件夹上右键，选择New \u003e Swing UI Designer \u003e Create Dialog Class\n2. 输入类名，取消三个勾选项，点击OK\n   ![微信截图_20210712140024.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/86e11345667b44f4b6d95d3df173c109~tplv-k3u1fbpfcp-watermark.image)\n\n## 5. 实现UI界面\n1. 从这里开始就是JavaFx的知识了，不过不用了解太深，我们修改ImportPictureDialog类的父类为DialogWrapper，实现createCenterPanel()方法，修改构造方法，并添加init()方法（重点，否则没有界面！）\n```java\npublic class ImportPictureDialog extends DialogWrapper {\n    private JPanel contentPane;\n    private JButton buttonOK;\n    private JButton buttonCancel;\n\n    public ImportPictureDialog(AnActionEvent event) {\n        super(event.getProject());\n        init();\n    }\n\n    @Override\n    protected @Nullable JComponent createCenterPanel() {\n        return contentPane;\n    }\n}\n```\n2. 打开ImportPictureDialog.form文件，是不是很熟悉？其实这跟AS中的layout editor很像，\n   选中ok按钮按Delete删除，cancel按钮同理，因为DialogWrapper自带了这两个按钮\n\n3. 从右侧组件库依次拖动JLabel、JTextField到框里，并修改文本与布局\n   ![微信截图_20210712144123.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fb522feb55a14eb6842ab36d98724dfa~tplv-k3u1fbpfcp-watermark.image)\n\n## 6. 业务实现 \u0026 调试\n1. 修改ImportPictureAction\n```java\npublic class ImportPictureAction extends AnAction {\n\n    @Override\n    public void actionPerformed(AnActionEvent e) {\n        // 此处的代码会在Action被点击后执行\n        new ImportPictureDialog(e).show();\n    }\n}\n```\n2. 完成后我们先调试一波，点击Run Plugin(▶)按钮，稍等一会儿会启动一个新的IDEA窗口实例，这个实例会自动安装好我们的插件，我们选择一个安卓工程打开，然后在左侧Project窗口内右键app/src/res文件夹，会发现菜单的底部出现了一个“导入图片”选项，点击出现下述图片，至此我们的插件已基本成型，接下来只需要编写业务代码即可\n\n\n![微信截图_20210712144910.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/816696d472c3466da6f6bdc0852e829d~tplv-k3u1fbpfcp-watermark.image)\n\n3. 具体的业务代码不再此处列出了，查看源码即可，主要都在ImportPictureDialog.java类里\n\n## 7. 插件打包 \u0026 发布\n1. 在右侧点击Gradle，找到publishPlugin，双击执行，或者在命令行下执行\n```shell\n.\\gradlew publishPlugin\n```\n2. 在build/libs下即可找到该jar包\n\n![微信截图_20210712161236.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/23d6cfbc46274c25abd17642a21a620f~tplv-k3u1fbpfcp-watermark.image)\n\n3. 将该jar包拖进Android Studio的编辑区， 然后重启AS，插件即安装完成","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoehaivo%2Ffirst-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoehaivo%2Ffirst-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoehaivo%2Ffirst-plugin/lists"}