如何使用flavorDimensions为每种口味组合设置不同的applicationId?

2024-02-01

我有一个旧的 Android 应用程序,我正在尝试将其迁移到 Android gradle 构建系统。该应用程序目前构建在多项目设置中,并作为四个不同的应用程序发布(包括两个不同的数据集以及两个数据集的免费/付费版本)。我已经通过使用flavorDimensions(以前称为flavorGroups)设法摆脱了多项目设置,但我不知道如何为每种风味组合设置不同的applicationId。

由于应用程序版本已经发布,我需要保留与当前相同的 applicationid。由于我最初的包命名是如何完成的,我不能简单地使用风味构建类型与“packageNameSuffix”的组合(如果它是一个未发布的应用程序,这将是一个很好的选择)。

https://stackoverflow.com/a/20956353/4177090 https://stackoverflow.com/a/20956353/4177090正在回答如何使用不同的源文件夹进行风味组合,但不是如何(如果可能的话)为构建文件中的每个组合设置特定配置。

Gradle 构建文件片段:

flavorDimensions "price", "dataset"

productFlavors {
    free { flavorDimension "price" }
    paid { flavorDimension "price" }
    dataset1 { flavorDimension "dataset" }
    dataset2 { flavorDimension "dataset" }
}

我希望在我的 gradle 构建文件中包含类似以下内容(请注意我的命名是多么不合逻辑,这就是我不能使用 packageNameSuffix 的原因):

freeDataset1 { applicationId "com.beansys.freeappdataset1" }
freeDataset2 { applicationId "com.beansys.freedataset2" }
paidDataset1 { applicationId "com.beansys.dataset1paid" }
paidDataset2 { applicationId "com.beansys.mypaiddataset2" }

Fredrik 提出的解决方案在将 Android Studio 升级到 1.0.2(并将 gradle 插件升级到 1.0.0)后停止工作,因此我必须添加以下更改(从 gradle 插件 1.3.1 开始):

flavorDimensions "price", "dataset"

productFlavors {
    free { dimension "price" }
    paid { dimension "price" }
    dataset1 { dimension "dataset" }
    dataset2 { dimension "dataset" }
}

android.applicationVariants.all { variant ->
    def mergedFlavor = variant.mergedFlavor
    switch (variant.flavorName) {
        case "freeDataset1":
            mergedFlavor.setApplicationId("com.beansys.freeappdataset1")
            break
        case "freeDataset2":
            mergedFlavor.setApplicationId("com.beansys.freedataset2")
            break
        case "paidDataset1":
            mergedFlavor.setApplicationId("com.beansys.dataset1paid")
            break
        case "paidDataset2":
            mergedFlavor.setApplicationId("com.beansys.mypaiddataset2")
            break
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用flavorDimensions为每种口味组合设置不同的applicationId? 的相关文章

随机推荐