具有多个维度的Android应用版本控制

时间:2019-05-13 09:49:50

标签: android gradle

我在对具有多种口味和尺寸的Android应用程序进行版本控制时遇到问题。 项目配置如下: 三维:

flavorDimensions "company", "app", "server"

以及多种口味:

productFlavors {
    company1 {
        applicationId "com.com1"
        dimension "company"
    }
    company {
        applicationId "com.com2"
        dimension "company"
    }
    app1 {
        applicationId "com.app1"
        dimension "app"
    }
    app2 {
        applicationId "com.app2"
        dimension "app"
    }
    sever1 {
        dimension "server"
    }
    server2 {
        dimension "server"
    }

要忽略某些可能的混合,请通过在gradle文件中执行setIgnore来完成所有操作

    variantFilter { variant ->
    def names = variant.flavors*.name
    if (names.contains("app1") && names.contains("sever2") ||
            names.contains("app1") && names.contains("sever1") ||
            names.contains("app2") && names.contains("company1") ||
            names.contains("company") && names.contains("server2")) {
        setIgnore(true)
    }
}

一切都基于Advanced Android Flavors系列

因此,使用该配置,我不知道如何为不同的变体设置不同的版本。像

company1app1 {
        versionCode 2
        versionName "1.0." + versionCode
}
company2app1 {
        versionCode 5
        versionName "1.1." + versionCode
}
company1app2 {
        versionCode 8
        versionName "1.0." + versionCode
}
company1app2 {
        versionCode 2
        versionName "1.0." + versionCode
}

有解决方案吗?

1 个答案:

答案 0 :(得分:1)

可能的解决方案:在defaultConfig中添加行

versionCode computeVersionCode()
versionName computeVersionName()

computeVersionCode()computeVersionName()可以是任意函数,例如:

def computeVersionCode(){
    String flavor = getCurrentFlavor()
    if (flavor.startsWith("company1app1")){
        return 2
    } else if (flavor.startsWith("company2app1")){
        return 5
    } else if (flavor.startsWith("company1app2")){
        return 8
    } else if (flavor.startsWith("company2app2")){
        return 2
    } else {
        return 1
    }
}

getCurrentFlavor()在此处https://stackoverflow.com/a/44183316/5312102

中定义