Android Gradle:更改每个构建类型的版本代码

时间:2019-04-26 13:15:36

标签: android gradle

我正在尝试使用下面的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,如何在检查每个变体时根据条件执行此操作?

2 个答案:

答案 0 :(得分:0)

使用拆分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
        }
    }

答案 1 :(得分:0)

我想这个答案来得有点晚,但对于其他挣扎中的人来说。 应该在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
        }
    }    
}