如何在Gradle中配置Task A先于assembleRelease、Task B后于其执行?
问题解决方法
错误原因
assembleRelease 是Android Gradle插件在项目配置后期才生成的任务,直接在配置代码里引用它时,任务还未被创建,因此会抛出“找不到属性”的错误。
正确配置方案
方案1:延迟配置任务依赖
利用Gradle的afterEvaluate闭包,等项目所有配置完成后再关联任务依赖:
// 先定义taskA和taskB的Git操作逻辑 task taskA { doLast { // 切换到master分支并合并develop exec { commandLine "git", "checkout", "master" commandLine "git", "merge", "develop", "--no-edit" // --no-edit避免交互卡顿 } } } task taskB { doLast { // 切回develop分支 exec { commandLine "git", "checkout", "develop" } } } // 延迟配置任务执行顺序 afterEvaluate { def assembleReleaseTask = tasks.named("assembleRelease").get() assembleReleaseTask.dependsOn(taskA) taskB.mustRunAfter(assembleReleaseTask) }
方案2:创建一键触发的总任务
如果希望仅触发一个任务完成全流程,可以创建总任务来整合所有步骤:
task taskA { doLast { exec { commandLine "git", "checkout", "master" commandLine "git", "merge", "develop", "--no-edit" } } } task taskB { doLast { exec { commandLine "git", "checkout", "develop" } } } // 创建总任务,一键执行完整流程 task releaseFullFlow { dependsOn tasks.named("assembleRelease"), taskB } // 配置任务执行顺序 afterEvaluate { def assembleReleaseTask = tasks.named("assembleRelease").get() assembleReleaseTask.dependsOn(taskA) taskB.mustRunAfter(assembleReleaseTask) }
使用时,只需运行 ./gradlew releaseFullFlow,就能自动执行 taskA → assembleRelease → taskB 的完整流程。
注意事项
- Git合并若遇到冲突会卡住任务,自动化场景建议添加
--no-edit参数,或提前处理分支冲突。 - 确保项目已应用Android Gradle插件,否则
assembleRelease任务不会生成。
内容的提问来源于stack exchange,提问作者Eduvm
相关产品推荐
相关产品推荐

