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

如何在Android构建Release Bundle后执行指定Gradle任务?

解决Gradle任务绑定Release Bundle构建后执行的问题

先修正你的signBundle任务写法

你之前把Exec任务的核心配置放在doLast里是错误的——Exec类型任务本身就是用来执行命令行的,应该直接在任务块里配置属性,而不是嵌套在doLast中。doLast是给任务添加额外的执行动作,而Exec任务的workingDir、commandLine这些是任务本身的配置项,必须在配置阶段就确定。修正后的任务:

task signBundle(type: Exec) {
    workingDir "$projectDir/release/"
    commandLine 'bash', '-c', "java -jar file.jar"
}

这也是你去掉doLast后能正常运行的原因——此时Gradle能正确识别任务的执行参数。

绑定到正确的Release Bundle任务

Android Gradle插件的bundleRelease(应用模块)或bundleReleaseAar(库模块)是动态生成的任务,不能在脚本初始化阶段直接引用,必须用afterEvaluate闭包延迟配置依赖,确保插件生成任务后再绑定关系。

要让signBundle在Release Bundle构建完成后自动执行,用finalizedBy绑定:

afterEvaluate {
    // 针对应用模块,任务名是bundleRelease
    tasks.named('bundleRelease').configure {
        finalizedBy(signBundle)
    }
}

如果是Android库模块,把任务名改成bundleReleaseAar即可。

为什么你之前的配置无效

  • tasks.getByName('build').dependsOn(signBundle):build任务包含大量子任务,这会让signBundle在build启动前就执行,远早于bundleRelease完成,不符合需求。
  • build.finalizedBy(signBundle):只有当你执行./gradlew build时才会触发,如果你单独执行./gradlew bundleRelease,这个绑定不会生效;另外如果你的signBundle配置错误(比如之前嵌套在doLast),执行时会出现异常。
  • gradle.buildFinished里调用任务:Gradle不允许在构建完成后触发任务执行,execute()是内部方法,本身就不应该被开发者调用。
  • BuildListener方式:这种方式过于复杂,且同样不适合在构建完成后执行任务,任务依赖才是Gradle的标准做法。

找不到日志中任务的解决方法

Android插件的任务是动态生成的,初始化阶段无法直接访问。可以用afterEvaluate列出所有相关任务,确认正确的任务名:

afterEvaluate {
    tasks.findAll { it.name.startsWith('bundle') }.each {
        println "找到Bundle相关任务: ${it.name}"
    }
}

执行./gradlew tasks也能看到所有可用任务,找到对应的Release Bundle任务名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:27:31