如何为不同的产品口味定义不同的依赖关系

我将其中一个应用程序转换为Gradle,并希望使用新的构build风格function来获得付费和免费的基于广告的风格。

我只想要基于广告的版本依赖于admob SDK。

我的构build文件如下所示:

buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android' repositories { mavenCentral() } android { compileSdkVersion 18 buildToolsVersion "18.0.1" defaultConfig { minSdkVersion 10 targetSdkVersion 18 } productFlavors { Pro { packageName "de.janusz.journeyman.zinsrechner.pro" } Free { dependencies { } } } } dependencies { compile 'com.android.support:support-v4:18.0.+' compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' compile fileTree(dir: 'libs', include: '*.jar') } 

有没有一种方法来configuration在免费的产品风味的依赖关系有自己的libs文件夹与主libs文件夹合并在一起,这个文件夹包含这两种风格的通用库?

如果这是可能的,我将如何定义这个文件夹?

要定义味道特定的依赖关系,您可以在依赖项部分使用proCompile而不是compile 。 当您运行gradle属性时,您将获得自动创build的configuration的概述。

正确的构build文件如下所示:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' } } apply plugin: 'com.android.application' repositories { mavenCentral() } android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { minSdkVersion 10 targetSdkVersion 22 } productFlavors { pro { packageName "de.janusz.journeyman.zinsrechner.pro" } free { } } } dependencies { compile 'com.android.support:support-v4:22.2.0' freeCompile 'com.google.android.gms:play-services-ads:7.5.0' } 

编辑:我build议使用其他技术之一!

接受的答案的替代scheme是这样的:

  ext { flavorType = "" } gradle.startParameter.getTaskNames().each { task -> if(task.contains("flavor1")){ flavorType = "flavor1" } else if (task.contains("flavor2")){ flavorType = "flavor2" } else { flavorType = "flavor3" } } if(flavorType == 'flavor1' || flavorType == 'flavor2') { compile 'com.android.support:support-v4:18.0.+' } 

您需要手动添加每种口味的configuration。 例

 configurations { proCompile freeCompile } dependencies { compile 'com.parse.bolts:bolts-tasks:1.3.0' proCompile 'com.android.support:design:23.1.1' freeCompile 'com.parse:parse-android:1.12.0' }