You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradle中所有Release变体打包后执行自定义任务?

嘿,这个问题我熟!你完全不用手动给每个变体挨个绑定任务,Gradle提供了遍历所有Android构建变体的API,能轻松实现批量绑定,不管你新增多少变体都能自动生效。

核心解决方案

直接在你的android配置块里,通过遍历所有应用变体,给每个变体的打包任务设置finalizedBy关联你的customTask就行。具体代码如下:

android {
    // 这里保留你原本的Android配置(比如compileSdk、defaultConfig等)

    // 你的自定义任务,逻辑不变
    task customTask {
        doLast {
            // 在这里实现你的解压APK、收集SHA1值的逻辑
            println "执行自定义任务:处理APK并收集SHA1"
            // 你的具体业务代码...
        }
    }

    // 遍历所有应用变体,自动绑定打包任务和自定义任务
    applicationVariants.all { variant ->
        // 获取当前变体对应的打包任务(比如packageDbRelease、packageARRelease)
        def packageTask = variant.getPackageApplicationProvider().get()
        // 设置打包任务完成后立即执行customTask
        packageTask.finalizedBy(customTask)
    }
}
可选:只针对Release变体执行

如果你只希望在Release版本的APK生成后执行任务,可以加个判断过滤:

applicationVariants.all { variant ->
    // 只处理Release类型的变体
    if (variant.buildType.name.equalsIgnoreCase("release")) {
        def packageTask = variant.getPackageApplicationProvider().get()
        packageTask.finalizedBy(customTask)
    }
}
为什么这能生效?
  • applicationVariants.all会在Gradle完成所有变体配置的评估后执行,确保能获取到每个变体对应的打包任务,不管你有多少个渠道、构建类型的组合。
  • getPackageApplicationProvider().get()是当前Gradle Android插件中获取打包任务的标准方式,兼容较新的Gradle版本(如果是旧版Gradle,可能直接用variant.packageApplication,但推荐用Provider方式更稳妥)。

这样不管你新增多少个变体(比如packageXXRelease),都不需要修改代码,Gradle会自动帮你完成绑定。

内容的提问来源于stack exchange,提问作者Dhayanand Bhaskar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:53:47