首页 > 其他分享 >Android获取VersionName

Android获取VersionName

时间:2023-10-05 10:22:50浏览次数:50  
标签:VersionName debug variant 获取 versionName versionCode output Android

使用

private String versionName = BuildConfig.VERSION_NAME;
    // 在需要的地方使用versionName
    public String getVersionName() {
        return versionName;
    }

获取到的值一直是个固定值,

https://cloud.tencent.com/developer/ask/sof/555589
我们有一个releasedebug buildType,并希望将versionCodeversionName设置为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之前,这是可行的,但现在不行了。请给我建议。

标签:VersionName,debug,variant,获取,versionName,versionCode,output,Android
From: https://www.cnblogs.com/zhaogaojian/p/17743116.html

相关文章

  • AutoCAD VBNET 获取曲线在3个基本平面的投影
    求取空间任意曲线在xoy/yoz/xoz平面的投影  <CommandMethod(NameOf(TT_CurveProjected))>PublicSubTT_CurveProjected()DimdocAsDocument=Application.DocumentManager.MdiActiveDocumentDimdbAsDatabase=doc.DatabaseDimedAsEditor=......
  • 两种方法获取电话区号,检验我们对Excel基础知识储备的反应能力!
    1职场实例小伙伴们大家好,今天我们专门拿出一个篇幅讲解一下如何在Excel中提取座机电话的区号。如下图所示:是一张各个单位的联系信息,其中的B列为座机电话号码,座机电话号码有一个特点:就是有一个间隔符“-”将一串数字分成了左右两段,左段数字为区号,右段数字为号码。现在我们需要在C列......
  • JavaScript中获取URL中参数值的方法
    方法一:正则法functiongetQueryString(name){varreg=newRegExp('(^|&)'+name+'=([^&]*)(&|$)','i');varr=window.location.search.substr(1).match(reg);if(r!=null){returnunescape(r[2]);......
  • 国家水稻数据中心数据获取
    importrequestsimportparselimporttimeimportpandasaspddefget_rice_data(page=1):start=pageurl=f"https://www.ricedata.cn/variety/identified/nation_{start}.htm"headers={"User-Agent":"Mozilla/......
  • 获取url后面的参数
    方式一finalStringqueryString=request.getQueryString();System.out.println(queryString);//解码System.out.println(URLDecoder.decode(queryString,StandardCharsets.UTF_8));测试:pageSize=25&pageNum=1&sort%5B%27id%27%5D=desc&sort%5B%27name%27%5D=......
  • 如何获取 C#程序 内核态线程栈
    一:背景1.讲故事在这么多的案例分析中,往往会发现一些案例是卡死在线程的内核态栈上,但拿过来的dump都是用户态模式下,所以无法看到内核态栈,这就比较麻烦,需要让朋友通过其他方式生成一个蓝屏的dump,这里我们简单汇总下。二:如何生成内核态dump1.案例代码为了方便演示,来一段简单的......
  • Android开发笔记[6]-离线中文TTS
    摘要在Android上实现离线中文TTS语音播报.源码地址[https://gitee.com/qsbye/AndTheStone/tree/compose]Releasev0p1中有工程压缩包平台信息AndroidStudio:ElectricEel|2022.1.1Patch2Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-......
  • Android 编译和使用libpng
    libpnglibpngistheofficialPNGreferencelibrary.ItsupportsalmostallPNGfeatures,isextensible,andhasbeenextensivelytestedforover28years.Thehomesitefordevelopmentversions(i.e.,maybebuggyorsubjecttochangeorincludeexperimen......
  • c/c++获取uuid
    c/c++标准库中没有自带的uuid工具函数/类,可以使用三方库libuuid,boost,或者手工实现,如下:[zjh@hs-10-20-xxxlib]$sudoyuminstalllibuuid-devel[sudo]passwordforzjh:Loadedplugins:fastestmirror,langpacksLoadingmirrorspeedsfromcachedhostfilebase......
  • NO.6 Linux 获取文件属性
    1/*2用于获取文件的属性和元数据信息,并输出到终端。3程序接受一个参数作为路径名,通过lstat函数获取指定文件的属性信息,并使用printf函数输出到终端。4注释对代码进行了简要解释,帮助理解各个部分的功能。5*/6#include<sys/types.h>7#include<sys/stat.h>8......