Варианты Gradle с повторяющимися именами, но с другим измерением

Возможна ли следующая установка:

flavorDimension "production", "staging"

productFlavors {
    staging {
        dimension "staging"
        ...
    }

    production {
        dimension "production"
        ...
    }

    flavorOne {
        dimension "staging"
        ...
    }

    flavorOne {
        dimension "production"
        ...
    }

}

FlavorOne существует два раза и содержит разные настройки, но также и с разными размерами.

Что мне нужно, так это FlavorOne с продукцией и постановкой, а также файлы res для flavorOneStaging и flavorOneProduction. Если я делаю это так, я вижу только flavorOneStagingDebug и flavorOneStagingRelease (выпуск и отладка — это мои типы сборки), но не вижу flavorOneProduction..

Должен ли я создавать аромат для каждой комбинации? Подготовка и производство содержат данные, которые никогда не меняются, за исключением файлов res, а flavorOne — это всего лишь один из N. Я не хочу создавать N * 2 варианта, чтобы иметь каждый вариант в производстве и подготовке? Любые решения?


person Informatic0re    schedule 20.01.2016    source источник


Ответы (3)


Что вам нужно:

flavorDimension "environment", "flavorType"

productFlavors {
    staging {
        dimension "environment"
        ...
    }

    production {
        dimension "environment"
        ...
    }

    flavorOne {
        dimension "flavorType"
        ...
    }

    flavorTwo {
        dimension "flavorType"
        ...
    }

}

Предполагая, что ваши типы сборки являются выпуском и отладкой, это приведет к:

staging-flavorone-release.apk
staging-flavorone-debug.apk
staging-flavortwo-release.apk
staging-flavortwo-debug.apk
release-flavorone-release.apk
release-flavorone-debug.apk
release-flavortwo-release.apk
release-flavortwo-debug.apk
person lgvalle    schedule 21.04.2016

AFAIK нет способа сделать это по умолчанию - однажды у меня была такая же проблема, и я решил ее следующим образом:

applicationVariants.all {вариант ->

    def variantName = variant.name
    if (variantName == "flavorOneProduction") {
        variant.buildConfigField "String", "FOO",'"BAR"'
    } else if (variantName == "flavorOneStaging") {
        variant.buildConfigField "String", "FOO",'"BAR2"'
    } else if (variantName == "flavorTwoProduction") {
        variant.buildConfigField "String", "FOO",'"BAR3"'
    } else if (variantName == "flavorTwoStaging") {
        variant.buildConfigField "String", "FOO",'"BAR4"'
    } 
}

я думаю вы уловили суть

person ligi    schedule 20.01.2016

Прочтите: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Multi-flavor-variants

Там вы должны увидеть, что вы должны сделать это наоборот: применить производство и постановку в качестве ароматов и, возможно, затем применить к ним размеры (если это все еще необходимо).

person and_dev    schedule 20.01.2016
comment
Я уже прочитал это, но это не объясняет, что мне нужно. Сейчас у меня 4 вкуса. Flavor1Staging, Flavor1Production, Flavor2Staging и Flavor2Production. Если я добавляю еще один вкус, мне всегда приходится создавать 2. Постановка и производство имеют разные настройки, но также есть Flavor1 и Flavor2. Например: у промежуточной версии есть флаг ads=false, у рабочей рекламы =true и у Flavor1 есть значение url=xyz, а у Flavor2 есть url=yzx. Размер не может иметь значения по умолчанию, верно? - person Informatic0re; 20.01.2016
comment
Мне нужно что-то вроде: Flavor1 расширяет Staging - person Informatic0re; 20.01.2016
comment
Я не думаю, что это возможно, так как это всегда умножается. Может быть, вы могли бы отключить те вкусы, которые вам не нужны, на графике сборки gradle. - person and_dev; 20.01.2016
comment
Мне всегда будут нужны все вкусы — это решение whitelabel, где, если я создам, мне понадобятся все вкусы. но ладно, тогда я думаю, что мне нужно создать много вкусов. Спасибо - person Informatic0re; 20.01.2016