{"id":16558720,"url":"https://github.com/pengmaster/plugindemo","last_synced_at":"2026-04-18T01:34:11.045Z","repository":{"id":143248653,"uuid":"157825305","full_name":"pengMaster/PluginDemo","owner":"pengMaster","description":"Android  自定义gradle编译","archived":false,"fork":false,"pushed_at":"2018-11-16T06:57:58.000Z","size":137,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-15T11:07:29.979Z","etag":null,"topics":["android-gradle","gradle","groovy"],"latest_commit_sha":null,"homepage":null,"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/pengMaster.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":"2018-11-16T06:52:21.000Z","updated_at":"2021-02-11T15:11:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"abf9f4ad-ab88-414e-87b2-3a4adf22a5d4","html_url":"https://github.com/pengMaster/PluginDemo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pengMaster%2FPluginDemo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pengMaster%2FPluginDemo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pengMaster%2FPluginDemo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pengMaster%2FPluginDemo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pengMaster","download_url":"https://codeload.github.com/pengMaster/PluginDemo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241945526,"owners_count":20046869,"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-gradle","gradle","groovy"],"created_at":"2024-10-11T20:23:33.056Z","updated_at":"2026-04-18T01:34:05.982Z","avatar_url":"https://github.com/pengMaster.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 我们一起用AndroidStudio写一个自定义的Gradle插件吧\n\n- 注：这篇文章注重实际操作，插图丰富，易于理解上手。 对于理论知识的解释我自己也一头雾水，所以跟着我做就好啦。我也慢慢在学嘛\n\n我把这个整个过程分为三部\n\n1. 创建项目和插件，\n2. 完善插件内容和配置，\n3. 打包发布并且正确引用自定义插件\n\n### 一.创建项目和插件\n\n我们写一个gradle插件是为了用在android项目中，我们先创建一个android项目起名字叫做DemoPlugin\n\n![](https://github.com/katherineqj/MIAOMIAO/blob/master/1.png)\n\n  那创建好项目好之后就要开始写插件了 ，可能会想是不是要去new一个xxxPlugin啊，可是我们会发现AndroidStudio中并没有这样后缀的项目正确的做法是 我们创建一个library类型的module 。那下面我的这个插件起名字叫kathiePlugin\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/2.png)\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/3.png)\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/4.png)\n\n\n\n- 点击完finish之后。来看看是不是创建了这样一个插件呢，他的目录结构是图中红框的部分， \n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/5.png)\n\n- 下一步我们要做的是删除kathiePlugin默认创建的部分文件 ，只留下部分的文件，其余全部删除了\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/6.png)\n\n那我们删了一些还要创建一些目标文件夹和文件\n\n首先我们要在`src/main/`这个路径下创建两个文件夹\n\n- 一个是`groovy/com/kathie/plugin`\n- 另外一个是`resources/META-INF/gradle-plugins`\n\n注意⚠️ 这里的**目录名字**千万不能写错 。不然运行的时候就会找不到\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/7.png)\n\n基础的创建工作大概就完成了 下来就进入到完善插件内容和配置信息这部分\n\n### 二. 完善插件内容和配置信息\n\n- 因为我们插件是用groovy语言写的（不用怕\n  我个人感觉和Java很像，而且不用会可以完成这篇教程，如果有深入研究的兴趣，可以自己找资料去看看）所以我们要把gradle改变一下成支持groovy的以及我们还要支持打包所以要用到maven。\n\n把插件下的gradle中的内容全部删除，将下面这段代码复制进去\n\n```groovy\napply plugin: 'groovy'\n\ndependencies {\n    compile gradleApi()\n    compile localGroovy()\n}\n\nrepositories {\n    mavenCentral()\n}\n```\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/8.png)\n\n- 下一步要在`com/kathie/plugin`新建一个`xxx.groovy`的文件，我们找不到后缀为groovy的创建步骤\n  这样就可以了（new-\u003efile-\u003emyPlugin.groovy ） 这个groovy名字可以随便起嘛？当然可以 不过这个名字后面有用到\n  我这里的groovy叫做`myPlugin.groovy`\n\n我们这个groovy文件的目标是成为gradle的 需要实现`org.gradle.api.Plugin`的接口 ，`apply()`方法中是插件执行的逻辑，我这个插件只是输出了 五句相同的代码，代码如下\n\n```groovy\npackage com.kathie.plugin\n\nimport org.gradle.api.Plugin\nimport org.gradle.api.Project\n\n\nclass myPlugin implements Plugin\u003cProject\u003e{\n\n    @Override\n    void apply(Project project) {\n\n        println \"-----------this is kethie plugin!----------\"\n        println \"-----------this is kethie plugin!----------\"\n        println \"-----------this is kethie plugin!----------\"\n        println \"-----------this is kethie plugin!----------\"\n        println \"-----------this is kethie plugin!----------\"\n\n\n    }\n}\n```\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/9.png)\n\n\n\n我们创建了groovy 下来就要声明了\n\n- 声明文件在目录`resources/META-INF/gradle-plugins`下，我们新建一个`xxx.properties`的文件\n  注意这个文件的名字是之后我们引用插件（apply）所需要的名字\n- 这个文件的内容就是指明我们自定义的类\n\n`implementation-class=自定义的类的路径 `\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/10.png)\n\n### 三.打包发布并且正确引用自定义插件\n\n- 前面我们已经自定义好了插件，下一步我们就要进行打包的过程了，我们需要在自定义插件的build.gradle里面指定打包的路径，版本号等参数信息代码指定好了之后我们需要编译一下\n  **点击右侧边栏 里面插件的build**，代码如下\n\n```groovy\napply plugin: 'groovy'\napply plugin: 'maven'\n\ndependencies {\n    compile gradleApi()\n    compile localGroovy()\n}\n\nrepositories {\n    mavenCentral()\n}\nuploadArchives {\n    repositories {\n        mavenDeployer {\n            repository(url: uri('repo'))\n            //设置插件的GAV参数\n            pom.groupId = 'com.kathie.myplugin'\n            pom.artifactId = 'myPlugin'\n            pom.version = 1.0\n        }\n    }\n}\n\n```\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/11.png)\n\n我们只是配置好了打包路径等等，还没有看到出现repo这个路径呢 那是因为我们还没有开始打包，还是右侧边栏的kathieplugin这个task下 在upload下面有一个**uploadArchives** 点击他就会开始打包了\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/12.png)\n\n- 他build完我们就可以看到在同级目录下出现了repo文件夹，我们点开就可以看到我们打包好的插件了\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/13.png)\n至此 打包就完成啦。下一步就是我们怎么引用他了\n\n我们需要在两个`build.gradle`中进行操作\n\n- 一个是app下的`build.gradle` 我们需要将插件apply进去\n  apply后面的名字是我们之前说过的`xxx.properties`文件的名字\n\n```groovy\napply plugin: 'kathie-plugin'\n\n```\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/14.png)\n\n- 还有一个是在project下的`build.gradle` ，我们需要指定插件的地址和版本之类的信息 这个跟的地址是repo的地址\n\n```groovy\n maven { \n         url uri(\"/Users/katherine/AndroidStudioProjects/DemoPlugin/kathieplugin/repo\")\n        }\n        \n dependencies {\n        classpath 'com.kathie.myplugin:myPlugin:1.0'\n    }\n\n```\n\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/15.png)\n\n 配置完了之后 我们重新编译一下 如果没有错误的话就可以在下面的gradleConsole中看到我们apply里面执行的逻辑啦\n![这里写图片描述](https://github.com/katherineqj/MIAOMIAO/blob/master/16.png)\n 好啦 这样我们就为gradle写好了一个自定义的插件了。\n\n有了这个基础 如果我们有一些在编译期间需要完成的需求就可以在插件中完成了。\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpengmaster%2Fplugindemo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpengmaster%2Fplugindemo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpengmaster%2Fplugindemo/lists"}