Android studio gradle параметры вкуса создают переменные, которые не работают правильно

У меня есть два измерения приложения, затем нажмите зеленый и синий. Будут только эти два измерения, но неограниченное количество продуктов. Именно так я настраиваю его в gradle

flavorDimensions "green", "blue"

productFlavors {

    one {
        applicationId "com.app.green.one"
        versionCode 1
        versionName "1.0.0.1";
        flavorDimension = "green"
    }
    two {
        applicationId "com.app.blue.two"
        versionCode 6
        versionName "1.0.1";
        flavorDimension = "blue"
    }
}

Но после я sync gradle, на вкладке вариантов построения все, что я вижу, это oneTwoDebug и oneTwoRelease, где я должен увидеть greenOneDebug greenOneRelease, blueTwoDebug, blueTwoRelease

В теории я хочу расширить его, чтобы быть чем-то вроде этого

one {
    applicationId "com.app.green.one"
    versionCode 1
    versionName "1.0.0.1";
    flavorDimension = "green"
}
two {
    applicationId "com.app.blue.two"
    versionCode 6
    versionName "1.0.1";
    flavorDimension = "blue"
}
three {
    applicationId "com.app.green.three"
    versionCode 1
    versionName "1.0.0.1";
    flavorDimension = "green"
}
four {
    applicationId "com.app.blue.four"
    versionCode 6
    versionName "1.0.1";
    flavorDimension = "blue"
}

В этом случае размеры представляют собой "тип" приложения, а затем ароматы больше для организаций, которые могут быть добавлены.

** РЕДАКТИРОВАТЬ Я неправильно настроил для gradle, как указано здесь, более точное описание того, что у меня есть

flavorDimensions "type", "organization"

productFlavors {

    blue {
        applicationId "com.app.blue"
        flavorDimension = "type"
        versionCode 6
        versionName "1.0.1";
    }
    red {
        applicationId "com.app.red"
        flavorDimension = "type"
        versionCode 1
        versionName "1.0.0.1";
    }

    company1 {
        flavorDimension = "organization"
    }
    company2 {
        flavorDimension = "organization"
    }
}

До сих пор это работает, поэтому я могу создавать исходные каталоги java для переключения типов, но что, если я хочу создавать конфигурационные файлы, специфичные для организации, я также создаю исходные источники java для каждой организации?

Ответы

Ответ 1

Я думаю, вы неправильно поняли концепцию flavorDimension.

Ароматизатор является чем-то вроде категории вкуса, и каждая комбинация аромата из каждого измерения будет иметь вариант.

В вашем случае вы должны определить один параметр flavorDimension с именем "type" и другое измерение с именем "organization". Он будет производить для каждого аромата в "организации" измерения все возможные "типы" (или двойную формулировку: для каждого "типа" он будет давать вариант для каждой организации).

Размеры аромата определяют декартовую продукцию, которая будет использоваться для изготовления вариантов.


EDIT: я попытаюсь проиллюстрировать с помощью псевдо- gradle кода:

Пусть определите некоторый "тип": бронза, серебро и золото

Пусть определите некоторые организации: customerA, customerB, customerC

Все это productFlavors, но они относятся к двум различным размерам:

flavorDimensions("type_line", "organization")
productFlavors {

    gold {
        ...
        dimension = "type_line"
    }
    silver {
        ...
        dimension = "type_line"
    }
    bronze {
         ...
        dimension = "type_line"
    }

     customerA {
        ...
        dimension = "organization"
    }
    customerB {
        ...
        dimension = "organization"
    }
    customerC {
         ...
        dimension = "organization"
    }

}

Эта конфигурация будет создавать 18 (3 * 3 * 2) варианта (если у вас есть 2 стандартных типа сборки: debug и release):

gold-customerA-debug; gold-customerA-релиз; gold-customerB-debug; gold-customerB-релиз; gold-customerC-debug; gold-customerC-релиз;

silver-customerA-debug; серебро-клиентА-релиз; silver-customerB-debug; серебро-клиентB-релиз; silver-customerC-debug; серебро-клиентC-релиз;

... (то же самое для бронзы)

Обратите внимание, что имя измерения абсолютно произвольно и не влияет на имена вариантов.

Размеры вкуса очень мощные, но если вы используете слишком много их: это приводит к экспоненциальному взрыву числа вариантов (задача очистки пост-сборки может быть полезна для удаления бесполезного или нечувствительного варианта)