Skip to content

任务系统 (Tasks)

Gradle 构建的本质就是执行一系列有依赖关系的 Task。

1. 常用内置 Task

bash
./gradlew assembleDebug    # 编译并生成测试包 (APK)
./gradlew bundleRelease     # 编译并生成生产包 (AAB)
bash
./gradlew clean            # 删除 build 目录
./gradlew lint             # 静态代码检查
./gradlew test             # 运行所有本地单元测试
bash
./gradlew :app:dependencies # 查看应用模块的完整依赖树 (解决版本冲突利器)

2. 编写自定义 Task

build.gradle.kts 中使用 Kotlin DSL 定义任务。

简单打印任务

kotlin
tasks.register("hello") {
    group = "custom"
    description = "打印问候语"
    
    doLast {
        println("Hello from Custom Task!")
    }
}

任务依赖

kotlin
tasks.register("myTask") {
    // 强制先运行 clean 任务
    dependsOn("clean") 
    doLast {
        println("Cleaning finished, running myTask.")
    }
}

3. 任务输入与输出 (增量构建)

Gradle 之所以快,是因为它支持增量构建。如果一个 Task 的输入文件没变,且输出文件已经存在,它就会显示为 UP-TO-DATE 并跳过。

kotlin
abstract class CopyFileTask : DefaultTask() {
    @get:InputFile
    abstract val sourceFile: RegularFileProperty

    @get:OutputFile
    abstract val destinationFile: RegularFileProperty

    @TaskAction
    fun action() {
        sourceFile.get().asFile.copyTo(destinationFile.get().asFile, overwrite = true)
    }
}

4. 常用技巧:修改 APK 名称

kotlin
android {
    applicationVariants.all {
        val variant = this
        variant.outputs.all {
            val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl
            output.outputFileName = "MyApps-\${variant.name}-\${variant.versionName}.apk"
        }
    }
}