在代码中获取 android:versionName 清单元素

Posted

技术标签:

【中文标题】在代码中获取 android:versionName 清单元素【英文标题】:Get android:versionName manifest element in code 【发布时间】:2011-06-24 19:26:13 【问题描述】:

我想知道如何解析 androidManifest.xml 文件以通过代码获取应用程序版本号。 android:versionName

【问题讨论】:

如果您使用 Gradle,您可以使用 BuildConfig.VERSION_NAME 获取应用程序的 versionName。在这里查看答案:***.com/a/28352130/293280 【参考方案1】:

无需为此解析AndroidManifest.xml 文件。

您可以通过以下方式获得:

try

    String app_ver = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;

catch (NameNotFoundException e)

    Log.e(tag, e.getMessage());

在您的 onCreate() 方法中使用它。

【讨论】:

我需要将我的应用程序 android:versionName 与下载中的应用程序进行比较。我的应用程序不在 android 市场中。我需要将我的手机中的 versionName 与站点中可用的版本名进行比较,以获取新版本并显示更新它的警报。如何获取应用程序的新版本号在网站上 @jebbifer:只需从您的应用程序创建一个Http Get 请求,并在此请求的参数中发送此值。在您的服务器上,您需要处理该请求并比较该应用程序版本值。如果大于客户端应用程序,则作为响应向他/她发送一个链接以下载该应用程序的新版本。【参考方案2】:

如果这对其他人有帮助,您还可以像访问其他 xml 文件一样从 AndroidManifest.xml 访问 @string 资源。

例如,在AndroidManifest.xml中:

android:versionName="@string/app_versionName"

在代码中:

string versionName = getResources().getString(R.string.app_versionName);

这样你就不需要(烦人的,imo)try/catch 语句。我不确定这是否是一种被认可的做事方式,但这对我来说是有意义的。

【讨论】:

很酷的解决方案!不要直接从清单中编辑字符串,而是使用字符串值并对其进行编辑,这样您的代码就不会改变!我喜欢 ! +2:P 请注意这条 lint 警告消息android:versionName 不能是资源 url,它必须是文字字符串 耻辱。这条 lint 消息一定是最近出现的;我不记得我在做这个的时候看到过它。【参考方案3】:

到目前为止,我使用this文章中的以下代码sn-p,并成功获得了AndroidManifest.xml中的版本代码版本名称

/* Get android:versionName */
String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;

/* Get android:versionCode */
int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;

【讨论】:

请扩展您的答案,因为仅链接的答案在 SO 上不被认为是好的。【参考方案4】:

如果您使用的是 Android Studio,则版本名称在类 BuildConfig 中可用。这个类在编译时生成:

String versionName = BuildConfig.VERSION_NAME;

这是检索版本名称的最简洁方式。

【讨论】:

以上是关于在代码中获取 android:versionName 清单元素的主要内容,如果未能解决你的问题,请参考以下文章

在代码隐藏中获取文本区域

如何在代码中获取 attr 引用?

无法在代码中获取 DropDownList 的文本 - 可以获取值但不能获取文本

如何在 AccuWeather 中获取城市代码天气?

如何在代码中获取电池的容量

在代码中获取 android:versionName 清单元素