Gradle аромат на основе другого аромата
Возможно ли, что аромат основан на другом аромате?
Например,build.gradle:
productFlavors {
flavor1 {
flavorBase "main"
}
flavor2 {
flavorBase "main"
}
flavor3 {
flavorBase "main"
}
flavor4 {
flavorBase "flavor3"
}
flavor5 {
flavorBase "flavor3"
}
}
2 ответа
Я столкнулся с той же самой проблемой и нуждался в чем-то вроде основного аромата и двух унаследованных ароматов от этого.
Лучшее решение, которое я выбрал после нескольких часов испытаний многих вещей:
- Создайте свои дополнительные ароматы (аромат 4 и 5) так же, как вы сделали для 1 и 2.
- Создайте папки для них и создайте базовую папку для общего кода / ресурсов (например, с именем flavor 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...