android - 如何根据两个不同的 flavor 维度设置我的 Android 应用程序包名称?

标签 android android-gradle-plugin

我正在使用 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/

相关文章:

android - 无黑屏的 Activity 之间的平滑过渡

java - 如何从屏幕底部到顶部启动 android 应用程序(不是 Activity )?

android - 使用 64 位或 32 位版本的 Android Studio 时,Gradle 卡在 'build' 或 'assembleDebug'

java - 迁移到 Android Studio 2.2 后出现 DexIndexOverflowException

android - 使用 "resValue"本地化通过 build.gradle 添加的字符串资源

android-studio - 使用gradle时如何定义apk输出目录?

安卓.view.InflateException : Binary XML file line #3: Error inflating class <unknown>

java - 在 while 循环内使用 post 处理程序

java - 通过 REST API 检索结果并将其显示在新 Activity 的 ListView 中( ListView 出现小问题)

android-studio - Android Studio + Gradle:自动完成生成的Java文件