【问题标题】:Gradle flavor based on other flavor基于其他风味的 Gradle 风味
【发布时间】:2015-05-29 09:11:55
【问题描述】:

一种风味是否可能基于另一种风味?

例如 build.gradle:

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

【问题讨论】:

  • 您不能直接这样做...您能否描述一个示例案例,说明您希望在不同口味之间共享哪些数据?
  • 示例 main 不包含颜色和所有逻辑,flavor1 有自己的颜色并具有自定义函数,与 flavor2 相同,flavor3 包含flavor4 和flavor5 的颜色,flavor4 包含自定义函数,flavor5 包含自定义函数

标签: android gradle android-productflavors


【解决方案1】:

我遇到了同样的问题,需要一个基本风味和两个继承的风味。

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

  1. 创建您的其他口味(口味 4 和 5),就像您为 1 和 2 所做的一样。
  2. 为这些创建文件夹,并为通用代码/资源创建一个基本文件夹(例如,命名为风味 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']
    }
    

所以在 flavor3 中(从这个意义上说,这不是一种风味,但我保持原样命名)您可以定义公共代码和资源。 唯一的缺点是,在基本文件夹和子文件夹中不可能有相同的类。

【讨论】:

  • 我收到此错误:Could not get unknown property 'res' for ProductFlavor_Decorated
  • @You'reAGitForNotUsingGit 我遇到了同样的问题,似乎为该属性提供更多根路径对我有帮助,但我不能 100% 确定这是否是正确的方法以及为什么采用这种方法从答案失败(但我首先不了解 Groovy,我总是迷失在 gradle 文件中):sourceSets.flavor5.res.srcDirs = ['src/flavor3/res', 'src/flavor5/res']sourceSets.flavor5.java.srcDirs = ['src/flavor3/java', 'src/flavor5/java'] 等(类似于“资源”)
【解决方案2】:

您可以使用风味维度对特征进行分组。例如:

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的颜色上..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多