1

在我的build.gradle中,我定义了 2 个不同的风味维度:

//list flavorDimensions in override priority order
flavorDimensions 'flavor', 'platform'

//assign each productFlavor a corresponding flavorDimension
productFlavors {
    flavor1 {
        dimension 'flavor'
        applicationId "com.flavor1"
    }
    flavor2 {
        dimension 'flavor'
        applicationId "com.flavor2"
    }
    mobile {
        dimension 'platform'
        applicationIdSuffix '.mobile'
        minSdkVersion 22
    }
    tv {
        dimension 'platform'
        applicationIdSuffix '.tv'
        minSdkVersion 21
    }
}

我希望能够设置versionCodeversionName基于组合,因此以下每个都可以有自己的版本信息:

  • 风味1手机
    • 版本名称 = 1.0.0
    • 版本代码 = 3
  • 风味电视
    • 版本名称 = 1.0.2
    • 版本代码 = 5
  • 风味2手机
    • 版本名称 = 3.0.0
    • 版本代码 = 10
  • 风味电视
    • 版本名称 = 2.0.0
    • 版本代码 = 4
4

2 回答 2

0

能够通过组合以下解决方案来构建解决方案:

  • https://stackoverflow.com/a/30880966
  • https://developer.android.com/studio/build/gradle-tips#configure-dynamic-version-codes

    project.ext{
    
        flavor1Mobile_versionName = "1.0.0"
        flavor1Mobile_versionCode = 3
    
        flavor1Tv_versionName = "1.0.2"
        flavor1Tv_versionCode = 5
    
    
        flavor2Mobile_versionName = "3.0.0"
        flavor2Mobile_versionCode = 10
    
        flavor2Tv_versionName = "2.0.0"
        flavor2Tv_versionCode = 4
    
    }
    
    
    project.android.applicationVariants.all {variant ->
        def versionName = project.ext."${variant.flavorName}_versionName"
        def versionCode = project.ext."${variant.flavorName}_versionCode"
        variant.outputs.each { output ->
            output.versionNameOverride = versionName
            output.versionCodeOverride = versionCode
        }
    }
    
于 2018-11-20T04:06:13.800 回答
0

我遇到了同样的问题,并且能够以不同的方式解决它,但根据此页面未来访问者的情况,它可能会有所帮助。

在您的全局 gradle.properties 文件中,您可以定义不同的版本:

flavor1_versionName=1.0.0
flavor2_versionName=1.2.3
mobile_versionName=1.0.1
tv_versionName=1.0.2

然后,您可以在添加 productFlavors 的 build.gradle(:app) 文件中覆盖 versionName 参数:

productFlavors {
    flavor1 {
        dimension 'flavor'
        applicationId "com.flavor1"
        versionName = flavor1_versionName;
    }
    flavor2 {
        dimension 'flavor'
        applicationId "com.flavor2"
        versionName = flavor2_versionName;
    }
    mobile {
        dimension 'platform'
        applicationIdSuffix '.mobile'
        minSdkVersion 22
        versionName = mobile_versionName;
    }
    tv {
        dimension 'platform'
        applicationIdSuffix '.tv'
        minSdkVersion 21
        versionName = tv_versionName;
    }
}

在同一个 build.gradle 文件中的 defaultConfig 块中,您可以说:

versionName version
project.version version
于 2020-09-30T10:49:26.443 回答