android 按口味链不同的 applicationId 和 applicationIdSuffix

标签 android gradle android-gradle-plugin build.gradle android-productflavors

我有 2 个目标 Android 风格,以及 2 个不同的客户风格。 我需要:

  1. 第一个目标具有 appId 和客户的不同后缀
  2. 第二个目标具有不同的 appId,没有任何后缀。

我的尝试:

flavorDimensions "customer","target"
productFlavors {
    customerA {
        dimension "customer"
        applicationId = "com.mycompany.newappname.customerA"
    }
    customerB {
        dimension "customer"
        applicationId = "com.mycompany.newappname.customerB"
    }
    targetA{
        dimension "target"
    }
    targetB{
        dimension "target"
        applicationId = "com.mycompany.oldappname"
    }
}

它在 targetB 上不起作用。我在维度客户中定义了 appId,而不是在维度目标中定义的 appId。

我尝试过:

defaultConfig {
    applicationId "com.mycompany.newappname"
}
...
flavorDimensions "customer","target"
productFlavors {
    customerA {
        dimension "customer"
        applicationIdSuffix = ".customerA"
    }
    customerB {
        dimension "customer"
        applicationIdSuffix = ".customerB"
    }
    targetA{
        dimension "target"
    }
    targetB{
        dimension "target"
        applicationIdSuffix = ""
        applicationId = "com.mycompany.oldappname"
    }
}

但我得到了结果 targetB appId= "com.mycompany.oldappname.customerB"

编辑

我在companyA/companyB的文件夹java/res中有targetA和targetB都需要的专门代码

最佳答案

似乎客户维度仅参与 targetA。 也许,您需要没有任何客户维度的 targetB。 因此,我会尝试为默认客户和按目标维度的变体过滤器添加新风格。

    flavorDimensions "target", "customer"
    productFlavors {
        targetA {
            dimension "target"
            applicationId = "com.mycompany.newappname"
        }
        targetB {
            dimension "target"
            applicationId = "com.mycompany.oldappname"
        }
        customerUndefined {
            dimension "customer"
        }
        customerA {
            dimension "customer"
            applicationIdSuffix = ".customerA"
        }
        customerB {
            dimension "customer"
            applicationIdSuffix = ".customerB"
        }
    }


    variantFilter { variant ->
        def names = variant.flavors*.name
        switch (variant) {
            case { names.contains("targetA") and names.contains("customerUndefined") }:
                setIgnore(true)
                break
            case { names.contains("targetB") and names.contains("customerA") }:
                setIgnore(true)
                break
            case { names.contains("targetB") and names.contains("customerB") }:
                setIgnore(true)
                break
            default:
                break
        }
    }

关于android 按口味链不同的 applicationId 和 applicationIdSuffix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75957054/

相关文章:

android - 在继承 View 的自定义 View 中添加 TextView

intellij-idea - 为什么 Android Studio/Gradle 在没有进行任何更改的情况下重建我的应用程序?

android - Gradle 同步失败 : invalid type code: 6C

gradle - Gradle包装器忽略已经安装的发行版?

gradle - 依赖项目中缺少依赖项

java - kotlin写的接口(interface)为什么一定要实现接口(interface)中的具体方法

android - 如何将 android 支持库添加到我的 netbeans 项目

android - 调用 onCreate() 时 RoboGuice 是否重新实例化先前存在的对象

android - 错误 : Program type already present: com. google.common.annotations.Beta

android - 错误 :Could not find com. android.tools.build :gradle:2. 1.0-alpha1