Android. Выполняйте только задачу Gradle в версии выпуска.

Я пытаюсь настроить файл build.gradle только для выполнения задачи gradle при выборе варианта сборки выпуска. До сих пор моя задача всегда выполнялась, независимо от того, входит ли она в мои типы отладки или выпуска, а также подписывает конфиги. Я попытался добавить свою задачу в блок applicationsVariants и проверить, является ли это вариантом выпуска, но он просто просматривает все варианты.

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

Я знаю, что обе задачи отладки и выпуска всегда выполняются в зависимости от того, какой вариант сборки вы выберете. Можно ли выполнить какой-то код только при создании сборки для выпуска? Если да, то куда идет этот код? Спасибо!

Я прочитал каждый вопрос Stackoverflow об этом, но ни один из ответов на самом деле я не хотел. Моя конечная цель - когда я выбираю вариант сборки "release" для сборки Play Store, сообщение отправляется на наш сервер. Я не хочу, чтобы это произошло, когда просто отлаживалась.

Ответ 1

Добавьте doFirst или doLast для интересующего вас типа сборки.

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")
        }
    }
}

Ответ 2

Мне нужно было сделать что-то подобное, чтобы проверить версию сборки:

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)
            }
        }
    } }