基于其他flavor的Gradle flavor

5

有没有可能一种口味基于另一种口味?

例如 build.gradle:

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

enter image description here


你不能直接这样做... 你能描述一下你想在不同版本之间共享哪些数据的示例吗? - Médéric
1
示例主函数不包含颜色,只有逻辑, flavor1 具有自己的颜色和自定义函数,与 flavor2 相同, flavor3 包含 flavor4 和 flavor5 的颜色, flavor4 包含自定义函数, flavor5 包含自定义函数。 - bmooij
2个回答

4

我也遇到了同样的问题,需要一个基础口味和两个从它继承的口味。

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

  1. Create your additional flavors (flavor 4 and 5) same as you did for 1 and 2.
  2. Create folders for those and create a base folder for common code/ressources (e.g. named flavor 3; the same way as you would do for your other flavors).
  3. Now define additional source sets for your child flavors

    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']
    }
    

在 flavor3 中(从这个意义上来说,它不是一种口味,但我保留了原来的命名),您可以定义常见的代码和资源。 唯一的缺点是,在基础文件夹和子文件夹中无法拥有相同的类。


1
我遇到了这个错误:无法获取ProductFlavor_Decorated的未知属性'res' - You'reAGitForNotUsingGit
@你不用Git真是太棒了。我遇到了同样的问题,似乎为属性提供更多的根路径对我有帮助,但我不确定这是否是正确的方法以及为什么答案中的方式失败了(但我首先不理解Groovy,在gradle文件中总是迷失方向): sourceSets.flavor5.res.srcDirs = ['src/flavor3/res', 'src/flavor5/res'] sourceSets.flavor5.java.srcDirs = ['src/flavor3/java', 'src/flavor5/java']等(类似于“资源”)。 - Ped7g

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...

这使得可以将flavor4的函数应用于flavor1的颜色。 - bmooij

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接