目录

  • 1. 脚本插件
  • 2. 对象插件
    • 在build.gradle中写Plugin
    • 创建单独的 “buildSrc” Module
    • 上传远端maven仓库

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

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

1. 脚本插件

假设我们有一个脚本名为 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

2. 对象插件

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

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

在build.gradle中写Plugin

apply plugin:UserPlugin// 实现Plugin
class UserPlugin implements Plugin<Project>{@Overridevoid apply(Project project){println "hello"   }
}

创建单独的 "buildSrc" Module

  • 创建一个 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 sdkcompile gradleApi()//groovy sdkcompile localGroovy()
}
repositories {jcenter()
}

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

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

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

上传远端maven仓库

  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 sdkcompile gradleApi()//groovy sdkcompile 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:versionclasspath 'com.android.hq.testplugin:testplugin:1.0.0'}
}

自定义Gradle插件(十)相关推荐

  1. 使用AndroidStudio创建自定义gradle插件并被引用实战例子

    项目中引入自定义Gradle plugin一般有三种方法: 直接写在 build.gradle中. plugin源码放到rootProjectDir/buildSrc/src/main/groovy目 ...

  2. Android如何自定义Gradle插件

    Android-如何自定义gradle插件 自定义gradle插件可以实现定制自己的构建流程,以达到复用目的: ##1. 自定义插件方式 自定义插件有三种方式 添加脚步 在你的app项目的build. ...

  3. Android组件化开发实践(九):自定义Gradle插件

    本文紧接着前一章Android组件化开发实践(八):组件生命周期如何实现自动注册管理,主要讲解怎么通过自定义插件来实现组件生命周期的自动注册管理. 1. 采用groovy创建插件 新建一个Java L ...

  4. 创建第一个适用于Android的自定义Gradle插件-第2部分:在构建时生成资源

    A hands on tutorial to get started with adding custom functionality to your Android builds using Kot ...

  5. 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )

    文章目录 一.Android 中的 WebP 图片格式使用 二.WebP 格式转换 三.WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android St ...

  6. 通过自定义Gradle插件修改编译后的class文件

    我的简书同步发布:通过自定义Gradle插件修改编译后的class文件 转载请注明出处:[huachao1001的专栏:http://blog.csdn.net/huachao1001] 或许你会觉得 ...

  7. 自定义Gradle插件之Hello World

    自定义Gradle插件之"Hello World" 0.新建一个用于开发这个插件的文件夹 1.确定Plugin id Plugin id一般定义为java 包名. 由字母和数字及& ...

  8. Gradle学习第一篇——自定义Gradle插件

    纸上得来终觉浅,绝知此事要躬行. 自定义Gradle插件有三种方法,各有优劣处,同类博客文章很多但是有的语法已经过时了,笔者运行环境 Android Studio Dolphin && ...

  9. 【错误记录】自定义 Gradle 插件报错 ( Could not find implementation class x for plugin x specified in jar:file )

    文章目录 一.报错信息 二.解决方案 一.报错信息 参考 [Android Gradle 插件]自定义 Gradle 插件模块 ④ ( META-INF 中声明自定义插件的核心类 | 在应用中依赖本地 ...

  10. Android 自定义gradle插件

    android自定义gradle插件的步骤 1.首先我们新建一个android项目 2.然后新建一个android module a.删除一些不需要的文件目录,然后新建groovy,resources ...

最新文章

  1. 学习结构[记录]类型(9) - 变体结构
  2. win7 VS2013 新建工程 编译lua5.1 静态库
  3. linux苹果开发者p12,苹果testflight发布流程
  4. wps单机无网络版_单平台销量破百万,这个国产单机系列要出网游,还要上主机...
  5. docker 其他电脑访问权限_docker – 从远程计算机连接到容器
  6. jquery报.live() is not a function的解决方法
  7. 基于php-fpm的配置详解
  8. 蓝桥杯 ADV-158 算法提高 新建Microsoft Word文档
  9. 用Python计算最长公共子序列和最长公共子串
  10. Idea 工具在java文件中怎么避免 import .*包
  11. Skyline TEP5.1.3二次开发入门——初级(四)
  12. 初探MYD-AM335x开发板
  13. Android:在PC屏幕上显示Android手机屏幕
  14. 交换最大数与最小数java编程_善知教育笔记之JavaSE_Java编程基础
  15. 免费临时网页邮箱(可丢弃式邮箱)
  16. 4步教你学会使用matlab模糊控制工具箱
  17. 解读平高球动作要领,平高球怎么打
  18. 一步步蚕食的意思_第800章 一步步蚕食
  19. eclipse设置系统的字体
  20. PHP CURL解决 此图片来自QQ微信公众平台,未经允许不可引用

热门文章

  1. OD的hit跟踪和run跟踪
  2. 【Boost】boost库中thread多线程详解5——谈谈线程中断
  3. 复制SQLSERVER数据库文件
  4. 告别DNS劫持,一文读懂DoH
  5. 一句话概括互联网巨头,简直不要太真实!哈哈哈哈哈哈哈哈哈
  6. RabbitMQ Network Partitions 处理策略
  7. C++中的多态(一)
  8. 若只让我推荐一名LiveVideoStackCon上海的讲师,就是他
  9. 【线上分享】高性能视频推理引擎优化
  10. 音视频技术开发周刊 | 157