Android-自定义Gradle任务插件

背景

有时候,我们会需要在项目中用到自定义Gradle插件,但大多数时间通过tasks.register已经足够。但是,往往有时候这样会容易造成脚本文件代码过于臃肿,且还不能更好的复用。这时候我们需要编写自己的Gradle插件。

创建gradle项目

在安卓项目根目录中创建一个文件夹,例如example-plugin,然后在里面创建一个根脚本,用于描述脚本及它的应用,例如:

plugins {
    `kotlin-dsl`
}

repositories {
    google()
    mavenCentral()
}

dependencies {
    implementation("com.android.tools.build:gradle:8.13.2")
    implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.20")
    implementation("org.yaml:snakeyaml:2.6")
    implementation("com.squareup.okhttp3:okhttp:4.12.0")
    implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
}

gradlePlugin {
    plugins {
        create("example-plugin"){
            id = "com.example.plugin"
            group = "custom"
            implementationClass = "ExamplePlugin"
        }
    }
}

这样,我们完成了一个插件项目的声明,接着编写插件类: ExamplePlugin

ExamplePlugin创建在项目中:src/main/kotlin下

astract class ExampleTaskExtension {
    abstract val inputArg: Property<String>
}

abstract class ExampleTask@Inject constructor(
    private val execOperations: ExecOperations //如果要执行命令行,用这个注入对象
) : DefaultTask(){

    @get: Input
    abstract val inputArg: Property<String>

    @TaskAction
    fun runTask(){
      val myInputArg = inputArg.get()
      logger.lifecycle("任务参数:$myInputArg")
    }

}

class ExamplePlugin : Plugin<Project> {

    override fun apply(target: Project) {
        val extension = target.extensions.create(
            "exampleTaskConfig",
            ExampleTaskExtension::class.java
        )
        target.tasks.register<ExampleTask>("RunExampleTask") {
            group = "插件分组"
            description = "插件任务描述"
            inputArg.set(extension.inputArg.convention(...默认值)) //设置输入参数
            .... /// 其他代码
        }
    }
}

好的,你现在已经创建好了一个插件了,我们把它搬运到主项目中去

主项目集成Gradle

首先在项目 settings.gradle.kts 中导入这个插件

...
pluginManagement {
      ...
      includeBuild("./example-plugin")
}
...

在项目app模块引用入这个插件 build.gradle.kts

plugins {
     id("com.example.plugin")
     ...
}
... 
exampleTaskConfig {
    inputArg = "xxxx" //配置插件参数
}

配置完成,刷新gradle,使项目进入正常状态,此时我们就能在 gradle 面板中找到我们定义的任务了

- gradle面板
   - 插件分组
       - RunExampleTask           // [tip = "插件任务描述"]
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容