自定义Gradle插件(十)

目录


gradle插件分成脚本插件和对象插件:

  • 脚本插件:一个普通的构建脚本,可以导入到其他的构建脚本中。
  • 对象插件:实现了org.gradle.api.Plugin接口。

假设我们有一个脚本名为 sayhello.gradle ,它里面有一个task:

task sayHello << {
    println 'hello world'
}

然后我们在build.gradle中依赖这个外部脚本,调用Project的apply方法,apply方法调用时传入from属性。

apply from: 'sayhello.gradle'

此时我们运行gradle sayHello 命令,可以看到sayHello 这个task执行了:

:sayHello
hello world

有三种形式可以定义对象插件:

  • 直接在build.gradle中编写Plugin,这种方式这种方法写的Plugin无法被其他 build.gradle 文件引用。
  • 单独的一个Module,这个Module的名称必须为buildSrc,同一个工程中有的构建文件够可以引用这个插件,但是不能被其他工程引用。
  • 在一个项目中自定义插件,然后上传到远端maven库等,其他工程通过添加依赖,引用这个插件。
apply plugin:UserPlugin

// 实现Plugin
class UserPlugin implements Plugin<Project>{
    @Override
    void apply(Project project){
        println "hello"   
    }
}
  • 创建一个 Module (Phone&Tablet Module 或 Android Librarty 都可以),Module的名称必须为 buildSrc。
  • 将Module里面的内容删除,只保留build.gradle文件和src/main目录。
  • 我们开发的 gradle 插件相当于一个 groovy 项目。所以需要在 main 目录下新建 groovy 目录。
  • 然后创建一个 Java 文件一样的方式创建一个 groovy 文件,比如包名为 com.android.xx 的 TestPlugin.groovy 文件。

因为gradle插件实际上就是groovy项目,所以需要groovy和gradle的sdk,需要在buildSrc下面的build.gradle修改成:

apply plugin: 'groovy'
 
dependencies {
    //gradle sdk
    compile gradleApi()
    //groovy sdk
    compile localGroovy()
}
repositories {
    jcenter()
}

使用这个插件,需要在app的build.gradle添加

apply plugin: com.android.hq.testplugin.TestPlugin

输入 ./gradlew tasks,我们可以看到 testPlugin 已经在task列表中。

  1. 创建一个新的 Project。
  2. 同样创建一个 Module (Phone&Tablet Module 或 Android Librarty 都可以),Module的名称随意。
  3. 将Module里面的内容删除,只保留build.gradle文件和src/main目录。
  4. 我们开发的 gradle 插件相当于一个groovy项目。所以需要在main目录下新建groovy目录。
  5. 然后创建一个 Java 文件一样的方式创建一个 groovy文件,比如报名为 com.android.xx 的 TestPlugin.groovy 文件。
  6. 现在,我们已经定义好了自己的 gradle 插件类,接下来就是告诉 gradle,哪一个是我们自定义的插件类,因此,需要在 main 目录下新建 resources 目录,然后在 resources 目录里面再新建 META-INF 目录,再在 META-INF 里面新建 gradle-plugins 目录。最后在 gradle-plugins 目录里面新建 properties 文件,注意这个文件的命名,你可以随意取名,但是后面使用这个插件的时候,会用到这个名字。比如,取名为
    com.android.xx.properties,而在其他 build.gradle 文件中使用自定义的插件时候则需写成:apply plugin: 'com.android.xx'
  7. 然后在com.android.hq.testplugin.properties文件里面指明你自定义的类:implementation-class=com.android.hq.testplugin.TestPlugin
  8. 修改build.gradle: 因为我们要用到 groovy 以及后面打包要用到 maven ,所以在我们自定义的 Module 下的 build.gradle 需要添加如下代码:
apply plugin: 'groovy'
apply plugin: 'maven'
 
dependencies {
    //gradle sdk
    compile gradleApi()
    //groovy sdk
    compile localGroovy()
}
repositories {
    mavenCentral()
}
  1. 前面我们已经自定义好了插件,接下来就是要打包到Maven库里面去了,你可以选择打包到本地,或者是远程服务器中。
//group和version在后面使用自定义插件的时候会用到
group='com.android.xx'
version='1.0.0'
 
uploadArchives {
    repositories {
        mavenDeployer {
            //提交到远程服务器:
            //repository(url: "http://www.xxx.com/repos") {
            //    authentication(userName: "admin", password: "admin")
            //}
            //本地的Maven地址设置为/mnt/TestRepos/
            repository(url: uri('/mnt/TestRepos/'))
        }
    }
}
  1. 然后通过gradle的uploadArchives就可以执行打包上传下载了。我们可以在对应的文件目录下可以看到对应的jar包。
  2. 我们可以在Module的build的gradle文件中指定Mavne的地址,自定义插件的名称和依赖包名。

//com.android.hq.testplugin.TestPlugin为resources/META-INF/gradle-plugins 下的properties文件名称
apply plugin: 'com.android.xx'
 
buildscript {
    repositories {
        maven {
            //本地Maven仓库地址
            url uri('/mnt/TestRepos/')
        }
    }
    dependencies {
        //格式为-->group:module:version
        classpath 'com.android.hq.testplugin:testplugin:1.0.0'
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值