我正在我的应用程序中设置产品口味,但遇到了一个问题。我的两种产品口味非常相似,只有一些资源不同,我们将它们称为 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"
}
我找到了两个解决方案:
1.使用风味维度.
android {
...
flavorDimensions 'palette', 'color'
productFlavors {
blackAndWhite {
dimension 'palette'
}
redAndWhite {
dimension 'palette'
}
red {
dimension 'color'
}
white {
dimension 'color'
}
}
variantFilter { variant ->
def first = variant.getFlavors().get(0).name
def second = variant.getFlavors().get(1).name
if(!(first.equals('blackAndWhite') && second.equals('white')) ||
!(first.equals('redAndWhite') && (second.equals('white') || second.equals('red')))) {
variant.setIgnore(true);
}
}
...
}
因为variantFilter
我们有 3 种组合而不是 4 种:
blackAndWhite => white
redAndWhite => white
=> red
您可以将其视为red
延伸redAndWhite
and white
延伸blackAndWhite
or redAndWhite
.
这个答案 https://stackoverflow.com/a/28341852/746347和变体过滤器文档 https://developer.android.com/studio/build/build-variants.html#filter-variants很有帮助。
2. 编辑源集。
productFlavors{
flavor1 {
}
flavor2 {
}
}
sourceSets {
flavor2 {
java.srcDirs = sourceSets.flavor1.java.srcDirs
res.srcDirs = sourceSets.flavor1.res.srcDirs
resources.srcDirs = sourceSets.flavor1.resources.srcDirs
aidl.srcDirs = sourceSets.flavor1.aidl.srcDirs
renderscript.srcDirs = sourceSets.flavor1.renderscript.srcDirs
assets.srcDirs = sourceSets.flavor1.assets.srcDirs
}
}
代码示例无耻地复制自这篇博文 http://liberorignanese.blogspot.ru/2015/10/android-studio-flavor-extends-flavor.html。非常感谢它的作者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)