Как я могу указать для каждого аромата buildType sourceSets?
У меня есть 2 варианта приложения, каждое из которых имеет свой собственный ключ google maps (v1) для отладки и выпуска (то есть всего 4 ключа). Поэтому я хотел бы знать, могу ли я указать исходные наборы на основе buildType и productFlavor. По сути, мне интересно, как я могу достичь чего-то вроде этого:
src
├── debug
│ └── flavor1
│ └── res
│ └── values
│ └── gmaps_key.xml
├── release
│ └──flavor1
│ └── res
│ └── values
│ └── gmaps_key.xml
Где Gradle будет использовать src/<currentBuldType>/<currentProductFlavor>/*
как часть его sourceSet.
По сути, я хочу, чтобы, если я бегу gradle assembleFlavor1Debug
это будет включать в себя все под src/main/*
, src/flavor1/*
, а также src/debug/flavor1/*
,
Мой build.gradle очень прост:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.0'
}
}
apply plugin: 'android'
android {
compileSdkVersion 8
productFlavors {
flavor1 {
packageName 'com.flavor1'
}
flavor2 {
packageName 'com.flavor2'
}
}
}
Какие-нибудь мысли? Или, может быть, лучший подход к этому?
2 ответа
Для интеграции Google Maps API вы можете проверить мой пример кода здесь: https://github.com/shakalaca/learning_gradle_android/tree/master/07_tricks
В основном сделать небольшой трюк в android.applicationVariants.all
в течение mergeResources
этап и поместите ключ API в strings.xml в другую папку комбинации flaver/buildtype.
Я случайно вернулся к этому из-за комментария к моему ответу и понял, что этот ответ является излишним (все же лучше, чем принятый, который тем более). Для каждого productFlavor и buildType комбинация и отдельные исходные наборы уже существуют. т.е. src/{buildType}
, src/{productFlavor}
а также src/{productFlavor}{buildType}
уже доступны исходные папки.
По сути, все, что было необходимо для ФП, - это src/flavor1Debug
что эквивалентно src/debug/flavor1
что ОП предусматривает.
СТАРЫЙ ОТВЕТ: Я сделал нечто подобное с buildConfig
но, надеюсь, это должно работать с sourceSets
,
По сути, вы определяете общие вещи на productFlavors
Уровень в переменной и продолжайте добавлять вещи, как вы двигаетесь вниз.
productFlavors {
def common = 'src/main'
flavor1 {
def flavor = 'src/main/flavor1'
buildTypes {
debug {
sourceSets {
res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/debug'
}
}
release {
sourceSets {
res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/release'
}
}
}
}
Я не проверял это. Я думаю, вам может понадобиться android.sourceSets
вместо просто sourceSets
,
Мне также нужно было определить отдельные ресурсы для productFlavors
поэтому я использовал отдельное заявление в конце файла сборки. Вот так:
android.sourceSets.flavor1 {
res.srcDirs = ['flavor_resources/flavor1/res']
}
Вы должны просто быть в состоянии использовать android.sourceSets.flavor1.debug
вместо этого, если вам нужно.
Также обратите внимание, что согласно руководству пользователя Android Gradle, используя srcDir
добавляет каталог к источникам по умолчанию и srcDirs
заменяет их.