Intereting Posts
Как я могу получить последнюю версию ConstraintLayout для Android? Услуги по проверке местоположения Android доступны с поддержкой игровых сервисов api Нужно некоторое уточнение о бета-тестировании на консоли разработчика Для Android SDK требуется Android Developer Toolkit версии 14.0.0 или выше. … Пожалуйста, обновите ADT до последней версии Как выбрать, какую кнопку нажать на Robotium для диалога с предупреждением? Как использовать службы WCF, зависящие от сеанса, с использованием Ksoap2-Android Где находится документация для Fragment.onCreateAnimator ()? Android WebView – настройка фокуса фокуса HTML с использованием Javascript Предупреждение без предупреждения – как этого избежать? Twitter4J + Android: вызов аутентификации – это исключение для Null Настройка фонового и текстового цветов панели инструментов Android в Android Studio 1.4.1 «Недостаточно места для хранения», даже в памяти устройства много свободного места Андроид, фон, список слоев и масштабируемый элемент растрового изображения AdMob не может отображать объявления из-за configChanges Не удалось подключиться к службе камеры

Как я могу указать атрибут 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/* .

Мой 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' } } } 

Есть предположения? Или, может быть, лучший подход к этому?

Solutions Collecting From Web of "Как я могу указать атрибут buildType sourceSets?"

Для интеграции API Карт Google вы можете проверить мой пример кода градиента: https://github.com/shakalaca/learning_gradle_android/tree/master/07_tricks

В основном сделайте небольшой трюк в android.applicationVariants.all во время фазы mergeResources и поместите ключ API в файле strings.xml в другую папку комбинации flaver / buildtype.

Мне довелось вернуться к этому из-за комментария к моему ответу и понял, что этот ответ лишний (еще лучше, чем принятый, который тем более). Для каждого продукта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 если вам нужно.

Также обратите внимание, что в соответствии с руководством пользователя Android Gradle использование srcDir добавляет каталог к ​​источникам по умолчанию, а srcDirs заменяет их.