基于其他风味的Gradle风味

时间:2015-05-29 09:11:56

标签: android gradle android-productflavors

味道是否可能基于其他味道?

例如 的的build.gradle:

productFlavors {
    flavor1 {
        flavorBase "main"
    }
    flavor2 {
        flavorBase "main"
    }
    flavor3 {
        flavorBase "main"
    }
    flavor4 {
        flavorBase "flavor3"
    }
    flavor5 {
        flavorBase "flavor3"
    }
}

enter image description here

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,需要类似基本风味和两种继承风味的东西。

经过几个小时的尝试后,我最终得到的最佳解决方案是:

  1. 创建与1和2相同的其他口味(风味4和5)。
  2. 为这些文件夹创建文件夹,并为公共代码/资源创建一个基本文件夹(例如,名为flavor 3;与您对其他版本的方式相同)。
  3. 现在为您的子味道定义其他源集

    flavor4 {
        res.srcDirs = ['src/flavor3/res', 'src/flavor4/res']
        java.srcDirs = ['src/flavor3/java', 'src/flavor4/java']
        resources.srcDirs = ['src/flavor3/java', 'src/flavor4/java']
    }
    flavor5 {
        res.srcDirs = ['src/flavor3/res', 'src/flavor5/res']
        java.srcDirs = ['src/flavor3/java', 'src/flavor5/java']
        resources.srcDirs = ['src/flavor3/java', 'src/flavor5/java']
    }
    
  4. 所以在flavor3(从某种意义上讲它不是一种味道,但我保持命名),你可以定义公共代码和资源。 唯一的缺点是,它不可能在基本文件夹和子文件夹中具有相同的类。

答案 1 :(得分:1)

您可以使用风味尺寸对要素进行分组。例如:

flavorDimensions "color", "function", "data"
productFlavors {

    color1 {
        flavorDimension "color"
        // Something
    }
    color2 {
        flavorDimension "color"
        // Something else
    }

    functions1 {
        flavorDimension "function"
        // Something
    }  
    functions2 {
        flavorDimension "function"
        // Something else
    }

    data1 {
        flavorDimension "data"
        // Something
    }  
    data2 {
        flavorDimension "data"
        // Something else
    }    
}

然后您可以使用以下维度对代码进行分解: Color1Function2Data1或Color2Function1Data1 ...