Intereting Posts
Android-эмулятор зависает Огромное использование памяти в уведомлениях Можно ли использовать выпадающие меню AND в качестве навигации в панели действий? Флажок в ExpandableListView Получить значок файла apk, версию, имя На какую ошибку это указывает – «new_window_surface возвращает 0x3000» Как добавить подсказку к виджету Spinner? Android: TextView автоматически обрезает и заменяет последние 3 символа строки Как я могу масштабировать изображение без размытия? Получайте день, месяц и год отдельно, используя SimpleDateFormat Дублировать файлы во время упаковки APK app-debug-unaligned.apk Пользовательская фильтрация в Android с помощью ArrayAdapter Стиль не применяется в пользовательских флажках и радиообменах Android: Как избежать пресса за пределами круга круглой кнопки с использованием содержимого обертки? Как установить две пользовательские кнопки в левой и правой частях андроида?

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