Android - 仅在发布版本变体上执行 Gradle 任务



我正在尝试将我的build.gradle文件配置为仅在选择发布构建变体时执行gradle任务。到目前为止,我的任务总是被执行,无论是在我的调试或发布构建类型中,还是在签名配置中。我尝试将我的任务添加到 applicationsVariant 块中并检查它是否是发布变体,但它只是遍历所有变体。

applicationVariants.all { variant ->
            variant.outputs.each { output ->
        ...
    }
}

我知道调试和发布任务始终针对您选择的任何构建变体运行。是否可以仅在创建要发布的版本时执行某些代码?如果是这样,该代码将转到何处?谢谢!

我已经通读了关于这个问题的每个 Stackoverflow 问题,但没有一个答案是我真正想要的。我的最终目标是,当我为 Play 商店内部版本选择"发布"版本变体时,系统会向我们的服务器发布一条消息。我不希望在调试时发生这种情况。

为您感兴趣的构建类型添加doFirstdoLast

android.applicationVariants.all {  variant ->
    if ( variant.buildType.name == "release"){
        variant.assemble.doLast { // Can also use doFirst here to run at the start.
            logger.lifecycle("we have successfully built $v.name and can post a messaage to remote server")
        }
    }
}

我不得不做这样的事情来检查构建版本:

buildTypes {
    applicationVariants.all { variant ->
        variant.outputs.each {output ->
            def project = "AppName"
            def separator = "_"
            /*def flavor = variant.productFlavors[0].name*/
            def buildType = variant.variantData.variantConfiguration.buildType.name
            def versionName = variant.versionName
            def versionCode = variant.versionCode
            def date = new Date();
            def formattedDate = date.format('yyyyMMdd_HHmm')
            if (variant.buildType.name == "release"){
                def newApkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + separator + formattedDate + ".apk"
                output.outputFile = new File(output.outputFile.parent, newApkName)
            }
            if (variant.buildType.name == "debug"){
                def newApkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + ".apk"
                output.outputFile = new File(output.outputFile.parent, newApkName)
            }
        }
    } }