【发布时间】:2011-09-07 14:24:37
【问题描述】:
谁能告诉我如何在 Android 中获取应用程序版本?
【问题讨论】:
标签: android
谁能告诉我如何在 Android 中获取应用程序版本?
【问题讨论】:
标签: android
这个page 有一个关于如何从java 做的提示:
PackageManager manager = context.getPackageManager();
PackageInfo info = manager.getPackageInfo(
context.getPackageName(), 0);
String version = info.versionName;
另外,this link has official information on how to properly set up your application versioning。
【讨论】:
getPackageInfo 会抛出(不知何故您的应用程序没有指定版本?),以及在这种情况下什么是有用的行为。编辑也没有说清楚,所以我拒绝了。
我正在使用 Android Studio,我意识到我可以使用一行代码来获得这个。
/*version name*/
BuildConfig.VERSION_NAME
/*version code*/
BuildConfig.VERSION_CODE
已编辑:
如果您使用其他 android 库,请确保从您的应用程序包中导入 BuildConfig。这类似于自动生成的用于识别资源的 R 类。
【讨论】:
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;
}
}
}
更多信息link
【讨论】:
获取申请信息:
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
}
【讨论】:
我找到的最简单和最好的答案是只导入您的 BuildConfig
import your.package.BuildConfig;
那么就
String verName = BuildConfig.VERSION_NAME;
int verCode = BuildConfig.VERSION_CODE;
【讨论】:
如果你使用的是 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 文件中有 mansion 版本代码
【讨论】:
在你(Module : app) gradle 中定义版本名称和版本代码
defaultConfig {
applicationId "com.sing.smart"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.1.0"
}
版本代码
versionCode 是用于轻松区分应用版本的整数值。
应用开发者在 Android Market 中发布应用更新时必须增加该值,以便确定用户是否使用旧版本的应用,并提供更新。
版本名称
versionName 是一个字符串,其中包含在其他桌面应用程序中看到的常规“发布版本”,例如“1.4.5”或“3.7”。
versionName 只是一个“人类可读”的版本代码。
PackageInfo pinfo = getPackageManager().getPackageInfo(getPackageName(), 0);
int versionNumber = pinfo.versionCode;
String versionName = pinfo.versionName;
【讨论】:
如果你需要它来编写脚本(而不是编程),你可以使用这个命令:
adb shell "pm dump com.example.your.package.name | grep \"versionCode\"" | awk '{print $1}' | awk -F '=' '{print $2}'
【讨论】:
int versionCode = BuildConfig.VERSION_CODE;
String versionName = BuildConfig.VERSION_NAME;
【讨论】:
在 Nativescript(使用 Typescript)上,可以这样做:
import {Observable} from 'data/observable';
import * as applicationModule from 'application'
export class AboutViewModel extends Observable {
public version: string;
constructor() {
super();
let manager = applicationModule.android.context.getPackageManager();
let info = manager.getPackageInfo(applicationModule.android.context.getPackageName(), 0);
this.version = info.versionName;
}
}
【讨论】:
在科特林中:
fun getAppVersionName(context: Context): String {
var appVersionName = ""
try {
appVersionName =
context.packageManager.getPackageInfo(context.packageName, 0).versionName
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return appVersionName
}
fun getAppVersionCode(context: Context): Long {
var appVersionCode = 0L
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
appVersionCode =
context.packageManager.getPackageInfo(context.packageName, 0).longVersionCode
}
else{
appVersionCode =
context.packageManager.getPackageInfo(context.packageName, 0).versionCode.toLong()
}
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return appVersionCode
}
【讨论】: