Skip to content

自定义 Task 编写

当内置的 assembleclean 等任务无法满足流程时,你可以编写自定义 Task。

1. 基础结构

自定义 Task 可以直接写在构建脚本里,也可以写在 buildSrc 目录中以供复用。

kotlin
// 定义任务类
abstract class MyReportTask : DefaultTask() {
    
    @get:Input
    abstract val reportName: Property<String>

    @TaskAction
    fun run() {
        println("正在生成报告: \${reportName.get()}")
    }
}

// 注册并配置任务
tasks.register<MyReportTask>("generateReport") {
    reportName.set("周报")
    group = "documentation"
}

2. 挂载到构建流程

如果你希望在每次编译 APK 之前自动运行某个任务,可以使用 dependsOnfinalizedBy

kotlin
// 运行 assembleDebug 前,必须先运行 hello
tasks.named("assembleDebug") {
    dependsOn("hello")
}
kotlin
// 运行完 clean 后,自动运行 hello
tasks.named("clean") {
    finalizedBy("hello")
}

3. 操作编译产物 (AGP API)

现代 Android Gradle 插件支持通过 onVariants 修改产物。

kotlin
androidComponents {
    onVariants { variant ->
        // 在此处动态修改 Task 配置
    }
}