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

如何在Android项目配置阶段运行Gradle插件中的自定义Gradle任务

问题根源

你创建的自定义Gradle任务默认是独立节点,没有和Gradle的构建生命周期链路绑定,只有当任务被显式触发、或者被其他需要执行的任务依赖时,才会进入执行队列运行。你手动点击运行按钮本质就是直接触发该任务执行,所以能正常跑。
另外你对create和register的理解是正确的,但二者的差异仅在任务初始化时机,和是否会自动执行没有关联。

解决方案

根据你的使用场景选择对应方案即可:

场景1:配置逻辑需要在构建前自动执行(推荐)

你的需求是做项目前置配置,一般可以把任务绑定到Android项目的preBuild生命周期节点上,每次构建时会先执行你的自定义任务,再跑后续构建逻辑。修改插件的apply方法代码如下:

class CommonManager: Plugin<Project> {
    override fun apply(target: Project) {
        println("APPLY FUNCTION HAS BEEN ENTERED")
        // 推荐用register懒加载创建任务,提升配置阶段性能
        val myPluginTask = target.tasks.register("myPluginTask", ReleaseManager::class.java)

        // 给Android应用模块绑定任务
        target.pluginManager.withPlugin("com.android.application") {
            target.tasks.named("preBuild").configure { preBuild ->
                preBuild.dependsOn(myPluginTask)
            }
        }
        // 给Android库模块绑定任务,不需要可以删掉
        target.pluginManager.withPlugin("com.android.library") {
            target.tasks.named("preBuild").configure { preBuild ->
                preBuild.dependsOn(myPluginTask)
            }
        }
    }
}

场景2:不需要绑定构建流程,apply插件后立即执行任务

如果不需要和构建任务绑定,希望apply插件、参数配置完成后立刻执行任务,可以在apply方法末尾添加执行逻辑,注意该方式使用了Gradle内部API,可能存在版本兼容风险:

override fun apply(target: Project) {
    // ... 省略任务创建逻辑
    target.afterEvaluate {
        // 等build.gradle里的任务参数配置完成后再执行
        target.tasks.getByName("myPluginTask").execute()
    }
}
重要注意事项

如果你的configureVersionsAndReleaseMeta方法里包含设置versionCode、声明maven仓库这类需要在配置阶段生效的逻辑,不建议放到自定义任务的@TaskAction中执行。因为自定义任务默认是执行阶段运行,此时Gradle的配置阶段已经结束,你修改的配置不会生效,这类逻辑直接放在apply方法或者afterEvaluate闭包中执行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:39:01