如何在Android中获取我的应用程序版本

56

有人能告诉我如何在Android中获取应用程序版本吗?


8
可能是如何获取Android应用的构建/版本号?的重复问题。 - Joshua Pinter
13个回答

149

我对如何向用户提供更新版本感到困惑?Android市场会处理还是我们需要向用户提供相关信息,请给我相关文档链接。 - nileshbirhade
1
@nileshbirhade:关于这个问题,请在Stack Overflow上提出一个单独的问题。或者先尝试谷歌搜索。这就是我得到这个答案的方法。 - Merlyn Morgan-Graham
有人试图编辑问题以添加异常处理,但只是吞掉了异常。我不清楚在哪些情况下调用getPackageInfo会抛出异常(一些应用程序没有指定版本?),以及在这种情况下什么是有用的行为。编辑也没有澄清这一点,所以我拒绝了它。 - Merlyn Morgan-Graham
我们可以使用这个 BuildConfig.VERSION_NAME 吗?@MerlynMorgan-Graham - Poyyamozhi Ramakrishnan
@PoyyamozhiRamakrishnan 我曾经在2011年也试图通过回答问题来获取积分,所以我通过谷歌搜索找到了我的答案。我认为你可以通过谷歌搜索找到你的答案。另外,你也可以尝试一下,看看会发生什么。 - Merlyn Morgan-Graham
显示剩余2条评论

75

我正在使用Android Studio,我意识到可以使用一行代码来实现这个。

/*version name*/
BuildConfig.VERSION_NAME

/*version code*/
BuildConfig.VERSION_CODE

修改后:

如果您使用其他 Android 库,请确保从您的应用程序包中导入 BuildConfig。这类似于自动生成的 R 类来标识资源。


14
public int getVersion(Context context) {
        try {
            PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_META_DATA);
            return pInfo.versionCode;
        } catch (NameNotFoundException e) {
            return 0;
        }
    }
}

在这个链接上有更多相关信息。


GET_META_DATA 似乎只适用于 ComponentInfo,而不是 PackageInfo:http://developer.android.com/reference/android/content/pm/PackageManager.html#GET_META_DATA - Matthew Read

12

获取应用程序信息:

PackageManager manager = this.getPackageManager();
try {
   PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
   String packageName = info.packageName;
   int versionCode = info.versionCode;
   String versionName = info.versionName;
   } catch (NameNotFoundException e) {
   // TODO Auto-generated catch block
   }

10

我找到的最简单、最好的答案是只需导入您的BuildConfig

import your.package.BuildConfig;

那就这样吧。

String verName = BuildConfig.VERSION_NAME;
int verCode = BuildConfig.VERSION_CODE;

非常重要的是导入你的包,因为我一直得到“-1”。 - Team chang

4
如果您正在使用 Eclipse,请尝试以下操作:
PackageInfo packageInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
int versionCode = packageInfo.versionCode;
String version = packageInfo.versionName;

在Android Studio中:
int versionCode = BuildConfig.VERSION_CODE;
String versionName = BuildConfig.VERSION_NAME;

请确保您的模块级build.gradle文件中包含了正确的版本代码。

2
在您的(模块:app)gradle中定义版本名称和版本代码。
defaultConfig {
        applicationId "com.sing.smart"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.1.0"
    }

versionCode

versionCode是一个整数值,用于轻松区分应用程序版本。

当应用程序开发者在Android市场发布更新时,必须增加此值,以便确定用户是否使用旧版应用程序,并提供更新。

versionName

versionName是一个包含常规“发布版本”的字符串,就像其他桌面应用程序中看到的“1.4.5”或“3.7”一样。

versionName只是一个“人类可读”的版本代码。

PackageInfo pinfo = getPackageManager().getPackageInfo(getPackageName(), 0);  
int versionNumber = pinfo.versionCode;  
String versionName = pinfo.versionName;

2
如果您正在使用最新版本的Gradle 8.0.0或更高版本,并在build.gradle(项目级别)中像下面这样进行配置:
classpath 'com.android.tools.build:gradle:8.0.0'

首先,在 build.gradle(app 模块)中的 android 块中添加以下代码,并重新构建项目

android {
    buildFeatures {
       buildConfig = true
    }
}

然后,您可以从您的活动或片段以编程方式获取版本代码和版本名称,如下所示:

int versionCode = BuildConfig.VERSION_CODE;
String versionName = BuildConfig.VERSION_NAME;

1

int versionCode = BuildConfig.VERSION_CODE;(版本代码)

String versionName = BuildConfig.VERSION_NAME;(版本名称)


1

如果您需要用于脚本编写(非程序编写),可以使用此命令:

 adb shell "pm dump com.example.your.package.name | grep \"versionCode\"" | awk '{print $1}' | awk -F '=' '{print $2}'

这几乎就是我需要的,除了你必须安装应用程序才能让它工作。我需要像这样的东西,但完全不需要构建应用程序。这是因为在我的构建发生之前(考虑将其递增)我需要版本号。 - kdbdallas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接