build.gradle:有条件地包含产品变体中的功能

时间:2016-01-22 10:00:21

标签: android gradle android-gradle android-productflavors

我有一个包含多种产品变体的项目。 目前我使用以下方式指定是否要包含特定功能 - 在build.gradle文件的末尾我执行此操作:

productFlavors
{
    customapp1 {
        applicationId "com.app.id1"
    },
    customapp2 {
        applicationId "com.app.id2"
    },
    ....
}
if(extensions_ads) {
dependencies {
    println "Adding ads dependencies"
    compile 'com.google.android.gms:play-services-ads:8.3.0'
}

android.sourceSets.main {
    java.srcDirs += ['./src/extensions/ads'];
}
}
else{
    android.sourceSets.main {
        java.srcDirs += ['./src/extensions/noads'];
    }
}

如您所见extensions_ads是一个全局变量,我希望有类似的东西:

productFlavors
{
    customapp1 {
        extensions_ads true
        applicationId "com.app.id1"
    },
    customapp1 {
        extensions_ads false
        applicationId "com.app.id1"
    }
}
  1. 我应该如何定义extensions_ads作为风味定义的一部分。
  2. 如何遍历所有口味并检查该旗帜?

1 个答案:

答案 0 :(得分:0)

我会遵循另一个逻辑来规范您的依赖项或源集资源。

您只能为flavor,buildType或buildVariant添加依赖项。

例如:

dependencies {
    flavor1Compile 'com.google.android.gms:play-services-ads:8.3.0'
}

同样,您可以为每种风格使用不同的文件夹,而无需在android.sourceSets文件中指定build.gradle

+ src
    + main 
        + java 
        + res
    + flavor1
        + java
        + res
    + flavor2
        + java
        + res

当然,如果还不够,你可以指定android.sourceSets作为风味,如:

sourceSets{
        main {
          //
        }

        flavor1.java.srcDirs = [ ...] 
        flavor1.res.srcDirs = [ ... ]
        ...

        flavor2.java.srcDirs = [...] 
        flavor2.res.srcDirs = [...]
        ...
    }