【问题标题】:Android Gradle : Change Version Code for each Build TypeAndroid Gradle:更改每种构建类型的版本代码
【发布时间】:2020-06-09 15:13:23
【问题描述】:

我正在尝试使用以下 Gradle 脚本根据每个 Build Variant 的条件更改版本代码,但它不起作用。我做错了什么还是有其他方法可以实现它。

android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'
    defaultConfig {
        applicationId "com.myapp.example"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    }

    applicationVariants.all { variant ->
            if (variant.name == 'builTypeName') {
                variant.outputs.each { output ->
                    output.versionCodeOverride = 1.1
                }
            }
        }
}

假设我有一个免费的变体名称,另一个是付费的。我想要免费的 versionCode 1.1 和付费的 versionCode 1.2 如何在检查每个变体时根据条件执行此操作?

【问题讨论】:

    标签: android gradle


    【解决方案1】:

    我想这个答案来得有点晚,但对于其他正在苦苦挣扎的人来说。 应在 build.gradle 中的 android{...} 内调用以下方法。

    需要注意的是,versionCode 只能是整数值,因此 1.11.2 只能在作为字符串值的 versionName 中使用。

    applicationVariants.all { variant ->
            variant.outputs.all { output ->
            if (variant.buildType.name == 'free') {
                output.versionCodeOverride = variant.versionCode * 10 + 1
            }
            if (variant.buildType.name == 'paid') {
                output.versionCodeOverride = variant.versionCode * 10 + 2
            }
        }    
    }
    

    【讨论】:

      【解决方案2】:

      使用拆分Apk并给出版本代码

      splits {
              abi {
                  // Enable ABI split
                  enable true
                  // Clear list of ABIs
                  reset()
                  // Specify each architecture currently supported by the SDK
                  include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
                  // Specify that we do not want an additional universal SDK
                  universalApk false
              }
          }
      
           project.ext.versionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
          android.applicationVariants.all { variant ->
              variant.outputs.each { output ->
                  output.versionCodeOverride =
                          project.ext.versionCodes.get(output.getFilter(
                                  com.android.build.OutputFile.ABI), 0) * 10000000 + android.defaultConfig.versionCode
              }
          }
      

      【讨论】:

      • 假设我有一个免费的变体名称,另一个是付费的。我想要免费的 versionCode 1.1 和付费的 versionCode 1.2 如何在检查每个变体时根据条件执行此操作?
      猜你喜欢
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多