Intereting Posts
Android: покажите прогресс, как Google в своих приложениях ScrollView внутри галереи, прокручивая независимо Почему так громоздко передавать список объектов из одной активности в другую деятельность Разработка Android: api 14 vs api 15 Как мы можем обойти пустой заголовок в PagerTitleStrip и PagerTabStrip? Android: как скрыть папку от появления в Галерее Разработка приложения для Android с использованием Html, Css и JavaScript Можно ли преобразовать Spannable в String в android, чтобы загрузить ExpandableListView? Gradle: Multi-Dimension Flavor ApplicationId Исключение исключенного события цикла в плагине org.eclipse.ui Как заставить Android Camera Intent вернуть изображение в полном размере Ошибка Android Studio Gradle во время компиляции Отменить загрузку Google Диска? Ограничить (ограничить) установку приложений на одну учетную запись (с учетом уникальных устройств) в Android Используйте несколько учетных записей firebase в одном приложении для Android для Google Analytics

Добавить зависимость от конкретного продуктаFlavor и buildType в градиенте

Мне интересно, как добавить зависимость от определенного productFlavor и buildType в gradle. Например, у меня есть версия productFlavor free и build type, как я могу добавить зависимость от задачи assembleFreeRelease ?

Я пробовал много вариантов, но не работает.

Например, я попробовал:

 task('release', dependsOn: assembleProductionRelease) { } // error: Could not find property 'assembleProductionRelease' on root project 'app'. 

Или:

 task('release', dependsOn: 'assembleProductionRelease') { } 

Здесь нет ошибки, но задача выполняется для каждого типа аромата и типа, очень запутанная.

Solutions Collecting From Web of "Добавить зависимость от конкретного продуктаFlavor и buildType в градиенте"

Эта задача создается динамически на основе конфигурации вашего Android-модуля. Во время настройки они пока недоступны. Вы можете отложить создание своей задачи двумя способами:

Подождите, пока проект будет оценен .

 afterEvaluate { task yourTask(dependsOn: assembleFreeRelease) { println "Your task" } } 

Ленько объявляя зависимость задачи как String.

 task yourTask(dependsOn: 'assembleFreeRelease') { println "Your task" } 

Существует встроенная поддержка атрибутов flavor и buildType.

 dependencies { flavor1Compile "..." freeReleaseCompile "..." } 

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Sourcesets-and-Dependencies

Похоже, теперь в версии 1 плагина android gradle и gradle 2.2+ вы можете сделать это с помощью конфигурации:

 configurations { freeReleaseCompile } android { ... productFlavors { free { ... } } } dependencies { freeReleaseCompile('myLib@aar') } 

Ссылка: https://groups.google.com/forum/#!msg/adt-dev/E2H_rNyO6-o/h-zFJso-ncoJ

Ответ Мушко не сработал для меня, так что это мое решение, написанное мной и отправленное мной здесь

Определите задачу, которая должна выполняться только для определенного типа buildType / variant / flavor

 task doSomethingOnWhenBuildProductionRelease << { //code } 

Важно использовать синтаксис «<<», иначе задача будет автоматически вызываться каждый раз.

Динамически устанавливать зависимость, когда задачи добавляются градиентом

 tasks.whenTaskAdded { task -> if (task.name == 'assembleProductionRelease') { task.dependsOn doSomethingOnWhenBuildProductionRelease } } 
 android { ext.addDependency = { task, flavor, dependency -> def taskName = task.name.toLowerCase(Locale.US) if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) { task.dependsOn dependency } } productFlavors { production { } other } task theProductionTask << { println('only in production') } tasks.withType(JavaCompile) { compileTask -> addDependency compileTask, "production", theProductionTask } } 

Чтобы быть откровенным, я не знаю, какой язык используется для генерации имен для компиляции taks, поэтому toLowerCase(Locale.US) может быть контрпродуктивным.

Вот еще один способ, которым я пользовался:

 tasks.withType(JavaCompile) { compileTask -> def dependedTaskName = "dependedTask_"; if(compileTask.name.contains('Release') { dependedTaskName += "Release"; } createTask(dependedTaskName, Exec) { ........ } compileTask.dependsOn ndkBuildTaskName } 

Другой путь:

 tasks.whenTaskAdded { task -> if (task.name == 'generateReleaseBuildTypeBuildConfig') { task.dependsOn doSomethingForReleaseBuild } } 

Первый метод является динамическим, а второй – более простым.