Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android build.gradle:在产品变体中有条件地包含功能_Android_Gradle_Android Gradle Plugin_Android Productflavors - Fatal编程技术网

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

Android build.gradle:在产品变体中有条件地包含功能,android,gradle,android-gradle-plugin,android-productflavors,Android,Gradle,Android Gradle Plugin,Android Productflavors,我有一个项目与几个产品的变种。 目前,我正在使用以下方法指定是否要包含特定功能-在build.gradle文件的末尾,我执行以下操作: productFlavors { customapp1 { applicationId "com.app.id1" }, customapp2 { applicationId "com.app.id2" }, .... } if(extensions_ads) { dependencies

我有一个项目与几个产品的变种。 目前,我正在使用以下方法指定是否要包含特定功能-在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'];
    }
}
正如您所看到的,ads是一个全局变量,我希望有如下内容:

productFlavors
{
    customapp1 {
        extensions_ads true
        applicationId "com.app.id1"
    },
    customapp1 {
        extensions_ads false
        applicationId "com.app.id1"
    }
}
sourceSets{
        main {
          //
        }

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

        flavor2.java.srcDirs = [...] 
        flavor2.res.srcDirs = [...]
        ...
    }
  • 我应该如何定义作为风味定义一部分的广告
  • 如何遍历所有口味并检查该标志

  • 我将遵循另一种逻辑来限制依赖项或源集资源

    您只能为一种风格、一种构建类型或一种构建变体添加依赖项

    例如:

    dependencies {
        flavor1Compile 'com.google.android.gms:play-services-ads:8.3.0'
    }
    
    同样,您可以为每种口味使用不同的文件夹,而无需在
    build.gradle
    文件中指定
    android.sourceset

    + src
        + main 
            + java 
            + res
        + flavor1
            + java
            + res
        + flavor2
            + java
            + res
    
    当然,如果这还不够,您可以为一种口味指定android.sourceset,例如:

    productFlavors
    {
        customapp1 {
            extensions_ads true
            applicationId "com.app.id1"
        },
        customapp1 {
            extensions_ads false
            applicationId "com.app.id1"
        }
    }
    
    sourceSets{
            main {
              //
            }
    
            flavor1.java.srcDirs = [ ...] 
            flavor1.res.srcDirs = [ ... ]
            ...
    
            flavor2.java.srcDirs = [...] 
            flavor2.res.srcDirs = [...]
            ...
        }
    

    看起来不错,但是我的口味太多了,而且我们有一个脚本,可以在build.gradle文件中自动添加它们。我更喜欢对所有味道进行某种遍历,而不是手动对每个味道的srcdir进行“硬编码”。