【发布时间】:2014-07-29 18:15:59
【问题描述】:
我正在我的应用中设置产品风格,但遇到了一个问题。我的两种产品风味非常相似,仅在一些资源上有所不同,我们称它们为 FlavorA 和 FlavorB。我想将其设置为 FlavorA 是 FlavorB 的父级,这样 FlavorB 可以只覆盖 FlavorA 的一些资源,然后 FlavorA 会覆盖 main 中的一堆资源。有没有办法建立这样的风味层次结构?现在我需要在两者之间复制大量资源才能使其正常工作,我想消除这种重复。
编辑:好的。到目前为止,我有几个与我的问题无关的答案(均已删除),所以让我澄清一下。这与 Java OOP 无关,我已经很清楚了。 :)
我遇到的问题是我的应用程序有一个免费/付费版本,然后是几个只包含主题更改的白标。付费版本仅更改免费版本的一些资产(除了代码更改)。这就是我的productFlavors 的样子:
productFlavors {
whiteLabelA {
applicationId "com.whiteLabelA.android"
}
whiteLabelB {
applicationId "com.whiteLabelB.android"
}
mainFree {
applicationId "com.mainFree.android"
}
mainPaid {
applicationId "com.mainFree.android.paid"
}
}
我希望mainPaid 覆盖mainFree,因为它只会更改一些资源。我想这样做而不是免费/付费构建类型,因为白色标签没有付费版本,并且更容易拥有类似的风味层次结构:
mainPaid extends mainFree {
applicationId "com.mainFree.android.paid"
}
【问题讨论】:
-
@travor-e 你有没有找到这个问题的答案?
-
@SeanBarbeau 有点像。关于口味是否可以扩展,目前还没有答案。我能够以一种不需要扩展口味的方式解决我的问题,所以我把这个问题留了下来。仅供参考,我通过将 mainFree 风味资源放在我的主资源文件夹中解决了我的问题,因为我意识到它应该是默认构建。
-
构建类型有一个
initWith命令允许复制 gradle 配置块(尽管依赖的构建类型仍然需要它自己的源集),但据我所知,没有相当于口味。 -
这里是一个链接,其中包含一些提示以实现此行为。我需要完全相同但直到现在才找到解决方案:groups.google.com/forum/?hl=fr#!topic/adt-dev/f2I9LQIogOM