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中写下如下的内容

groovy 复制代码
plugins {
    id 'java-gradle-plugin'
}

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

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

groovy 复制代码
plugins {
    id 'java-gradle-plugin'
}

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

groovy 复制代码
plugins {
	id 'groovy'
}

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

groovy 复制代码
plugins {
	id("org.gradle.kotlin.kotlin-dsl") version "4.1.2"
}

使用 kotlin-dsl 插件的时候,需要mavenCentral仓库
repositories {
    mavenCentral()
}

2.3 依赖插件

我们Sync下项目,Android Studio自动会将其添加到构建脚本的classpath中。

接着我们只需要在appbuild.gradle中,去应用这个插件就可以使用了。

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

2.4 查看日志

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

groovy 复制代码
//...省略了其他日志 ...
> 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即可

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的插件
cmd 复制代码
gradlew init --type java-gradle-plugin
4.2.2 创建使用Groovy的插件
cmd 复制代码
gradlew init --type groovy-gradle-plugin
4.2.3 创建使用Kotlin的插件
cmd 复制代码
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)

相关推荐
氦客25 分钟前
Android Compose 图层的合成 : BlendMode
android·compose·jetpack·layer·blendmode·graphics·图层的合成
Sahadev_1 小时前
GitMemo 安卓版发布了:现在可以随时随地查看和记录自己的笔记
android·笔记·创业创新
龙之叶2 小时前
Android 12:在 ActivityStarter 层拦截分享、搜索与 HTTP 外链
android·chrome·http
牛奔2 小时前
Android 开发通用解决方案:使用 ADB 彻底卸载已安装 App(解决版本降级安装失败问题)
android·adb
tryqaaa_3 小时前
学习日志(三)【php语法学习,iscc校赛wp】
android·网络协议·学习·安全·web安全·web
plainGeekDev3 小时前
Kotlin协程面试题:suspend原理都说不清,协程你真会用?
android·面试·kotlin
Kapaseker3 小时前
Android 官方开始拥抱 WebView
android
ujainu小4 小时前
CANN hixl:大模型 PD 分离场景的零拷贝通信库
android·java·缓存
专注VB编程开发20年4 小时前
b4a用VB语言开发安卓APP-图片缩放库ZoomImageView讲解-双指缩放 + 单指拖动核心源码
android·java·前端
恋猫de小郭5 小时前
Dart 大更新,新增语法糖和各种能力,真的难得了
android·前端·flutter