具有风味的 ext 变量不适用于多维

ext variables with flavor doesn't work with multiple dimension

我的结构与下面的代码相同,我想为 applicationId 加上不带点的前缀和后缀,并在 gradle 文件的末尾使用 applicationId 值。

我不想使用 applicationIdSuffix,因为它会自动添加点,而且我无法在 gradle 上获得它的值,也无法获得完整的 applicationId。

flavorDimensions "type", "version"

productFlavors.all {
       ext.appIdPrefix = "com.example"
       ext.appId = ""
       ext.appIdSuffix = ""
    }

productFlavors {

        flavor1 {
            dimension "type"
            appId = ".flavor1"
        }

       full {
            dimension "version"
            appIdSuffix = "Full"
        }
}

productFlavors.all  {
     applicationId appIdPrefix + appId + appIdSuffix
}

现在,当我 运行 我的应用 "flavor1full" 时,applicationId 仅为 "com.exmaple.flavor1",并且没有获得 appIdSuffix

的值

我该如何解决?

假设您的最终目标是使用不同的应用 ID 构建不同的应用风格,您应该能够使用如下内容:

flavorDimensions "type"

productFlavors.all {
    ext.appIdPrefix = "prefix"
    ext.appId = "hello.world"
}

productFlavors {
    partial {
        dimension "type"
        ext.appIdSuffix = "suffix1"
    }

    full {
        dimension "type"
        ext.appIdSuffix = "suffix2"
    }
}

productFlavors.all {
    applicationId appIdPrefix + "." + appId + "." + appIdSuffix
}

以上将根据所选的构建变体生成以 suffix1 或 suffix2 结尾的应用程序 ID。不确定我是否理解您为什么需要另一个维度。

不要为每种口味更改应用 ID,而是尝试迭代 applicationVariants:

applicationVariants.all { variant ->
    def flavors = variant.productFlavors
    variant.mergedFlavor.applicationId = flavors[0].appId + flavors[1].appIdSuffix ;
}

由于有两种构建类型,这将遍历每种风格的组合两次。另见 Multi-Dimension Flavor ApplicationId

另请注意您问题中的错字:appIdSuffix "Full" 应为 appIdSuffix="Full"