Как я могу указать атрибут buildType sourceSets?
У меня есть 2 варианта приложения, каждый из которых имеет свои собственные ключи google maps (v1) для отладки и выпуска (что означает 4 ключа всего). Поэтому я хотел бы знать, могу ли я указать sourceSets на основе buildType и productFlavor. По сути, мне интересно, как я могу добиться чего-то вроде этого:
src
├── debug
│ └── flavor1
│ └── res
│ └── values
│ └── gmaps_key.xml
├── release
│ └──flavor1
│ └── res
│ └── values
│ └── gmaps_key.xml
Где gradle будет использовать src/<currentBuldType>/<currentProductFlavor>/*
как часть своего исходного набора.
По сути, я хочу, чтобы, если я запустил gradle assembleFlavor1Debug
, он будет включать все под src/main/*
, src/flavor1/*
и src/debug/flavor1/*
.
My 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'
}
}
}
Любые мысли? Или, может быть, лучший подход к этому?
Ответы
Ответ 1
Для интеграции API Карт Google вы можете проверить здесь пример кода gradle: https://github.com/shakalaca/learning_gradle_android/tree/master/07_tricks
В основном android.applicationVariants.all
в течение фазы mergeResources
поместите небольшой трюк и поместите ключ API в файл strings.xml в другую папку комбинации flaver/buildtype.
Ответ 2
Мне довелось вернуться к этому из-за комментария к моему ответу и понял, что этот ответ лишний (еще лучше, чем принятый, который тем более). Для каждого продуктаFlavor и buildType уже существуют комбинации и отдельные исходные наборы. то есть src/{buildType}
, src/{productFlavor}
и src/{productFlavor}{buildType}
уже доступны исходные папки.
Таким образом, все, что было необходимо для OP, заключалось в том, чтобы поместить ресурсы в src/flavor1Debug
, что эквивалентно src/debug/flavor1
, который предполагает OP.
OLD ANSWER:
Я сделал что-то подобное с 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
, если вам нужно.
Также обратите внимание, что в соответствии с руководством пользователя Gradle с помощью srcDir
добавляется каталог к источникам по умолчанию и srcDirs
заменяет их.