Gradle аромат на основе другого аромата

Возможно ли, что аромат основан на другом аромате?

Например,build.gradle:

productFlavors {
    flavor1 {
        flavorBase "main"
    }
    flavor2 {
        flavorBase "main"
    }
    flavor3 {
        flavorBase "main"
    }
    flavor4 {
        flavorBase "flavor3"
    }
    flavor5 {
        flavorBase "flavor3"
    }
}

2 ответа

Решение

Я столкнулся с той же самой проблемой и нуждался в чем-то вроде основного аромата и двух унаследованных ароматов от этого.

Лучшее решение, которое я выбрал после нескольких часов испытаний многих вещей:

  1. Создайте свои дополнительные ароматы (аромат 4 и 5) так же, как вы сделали для 1 и 2.
  2. Создайте папки для них и создайте базовую папку для общего кода / ресурсов (например, с именем flavor 3; так же, как вы делали бы это для других ваших вариантов).
  3. Теперь определите дополнительные исходные наборы для ваших дочерних ароматов

    flavor4 {
        res.srcDirs = ['src/flavor3/res', 'src/flavor4/res']
        java.srcDirs = ['src/flavor3/java', 'src/flavor4/java']
        resources.srcDirs = ['src/flavor3/java', 'src/flavor4/java']
    }
    flavor5 {
        res.srcDirs = ['src/flavor3/res', 'src/flavor5/res']
        java.srcDirs = ['src/flavor3/java', 'src/flavor5/java']
        resources.srcDirs = ['src/flavor3/java', 'src/flavor5/java']
    }
    

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

Вы можете использовать размеры аромата для группировки функций. Например:

flavorDimensions "color", "function", "data"
productFlavors {

    color1 {
        flavorDimension "color"
        // Something
    }
    color2 {
        flavorDimension "color"
        // Something else
    }

    functions1 {
        flavorDimension "function"
        // Something
    }  
    functions2 {
        flavorDimension "function"
        // Something else
    }

    data1 {
        flavorDimension "data"
        // Something
    }  
    data2 {
        flavorDimension "data"
        // Something else
    }    
}

Затем вы можете факторизовать ваш код, используя следующие измерения: Color1Function2Data1 или Color2Function1Data1...

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