我正在使用 Gradle 插件构建我的 Android 应用程序。我正在使用 flavors 功能创建四种不同的变体。目前,它是一个具有四个值的单一维度,但将其设置为两个维度且每个维度具有两个值会更合乎逻辑。我有那栋楼,但这就是我遇到麻烦的地方。
我需要四个变体中的每一个都具有不同的包名称。前三个很简单,因为我有一个默认值,并且每个维度都可以覆盖包,但我需要为两个非默认维度都起作用时设置一个包名称。
flavorDimensions "foo", "bar"
productFlavors {
boring.flavorDimension "foo"
charm {
flavorDimension "foo"
packageName "com.example.charm"
}
strange {
flavorDimension "bar"
packageName "com.example.strange"
}
// This is the idea of what I want, but it doesn't work because there
// must be only a single dimension specified here.
charmStrange {
flavorDimension "foo", "bar"
packageName "com.example.charminglystrange"
}
}
我尝试在声明后通过查找组合 flavor 变体来设置它,但运气不佳。我对 Gradle 不是很熟悉,所以我敢肯定有些技巧我没有使用过。或者,也许我可以在 src/charmStrange/AndroidManifest.xml
中指定包名称,然后让合并对其进行排序?这似乎会在未来引起问题。
最佳答案
我有一个类似的问题,这个答案在我的情况下没有经过测试我将产品 flavor 附加到另一个维度设置的应用程序 ID,使用你的示例它将附加 .strange 到包 com.example.charm
android.applicationVariants.all { variant ->
def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName()
def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor();
def appId = variant.getVariantData().getVariantConfiguration().getApplicationId();
if(flavorString.contains("Strange")) {
mergedFlavour.setApplicationId(appId + ".strange")
}
}
但在您的情况下,您需要一个完整的包名称,例如
android.applicationVariants.all { variant ->
def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName()
def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor();
def appId = variant.getVariantData().getVariantConfiguration().getApplicationId();
if(flavorString.contains("charmStrange")) {
mergedFlavour.setApplicationId("com.example.charminglystrange)
}
}
charmStrange 可能需要是 CharmStrange,尝试使用它
关于android - 如何根据两个不同的 flavor 维度设置我的 Android 应用程序包名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23687207/