Управление множеством ароматов... экспоненциальный рост?
Представьте себе ситуацию, в которой мне нужно иметь версии моего APK с рекламой или без нее, с или без CustomJarSDK и для трех рынков: GooglePlay, AmazonApps и SamsungApps.
В моем идеальном мире всего 7 вкусов:
- С рекламой
- Без рекламы
- С CustomJarSDK
- Без CustomJarSDK
- Для GooglePlay
- Для AmazonStore
- Для SamsungApps
И в моем идеальном мире был бы способ объединить вкусы в Gradle, например:
- С рекламой + SamsungApps + CustomJarSDK
- Без рекламы + GooglePlay
- Так далее...
Это возможно? или ты проклят и разорен, чтобы иметь все эти ароматы...?????
- Для GooglePlay с рекламой
- Для GooglePlay с рекламой и с CustomJarSDK
- Для GooglePlay без рекламы
- Для GooglePlay без рекламы и с CustomJarSDK
- Для AmazonStore с рекламой
- Для AmazonStore с рекламой и с CustomJarSDK
- Для AmazonStore без рекламы
- Для AmazonStore без рекламы и с CustomJarSDK
- Для SamsungApps с рекламой
- Для SamsungApps с рекламой и с CustomJarSDK
- Для SamsungApps без рекламы
- Для SamsungApps без рекламы и с CustomJarSDK
1 ответ
Довольно сложно ответить на ваш вопрос. Это зависит от того, какие ресурсы отличаются в любом вкусе.
В настоящее время вы не можете расширять ароматы или объединять их.
Однако вы можете использовать некоторые советы для улучшения вашего проекта.
Например, вы можете использовать общие ресурсы с исходными текстами для разных вкусов.
Что-то вроде того:
+ App // module
|- src
|- common // shared srcDir
|- java
+ flavor1
|- java
+ flavor2
|- java
+ flavor3
+ flavor4
Тогда вы можете определить somenthing так:
sourceSets {
flavor1.java.srcDir 'src/common/java'
flavor2.java.srcDir 'src/common/java'
flavor3.java.srcDir 'src/common/java'
}
В вашем случае вы должны оценить, если вкусы:
- Для GooglePlay с рекламой
- Для GooglePlay с рекламой и с CustomJarSDK
- Для GooglePlay без рекламы
- Для GooglePlay без рекламы и с CustomJarSDK
можно использовать общий блок:
sourceSets {
flavor1.java.srcDir = ['src/common/java', 'src/flavor1/java']
flavor2.java.srcDir = ['src/common/java', 'src/flavor2/java']
flavor3.java.srcDir = ['src/common/java', 'src/flavor3/java']
}
Каждый аромат может использовать один и тот же набор источников, определенный в другом аромате.
Вот так:
flavor2{
java.srcDirs = sourceSets.flavor1.java.srcDirs
res.srcDirs = sourceSets.flavor1.res.srcDirs
resources.srcDirs = sourceSets.flavor1.resources.srcDirs
aidl.srcDirs = sourceSets.flavor1.aidl.srcDirs
renderscript.srcDirs = sourceSets.flavor1.renderscript.srcDirs
assets.srcDirs = sourceSets.flavor1.assets.srcDirs
}
Также каждый вариант может определять несколько папок ресурсов. Например:
android.sourceSets {
flavor1.res.srcDirs = ['src/main/res', src/main/res2']
}