Различная подписывающая конфигурация в многомерных вариантах сборки только для Release buildType

Я использую следующую конфигурацию:

android {
// a lot more of definitions...

signingConfigs {
    // For advanced-artefacts, we are using a different signing configuration in each environment
    advanced_prod {
        storeFile file(RELEASE_KEYSTORE_FILE_advanced)
        storePassword RELEASE_KEYSTORE_PASSWORD_ADVANCED
        keyAlias RELEASE_KEY_ALIAS_ADVANCED
        keyPassword RELEASE_KEY_PASSWORD_ADVANCED
    }
    advanced_int {
        storeFile file(RELEASE_KEYSTORE_FILE_advanced)
        storePassword RELEASE_KEYSTORE_PASSWORD_ADVANCED
        keyAlias "advancedapp.android.int"
        keyPassword RELEASE_KEY_PASSWORD_ADVANCED
    }
    advanced_test {
        storeFile file(RELEASE_KEYSTORE_FILE_advanced)
        storePassword RELEASE_KEYSTORE_PASSWORD_ADVANCED
        keyAlias "advancedapp.android.test"
        keyPassword RELEASE_KEY_PASSWORD_ADVANCED
    }
    advanced_dev {
        storeFile file(RELEASE_KEYSTORE_FILE_advanced)
        storePassword RELEASE_KEYSTORE_PASSWORD_ADVANCED
        keyAlias "advancedapp.android.dev"
        keyPassword RELEASE_KEY_PASSWORD_ADVANCED
    }
    basic {
        storeFile file(RELEASE_KEYSTORE_FILE_BASIC)
        storePassword RELEASE_KEYSTORE_PASSWORD_BASIC
        keyAlias RELEASE_KEY_ALIAS_BASIC
        keyPassword RELEASE_KEY_PASSWORD_BASIC
        storeType "JKS"
    }
}

flavorDimensions "project", "environment"

productFlavors {
    basic {
        dimension "project"
    }
    advanced {
        dimension "project"
    }
    flavorDevelopment {
        dimension "environment"
        applicationId "ch.domain.superapp.development"
    }

    flavorTest {
        dimension "environment"
        applicationId "ch.domain.superapp.test"
    }

    flavorIntegration {
        dimension "environment"
        applicationId "ch.domain.superapp.integration"
    }

    flavorProduction {
        dimension "environment"
        applicationId "ch.domain.superapp.production"
    }
}
buildTypes {
    debug {
        testCoverageEnabled true
        // all debug artefacts are signed with the default, the android debug certificate from the local machine
     }

    release {
        // Currently all environments (dev/test/int/prod) are signed by the Production certificates either for basic or for advanced
        productFlavors.basic.signingConfig signingConfigs.basic
        productFlavors.advanced.signingConfig signingConfigs.advanced_prod // <- !!! here my question relates to !!!

    }
}


// a lot more of definitions...
}

Эта конфигурация создаст следующие варианты сборки:

advancedFlavorDevelopmentRelease -> signatureConfig: advanced_dev
advancedFlavorTestRelease -> signatureConfig: advanced_test
advancedFlavorIntegrationRelease -> signatureConfig: advanced_int
advancedFlavorProductionRelease -> signatureConfig: advanced_prod
advancedFlavorDevelopmentDebug -> signatureConfig: android_debug (локальный)
advancedFlavorTestDebug -> signatureConfig: android_debug (локальный)
advancedFlavorIntegrationDebug -> signatureConfig: android_debug (локальный)
advancedFlavorProductionDebug -> signatureConfig: android_debug (локальный)

basicFlavorDevelopmentRelease -> signatureConfig: basic
basicFlavorTestRelease -> signatureConfig: basic
basicFlavorIntegrationRelease -> signatureConfig: basic
basicFlavorProductionRelease -> signatureConfig: базовый
basicFlavorDevelopmentDebug -> signatureConfig: android_debug (локальный)
basicFlavorTestDebug -> signatureConfig: android_debug (локальный)
basicFlavorIntegrationDebug -> signatureConfig: android_debug (локальный)
basicFlavorProductionDebug -> signatureConfig: android_debug (локальный)

Мой вопрос касается следующего кода:
productFlavors.advanced.signingConfig signatureConfigs.advanced_prod

В настоящее время я присваиваю всем средам из продвинутого Flavor сертификат advanced_prod, который необходим для базовой версии в порядке сертификации и выполняется с указанной выше конфигурацией!

Я сделал испытание, которое не было успешным:

applicationVariants.all { variant ->
    if (variant.name == 'advancedFlavorDevelopmentRelease') {
        def flavor = variant.mergedFlavor
        flavor.signingConfig = signingConfigs.advanced_dev;
    }
    if (variant.name == 'advancedFlavorTestRelease') {
        def flavor = variant.mergedFlavor
        flavor.signingConfig = signingConfigs.advanced_test;
    }
    if (variant.name == 'advancedFlavorIntegrationRelease') {
        def flavor = variant.mergedFlavor
        flavor.signingConfig = signingConfigs.advanced_int;
    }
    if (variant.name == 'advancedFlavorProductionRelease') {
        def flavor = variant.mergedFlavor
        flavor.signingConfig = signingConfigs.advanced_prod;
    }
}

Я ищу решение для настройки расширенного продукта для настройки выделенного signConfig для каждой среды (flavourDevelopment/flavourest/flavIntegration), но только в выпуске buildType

есть идеи?

Люк

0 ответов

Я встречал ту же ситуацию, вот мое решение, и оно работает для меня.

android {
    signingConfigs {
        flavorA {
            storeFile file("xxx.jks")
            storePassword "xxx"
            keyAlias "xxx"
            keyPassword "xxx"
        }

        flavorB {
            storeFile file("xxx.jks")
            storePassword "xxx"
            keyAlias "xxx"
            keyPassword "xxx"
        }
    }

    productFlavors {

            flavorA {
                signingConfig signingConfigs.flavorA
            }

            flavorB {
                signingConfig signingConfigs.flavorB
            }
        }

    buildTypes {

        release {
            minifyEnabled true
            proguardFiles 'proguard-rules.pro'
        }

        debug.init(release.signingConfig)
        debug {
            minifyEnabled false
        }

    }
}

У меня AndroidStudio 3.6.2, а AGP 3.6.2.

Надеюсь, это поможет вам!

Другие вопросы по тегам