Android Gradle 开发与应用 (六) : 创建buildSrc插件和使用命令行创建Gradle插件

1. 前言

前文中,我们介绍了在Android中,如何基于Gradle 8.2,创建Gradle插件。这篇文章,我们以buildSrc的方式来创建Gradle插件。此外,还介绍一种用Cmd命令行的方式,来创建独立的Gradle插件的方式。

1.1 本文环境

  • Android Studio 版本 : Android Studio Iguana | 2023.2.1
  • Gralde版本 : gradle 8.4

2. buildSrc插件

buildSrc是一个特殊的源代码集,通常用于存放项目内部使用的自定义Gradle插件和任务。它的主要优势在于它会自动被Gradle识别并编译,然后Android Studio自动会将其添加到构建脚本的classpath中,因此无需手动添加或配置。这使得在项目的多个模块之间共享构建逻辑变得非常方便。此外,由于buildSrc是项目的一部分,因此它可以直接访问和使用项目中的其他代码和资源。

2.1 buildSrc插件和独立Gradle插件的区别

相比之下,单独的Gradle插件通常作为独立的项目来开发,并通过二进制形式(如jar包)发布到仓库中,供其他项目使用。这种插件通常具有更广泛的适用性,因为它们设计用于多个项目之间的复用。然而,开发这种插件需要更多的配置和发布步骤,并且它们不会直接访问到使用它们的项目的内部代码和资源。

2.2 新建buildSrc目录

在项目的根目录下,新建buildSrc文件夹,并添加如下的项目结构

在这里插入图片描述

buildSrc目录下的build.gradle中写下如下的内容

plugins {id 'java-gradle-plugin'
}gradlePlugin {plugins {greeting {id = 'com.heiko.buildsrc.plugin' //这里是插件的IDimplementationClass = 'com.heiko.buildsrc.MyPlugin' //这里是包名+类名}}
}

这里需要注意
Pluginjava语言编写,那么包名的上一级为java文件夹,pluginjava-gradle-plugin

plugins {id 'java-gradle-plugin'
}

Plugingroovy语言编写,那么包名的上一级为groovy文件夹plugingroovy

plugins {id 'groovy'
}

Pluginkotlin语言编写,那么包名的上一级为kotlin文件夹,pluginorg.gradle.kotlin.kotlin-dsl

plugins {id("org.gradle.kotlin.kotlin-dsl") version "4.1.2"
}使用 kotlin-dsl 插件的时候,需要mavenCentral仓库
repositories {mavenCentral()
}

2.3 依赖插件

我们Sync下项目,Android Studio自动会将其添加到构建脚本的classpath中。
接着我们只需要在appbuild.gradle中,去应用这个插件就可以使用了。

plugins {//省略了其他插件...//应用我们自定义的com.heiko.buildsrc.plugin插件id("com.heiko.buildsrc.plugin") apply true
}

2.4 查看日志

再次Sync下项目,可以看到如下日志,就表明我们配置buildSrc插件成功了 !

//...省略了其他日志 ...
> Configure project :app
这是我的第一个Gradle插件:MyPlugin.apply!> Task :prepareKotlinBuildScriptModel UP-TO-DATE
greeting config//...省略了其他日志 ...BUILD SUCCESSFUL in 14s
4 actionable tasks: 2 executed, 2 up-to-date

3.使用build.gradle.kts来新建buildSrc插件

使用build.gradle.kts和使用build.gradle基本是一样的,只需要将build.gradle修改为build.gradle.kts,然后将里面的代码从Groovy修改为Kotlin即可

plugins {//Plugin用Java语言编写时需添加`java-gradle-plugin` //等同于 id("java-gradle-plugin") apply true//Plugin用Groovy语言编写时需添加`groovy` //等同于 id("groovy") apply true//Plugin用Kotlin语言编写时需添加`kotlin-dsl` //等同于 id("org.gradle.kotlin.kotlin-dsl") version "4.1.2"// 也可以用 id("org.jetbrains.kotlin.jvm") version "1.9.10" apply true (不建议,这个只有Kotlin的语法,而没有Kotlin DSL的语法)}//使用 kotlin-dsl / org.jetbrains.kotlin.jvm 的时候,需要mavenCentral仓库
repositories {mavenCentral()
}gradlePlugin {plugins {create("greeting") {id = "com.heiko.buildsrc.plugin"//Java插件主类//implementationClass = "com.heiko.buildsrc.MyPlugin"//Groovy插件主类//implementationClass = "com.heiko.buildsrc.MyPluginGroovy"//Kotlin插件主类implementationClass = "com.heiko.buildsrc.MyPluginKotlin"}}
}

4. 更方便的新建插件的方式 : 命令行

除了在Android Studio中手动新建插件,我们还可以通过命令行来新建插件。

4.1 新建文件夹

首先需要新建一个文件夹,在文件夹里复制好如下内容,gralde文件夹gradlewgradlew.bat,这三个直接从一个现成的Android项目中复制过来就行。
在这里插入图片描述

4.2 运行命令行

打开cmd,进入该文件夹,然后执行如下命令,下述命令选其一即可。

4.2.1 创建使用Java的插件
gradlew init --type java-gradle-plugin
4.2.2 创建使用Groovy的插件
gradlew init --type groovy-gradle-plugin
4.2.3 创建使用Kotlin的插件
gradlew init --type kotlin-gradle-plugin

4.3 完成选项

执行命令后,会有几个问题选项,我们按需进行选择,最终看到BUILD SUCCESSFUL,就表示新建插件成功了
在这里插入图片描述
生成后的文件如下

在这里插入图片描述
这样子就很快的完成了一个Gradle独立插件的新建了。

5. Android Gradle系列文章

Android Gradle 开发与应用 (一) : Gradle基础-氦客-CSDN博客
Android Gradle开发与应用 (二) : Groovy基础语法-CSDN博客
Android Gradle开发与应用 (三) : Groovy语法概念与闭包-CSDN博客
Android Gradle开发与应用 (四) : Gradle构建与生命周期-CSDN博客
Android Gradle开发与应用 (五): 基于Gradle 8.2,创建Gradle插件-CSDN博客
Android Gradle 开发与应用 (六) : 创建buildSrc插件和使用命令行创建Gradle插件-CSDN博客

6. 参考文章

Using Plugins (gradle.org)
Gradle用户手册 - Gradle8.1.1中文文档 - API参考文档 - 全栈行动派 (qzxdp.cn)
编写 Gradle 插件 | Android Studio | Android Developers (google.cn)
Android Gradle8.0版本新建Gradle插件 - 掘金 (juejin.cn)
Gradle基础到进阶 - yechaoa的专栏 - 掘金 (juejin.cn)
【Gradle-8】Gradle插件开发指南 - 掘金 (juejin.cn)
【Gradle-9】Gradle插件发布指南 - 掘金 (juejin.cn)
Gradle自定义插件实践与总结 - 掘金 (juejin.cn)
创建Gradle插件记录 - 掘金 (juejin.cn)
配置 build | Android Studio | Android Developers (google.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/535582.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术派整合MyBatis-Plus

Mybatis-Plus大家都熟悉了吧?是一个Mybatis的增强,提供了一些额外功能,比如条件构造器、分页插件、代码生成器等以便我们更专注于业务,而不是SQL语句的编写 官方教程:简介 | MyBatis-Plus 整合MyBatis-Plus 非常简单…

【大数据开发--概念篇】

前言: 💞💞大家好,书生♡,今天主要和大家分享一下大数据的相关概念,以及我们大数据开发的环境,希望对大家有所帮助。 💞💞路漫漫,希望大家坚持下去&#xff0…

【系统架构设计师】系统工程与信息系统基础 01

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 文章目录 系列文章目录 前言 一、系统工程 ★ 二、信息系统生命周期 ★ 信息系统建设原则 三、信息系统开发方法 ★★ 四、信息系统的分类 ★★★ 1.业务处理系统【TPS】 2.管理信息系统【MIS】 3.决策支持系统…

ELK 安装部署

文章目录 1.日志收集规划2.Elasticsearch部署2.1.Elasticsearch安装2.2.Elasticsearch-head安装2.3.Elasticsearch设置分片数2.4.elasticsearch健康检查 3.Kibana部署4.Logstash部署5.Filebeat部署 开源中间件 # Elastic Stackhttps://iothub.org.cn/docs/middleware/ https:/…

【阿里云系列】-利用yaml文件部署NacosXxl-job到ACK

背景介绍 随着容器化的技术成熟落地,拥抱各种成熟的容器化集群平台是加速我们落地的必然之路,目前国内以阿里云、华为云、腾讯云为平台的供应商为主,国外则以AWS,Azure为主,让我们借助平台已有的优势进行快速落地提高…

VMware安装Ubuntu虚拟机

1. 安装VMware VMware中国官网:VMware - Delivering a Digital Foundation For Businesses VMware Workstation Player(官方个人免费版):VMware Workstation Player | VMware VMware Workstation Pro(商用收费版&am…

酷开系统走在前列,品牌重启增长,酷开科技成为品牌商合作目标

区别于火热的移动端,手机屏作为私密屏,往往面向的是用户个体,而电视作为家庭连接的重要枢纽,不仅仅定位于公共屏,同时也面向客厅场景发挥着其大屏传播的作用,这里不仅牵扯到大屏营销,也关联着大…

jQuery1.10.2升级到jQuery3.6.0返回结果异常

ajax请求代码: jQuery1.10.2 ajax返回结果: 取其TIPS的值,代码如下: let find $(data).find(TIPS); var resultfind[0].innerHTML; 返回值为空字符串。 jQuery3.6.0 ajax返回结果: 取其TIPS的值,代码如下&…

某赛通电子文档安全管理系统 DecryptApplication 任意文件读取漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

力扣思路题:重复的子字符串

注意比较j与j-i是否相同 bool repeatedSubstringPattern(char* s) {int i;int nstrlen(s);bool flag;for(int i1;i<n/2;i){if(n%i0){flagtrue;}for(int ji;j<n;j){if(s[j]!s[j-i]){flagfalse;break;}}if(flagtrue){return true;}}return false; }

运行时错误‘53’:文件未找到:MathPage.WLL。Word粘贴复制时报错解决方案!

最近写文章使用 Word 时&#xff0c;粘贴复制总是出现这个报错&#xff0c;不能 ctrlc 和 v 好叫人苦恼。百度大致检索了一些过程&#xff0c;仍然有必要记录自己的问题解决过程。 快让本文进你的文件夹吃灰吧~ 报错如下&#xff1a; 运行时错误‘53’&#xff1a; 文件未找…

差旅补助解决方案|数字化差补赋能业务提效

长期以来&#xff0c;差旅补助一直是企业为了激励员工出差并表达对员工的关怀而采取的一种方式&#xff0c;以经济和福利支持来鼓励员工积极投入工作。然而&#xff0c;由于传统差旅补助的核算、发放和管理方式存在诸多问题&#xff0c;往往适得其反&#xff0c;无法实现企业的…