Android获取VersionName
使用
private String versionName = BuildConfig.VERSION_NAME;
    // 在需要的地方使用versionName
    public String getVersionName() {
        return versionName;
    }
获取到的值一直是个固定值,
https://cloud.tencent.com/developer/ask/sof/555589
我们有一个release和debug buildType,并希望将versionCode和versionName设置为debug的常量值,否则,即使没有代码更改,每次构建也会重新打包apk。
因此,我们设置了一个固定的默认versionCode,并在以后为特定的buildType覆盖它:
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.gradletest"
        minSdkVersion 28
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    applicationVariants.all { variant ->
        if (!variant.buildType.isDebuggable()) {
            variant.outputs.each { output ->
                output.versionCodeOverride = getAppVersionCode()
                output.versionNameOverride = getAppVersionName()
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            signingConfig signingConfigs.debug
            debuggable true
        }
    }
}
虽然这对apk有效,但不幸的是,生成的class BuildConfig始终具有默认的1/"1.0"值。我们按照这个popular answer的建议从应用程序中读取并显示versionNumber。
显然,BuildConfig.java是在配置时生成的,而不是在项目构建时生成的,因此它无法知道所选的变体。如何处理这个问题?
我们的getAppVersionCode()包含一个时间戳,所以每个versionCode都是不同的。我尝试反转语句,以便每次调试构建都会显示不同的versionCode和versionName,这对我们来说很好。
android {
    defaultConfig {
        versionCode getAppVersionName()
        versionName getAppVersionCode()
    }
    applicationVariants.all { variant ->
        if (variant.buildType.isDebuggable()) {
            variant.outputs.each { output ->
                output.versionCodeOverride = 1
                output.versionNameOverride = "1.0"                
            }
        }
    }
}
我们之所以有一个固定的调试versionCode,首先是因为我们不想为每个代码更改重新构建所有子模块。对于第二个变体,即使我们通过output.versionCodeOverride = 1为调试构建设置了固定的versionNumber,所有的子模块都是由Android Studio重新构建的。在Android Studio3.0之前,这是可行的,但现在不行了。请给我建议。
    本博客是个人工作中记录,更深层次的问题可以提供有偿技术支持。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号