自定义 Task 编写
当内置的 assemble、clean 等任务无法满足流程时,你可以编写自定义 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 之前自动运行某个任务,可以使用 dependsOn 或 finalizedBy。
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 配置
}
}