1.1二进制插件
二进制插件就是实现了org.gradle.api.Plugin接口的插件,它们可以有plugin id,二进制插件一般都是被打包在一个jar里独立发布的,比如我们自定义的插件,在发布的时候我们也可以为其制定plugin id,这个plugin id最好是一个全限定名称,就像你的包名一样,这样发布的插件plugin id就不会重复了。
1.2脚本插件
build.gradle文件
apply from: 'version.gradle' task ex << { println "app版本:" + versionName + ",版本号是:" + versionCode }
version.gradle文件
ext { versionName = '1.1' versionCode = 1 }
其实这不能算一个插件,它只是一个脚本。应用脚本插件其实就是把这个脚本加载进来,和二进制插件不同的是它使用的是from关键字,后面紧跟的是一个脚本文件,可以是本地的,也可以是网络的,如果是网络上的话要使用HTTP URL。
Gradle插件是使用Groovy进行开发的,而Groovy其实是可以兼容Java的。Android Studio其实除了开发Android App外,完全可以胜任开发Gradle插件这一工作,下面来讲讲具体如何开发。
1.首先,新建一个Android项目,新建一个Android Module项目,类型选择Android Library。
2.将新建的Module中除了build.gradle文件外的其余文件全都删除,然后删除build.gradle文件中的所有内容。
打开Module下的build.gradle文件,输入
apply plugin: 'groovy' apply plugin: 'maven' dependencies { compile gradleApi() compile localGroovy() } repositories { mavenCentral() }
3.在新建的module中新建文件夹,src/main/groovy目录,这时候groovy文件夹会被Android识别为groovy源码目录。除了在main目录下新建groovy目录外,你还要在main目录下新建resources目录,同理resources目录会被自动识别为资源文件夹。在groovy目录下新建项目包名,就像Java包名那样。resources目录下新建文件夹META-INF,META-INF文件夹下新建gradle-plugins文件夹。META-INF和gradle-plugins必须是父子目录。这样,就完成了gradle 插件的项目的整体搭建。目前,项目的结构是这样的。
下面我们在包名下新建一个文件,命名为CustomPlugin.groovy
package com.pl.plugin import org.gradle.api.DefaultTask import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.TaskAction class CustomPlugin implements Plugin<Project> { @Override void apply(Project project) { project.tasks.create('writeFile', CustomPluinTask) { def greeting = project.extensions.create('greeting', ParamsExtension);//使用类型向插件传递参数 destination { project.greetingFile } doFirst { String args = project.args;//通过ext直接传递参数 message = args + " " + greeting.message println "doFirst greeting.message:" + greeting.message } doLast { println(project.file(destination).text) } } } } class ParamsExtension { String message = "pl init" } class CustomPluinTask extends DefaultTask { def destination String message = "pl test" File getDestination() { //创建路径为destination的file project.file(destination); } @TaskAction def greet() { def file = getDestination(); file.parentFile.mkdirs(); //向文件中写文本 file.write(message); } }
然后在resources/META-INF/gradle-plugins目录下新建一个properties文件,注意该文件的命名就是你只有使用插件的名字,这里命名为gradlePlugin.properties,在里面输入
implementation-class=com.pl.plugin.CustomPlugin
注意:包名需要替换为你自己的包名,这样就完成gradle插件的开发工作,下面简单讲解一下,插件所做的整改,插件里面定义了一个名为writeFile的task,task将指定的message信息写入到,由destination指定路径的文件中。
3.发布到本地仓库中
接着,我们需要将插件发布到本地仓库就好了,在module项目下的buidl.gradle文件中加入发布的代码。
uploadArchives { repositories { mavenDeployer { //设置插件的GAV参数 pom.groupId = 'com.pl.plugin' pom.artifactId = 'gradlePlugin' pom.version = '1.0.0' //文件发布到下面目录 repository(url: uri('../repo')) } } }
上面的group和version的定义会被使用,作为maven库的坐标的一部分,group会被作为坐标的groupId,version会被作为坐标的version,而坐标的artifactId被用作插件的模块名称。后面定位引用插件时,将会用到上面设置的值。然后maven本地仓库的目录就是当前项目目录下的repo目录。
点击uploadArchives这个Task,就会在项目下多出一个repo目录,里面存着这个gradle插件。
发布到本地maven仓库后,我们就使用它,接下来我们在项目根目录的build.gradle文件中加入如下代码
apply plugin: 'gradlePlugin' ext.args = "hello" greeting { message = 'test success' } ext.greetingFile = "$buildDir/hello.txt" buildscript { repositories { maven { url = uri("$rootDir/repo") } google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.0' classpath 'com.pl.plugin:gradlePlugin:1.0.0' } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
注意:apply plugin后面引号内的名字就是前文gradlePlugin.properties文件的文件名,而class path后面引号里的内容,就是上面grade中定义的group,version以及moduleName所共同决定的,和maven是一样的。
相关推荐
本篇文章将深入探讨如何在Android Studio中自定义Gradle插件,以此来扩展和优化项目的构建流程。 一、Gradle插件概述 Gradle插件是一种可复用的构建逻辑,它们可以被应用到Gradle项目中以执行特定任务,如编译代码...
自定义Gradle插件是Gradle的强大特性之一,可以扩展其功能以满足特定项目需求。本篇将详细介绍如何通过自定义Gradle插件来修改编译后的class文件。 首先,理解自定义Gradle插件的基本概念。Gradle插件本质上是一些...
本篇将深入探讨如何自定义Gradle插件,以及如何通过插件修改编译后的class文件和监控Task任务执行情况。 一、自定义Gradle插件基础 1. 创建插件类:首先,我们需要创建一个Java或Kotlin类,继承自`org.gradle.api....
创建自定义Gradle插件涉及以下关键步骤: 1. **定义插件类**:实现`Plugin`接口,并覆盖`apply`方法,此方法是插件执行的起点。 2. **注册插件**:在`build.gradle`文件中使用`plugins`块注册插件,或者在`...
自定义Gradle 插件的三种主要形式的demo源码,以及上传代码到本地仓库的实现,博客地址https://blog.csdn.net/CrazyMo_/article/details/89070618
**Kotlin-Gradle-Plugin-Template:快速构建自定义Gradle插件的起点** **简介** `kotlin-gradle-plugin-template` 是一个专为开发者设计的模板项目,它简化了使用Kotlin语言开发Gradle插件的过程。通过这个模板,你...
**GradlePluginDemo: 自定义Gradle插件** 在Java开发中,Gradle是一个非常流行的构建工具,它允许开发者通过编写Groovy或Kotlin DSL脚本来管理项目构建过程。自定义Gradle插件则可以进一步扩展Gradle的功能,以满足...
自定义Gradle插件可以极大地提升项目构建的灵活性和效率。`gradle-plugin-bootstrap`是一个示例项目,旨在帮助开发者快速搭建自定义Gradle插件的基础结构。 **一、Gradle插件基础** 1. **插件定义**: 在Gradle中,...
在Android开发领域,Gradle是主流的构建工具,而自定义Gradle插件则能极大地提升项目的构建效率和灵活性。本文将深入探讨如何使用Android Studio开发Gradle插件,主要分为以下几个方面: 1. **Gradle插件基础** - ...
同时,项目利用了Kotlin的DSL(Domain Specific Language)来编写Gradle构建脚本,使得构建配置更加直观和易读。 在项目结构方面,采用了模块化设计,将应用拆分为独立的模块,每个模块负责特定的功能,这有助于...
创建自定义Gradle插件主要有以下步骤: 1. **定义插件类**:在Java或Kotlin中,我们需要创建一个类,该类实现`org.gradle.api.Plugin`接口。这个类是插件的核心,它包含对目标构建对象(通常是`Project`)进行操作...
本文将详细探讨如何在Android Studio中创建和使用自定义Gradle插件。 1. **了解Gradle插件** - **Gradle插件的本质**:插件是一组扩展了Gradle核心功能的任务和配置。它们可以注入新的构建阶段,添加自定义任务,...
AopAutoTryCatch 使用Javassist(一个自定义的... Javassist自定义Gradle插件转变二,如何使用使用注解@AutoTryCatch来捕获异常支持catch所有异常 /** * 无崩溃,会catch所有Exception */ @AutoTryCatch public void ca
最近在研究一些android中使用AOP的方式进行埋点的技术,其中很多都使用到了在编译时进行代码处理,大多数都是使用了自定义的gradle插件技术,所以一直比较好奇这个gradle插件是如何实现,经过学习和实践之后特此做一...
学习和掌握自定义Gradle插件的开发不仅可以提高个人技能,还能让你更好地理解和利用Gradle的强大功能。通过实践,你可以为自己的项目定制出更加高效、符合业务需求的构建流程。在Android Studio中,Gradle插件的开发...
"GradlePluginDemo.zip" 文件包含了一个自定义Gradle插件的示例,这对于理解如何扩展Gradle功能具有重要意义。 首先,我们来详细探讨一下Gradle插件。Gradle插件是预先编写好的代码片段,它们为Gradle构建过程添加...
创建自定义Gradle插件,我们可以为项目定制构建过程,满足特定需求。 创建Gradle插件的第一步是定义插件的类。你需要继承`org.gradle.api.Plugin<T>`接口,并实现`apply(T target)`方法。这里的`T`通常是`Project`...
该插件将是一个自定义的gradle插件,它将使工作流程更加简单。 当然,脚本/插件旨在与java和android project一起使用。项目结构示范项目描述应用程式演示应用模块的lib-android 演示android库模块lib-android-sub ...