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

Gradle:如何从publishToMavenLocal中排除Release相关任务

多模块Android项目快速跳过Release任务优化publishToMavenLocal构建速度

我之前在维护多模块Android库项目时,也遇到过一模一样的问题——每次跑publishToMavenLocal,每个模块都要从头执行一遍Release全流程,光是等待各个模块的preReleaseBuild、compileReleaseAidl这些任务就耗了不少时间。下面几个全局生效的方案,能帮你快速搞定这个问题:

方案1:全局禁用指定Release任务

如果只是想临时跳过某些Release环节,可以在**根项目的build.gradle(或build.gradle.kts)**里配置,遍历所有子模块禁用目标任务:

Groovy DSL 写法

subprojects {
    // 禁用所有模块的Release AIDL编译任务
    tasks.withType(com.android.build.gradle.tasks.CompileAidl) {
        if (it.name.contains("Release")) {
            enabled = false
        }
    }
    // 禁用所有模块的Release Renderscript编译任务
    tasks.withType(com.android.build.gradle.tasks.CompileRenderscript) {
        if (it.name.contains("Release")) {
            enabled = false
        }
    }
    // 禁用所有模块的preReleaseBuild任务
    tasks.named("preReleaseBuild") {
        enabled = false
    }
    // 可以继续添加其他要跳过的Release任务,比如compileReleaseJavaWithJavac等
}

Kotlin DSL 写法

subprojects {
    tasks.withType<com.android.build.gradle.tasks.CompileAidl> {
        if (name.contains("Release")) {
            enabled = false
        }
    }
    tasks.withType<com.android.build.gradle.tasks.CompileRenderscript> {
        if (name.contains("Release")) {
            enabled = false
        }
    }
    tasks.named("preReleaseBuild") {
        enabled = false
    }
}

注意:这种方式适合已经编译过Release产物的场景,如果是首次构建就跳过编译任务,可能会因为缺失aar/jar导致publish失败。

方案2:切换为发布Debug变体(推荐)

如果你的测试场景不需要Release产物,直接让publishToMavenLocal发布Debug变体是更彻底的解决方案——这样Release相关任务根本不会被触发,构建速度提升非常明显。同样在根项目配置全局生效:

Groovy DSL 写法

subprojects {
    // 仅针对Android Library模块生效(如果有Application模块可以单独调整)
    plugins.withId("com.android.library") {
        android {
            publishing {
                // 指定发布Debug变体,同时配置源码和Javadoc jar(可选)
                singleVariant("debug") {
                    withSourcesJar()
                    withJavadocJar()
                }
            }
        }
        publishing {
            publications {
                maven(MavenPublication) {
                    // 关联Debug组件作为发布来源
                    from components.debug
                }
            }
        }
    }
}

Kotlin DSL 写法

subprojects {
    plugins.withId("com.android.library") {
        configure<com.android.build.gradle.LibraryExtension> {
            publishing {
                singleVariant("debug") {
                    withSourcesJar()
                    withJavadocJar()
                }
            }
        }
        configure<PublishingExtension> {
            publications {
                create<MavenPublication>("maven") {
                    from(components["debug"])
                }
            }
        }
    }
}

这个方案的优势是完全避开了Release构建流程,既满足测试需求,又不用操心哪些任务能跳过,配置一次就能全局作用于所有模块。

方案3:命令行临时跳过任务(单次使用)

如果只是临时测试不想修改配置,可以用-x参数在命令行直接跳过指定任务:

./gradlew publishToMavenLocal -x :module1:preReleaseBuild -x :module1:compileReleaseAidl -x :module2:preReleaseBuild -x :module2:compileReleaseAidl

不过模块多的话命令会很长,适合临时用一两次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:35:07