Android插件开发—— Hypnus

前言

Hypnus是古希腊神话中的睡神,以Hypnus命名这个插件是希望我们程序员能够得到更多的休息。

由于项目越来越大,不管是用模块化还是组件化从点击运行按钮到项目编译完成需要一段时间,Hypnus要做的就是在编译完成后能够以音乐的形式通知到我们开发者(现在AndroidStudio在处于后台时候编译完成是有通知提示的,但我要做的是希望能够解放我们的双眼)。这样我们开发者可以在不影响开发效率情况下,稍作休息。

由于Hypnus并不会影响到源代码,并且需要知晓编译、运行的task执行完成的状态,因此Hypnus使用plugin的形式开发。

Hypnus插件开发

首先,我们要知道插件是什么。在Project的gradle中会有这样的代码:

dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }

没错,这两个就是插件。下面看看如何开发一个Android插件

  1. 创建一个module
    这个module选择什么类型呢?其实无所谓,你可以先选择一个java-library,我们把该module命名为hypnus。

  2. 将hypnus里gradle中的内容全部替换成如下内容:

    apply plugin: 'groovy'
    
    dependencies {
        // gradle sdk
        compile gradleApi()
        // groovy sdk
        compile localGroovy()
    }
    
  3. main/java重命名为在main/groovy,并在包下面创建Hypnus.groovy。注意后缀名。文件内容如下:

    public class Hypnus implements Plugin<Project> {
    
        @Override
        void apply(Project project) {
            System.out.println("===============Hypnus Start================")
            System.out.println(project.name)
            System.out.println("===============Hypnus   End================")
        }
    }
    
  4. 在main文件夹下,依次创建resources/META-INF/gradle-plugins文件夹

  5. 在上一步中创建的gradle-plugins文件夹中创建hypnus.properties,内容如下:

    implementation-class=com.fcat.android.plugin.hypnus.Hypnus
    
  6. 发布插件到本地
    在module下的gradle文件中添加maven的支持,最终内容如下:

    apply plugin: 'groovy'
    apply plugin: 'maven'
    
    dependencies {
        // gradle sdk
        compile gradleApi()
        // groovy sdk
        compile localGroovy()
    }
    
    uploadArchives {
        repositories {
            mavenDeployer {
                pom.groupId = "com.fact.android.plugin"
                pom.artifactId = "hypnus"
                pom.version = "0.0.1"
                //本地路径
                repository(url: uri("/Users/fcat/Documents/maven/repo"))
            }
        }
    }
    

    然后在gradle的视图中双击击uploadArchives
    在这里插入图片描述
    这样在**/Users/fcat/Documents/maven/repo** 的目录下就可以看到该插件

  7. 使用插件
    在project的gradle中添加插件及本来插件路径,代码如下:

    buildscript {
        ext.kotlin_version = '1.3.31'
        repositories {
            maven {
                url 'file:///Users/fcat/Documents/maven/repo'
            }
           	google()
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.4.2'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
            classpath 'com.fcat.android.plugin:hypnus:0.0.1'
        }
    }
    

    在app的gradle中添加对该插件的引用:

    apply plugin: 'hypnus'
    

    这样在重新Rebuild Project的时候在Build Output会有以下输出:
    在这里插入图片描述
    当看到上面的输入信息时表名该插件应用成功。

  8. Hypnus功能实现
    上面做的插件什么功能也没有,接下来看看如何给插件添加功能。

    针对当前的需求,我们需要知道项目是何时编译完成的,非常幸运在 apply(Project project) 的方法中就包含了这样的回调:

    public class Hypnus implements Plugin<Project> {
    
        @Override
        void apply(Project project) {
            project.getGradle().addBuildListener(new BuildListener() {
                @Override
                void buildStarted(Gradle gradle) {
    
                }
    
                @Override
                void settingsEvaluated(Settings settings) {
    
                }
    
                @Override
                void projectsLoaded(Gradle gradle) {
    
                }
    
                @Override
                void projectsEvaluated(Gradle gradle) {
    
                }
    
                @Override
                void buildFinished(BuildResult buildResult) {
                    //TODO 项目build完成可以播放音乐了
                }
            })
        }
    }
    

至此我们的Hypnus插件开发完毕

本来是想把完整代码都写上,但有几个知识点并不在插件开发范围内

总结

做下总结,相关知识点如下:

  1. 插件开发的基本流程
  2. 如何发布自己的 jar/aar 到本地仓库
  3. 插件中如何对gradle做拓展

项目地址:https://github.com/FullCat/Hypnus

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得食猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值