android - 如何从App的(布局)XML变量中获取Manifest版本号?

我想有一种方法在代码的主要部分引用项目的清单版本号。 到目前为止我一直在做的是将String XML文件中的版本号链接到清单(@ string / Version)。 我想做的是反过来做,将字符串XML变量链接到清单中的版本。 原因? 我只想在一个位置更改清单文件中的版本号。 有没有办法做到这一点? 谢谢!

8个解决方案

354 votes

我相信这里已经回答了。

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

要么

int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;

Konstantin Burov answered 2019-04-13T21:14:14Z

97 votes

没有办法直接获得版本,但有两种解决办法可以完成。

版本可以存储在资源字符串中,并通过以下方式放入清单:

android.R.string.version

可以创建自定义视图,并将其放入XML中。 视图将使用它来指定名称:

android.R.string.version

这些解决方案中的任何一个都允许将版本名称放在XML中。 不幸的是,没有一个很好的简单解决方案,如android.R.string.version或类似的东西。

PearsonArtPhoto answered 2019-04-13T21:15:06Z

52 votes

您可以在XML资源中使用@string/versionName,例如活动布局。 首先在app/src/main/res/xml/preferences.xml中创建一个字符串资源,并在android节点中使用以下代码段:

applicationVariants.all { variant ->

variant.resValue "string", "versionName", variant.versionName

}

所以整个@string/versionName文件内容可能如下所示:

apply plugin: 'com.android.application'

android {

compileSdkVersion 23

buildToolsVersion '24.0.0 rc3'

defaultConfig {

applicationId 'com.example.myapplication'

minSdkVersion 15

targetSdkVersion 23

versionCode 17

versionName '0.2.3'

jackOptions {

enabled true

}

}

applicationVariants.all { variant ->

variant.resValue "string", "versionName", variant.versionName

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

productFlavors {

}

compileOptions {

sourceCompatibility JavaVersion.VERSION_1_8

targetCompatibility JavaVersion.VERSION_1_8

}

}

dependencies {

compile fileTree(include: ['*.jar'], dir: 'libs')

testCompile 'junit:junit:4.12'

compile 'com.android.support:appcompat-v7:23.3.0'

compile 'com.android.support:design:23.3.0'

compile 'com.android.support:support-v4:23.3.0'

}

然后,您可以在XML中使用@string/versionName。 Android Studio会将其标记为红色,但应用程序将编译没有问题。 例如,这可以在app/src/main/res/xml/preferences.xml中使用:

android:title="About"

android:key="pref_key_about">

android:key="pref_about_build"

android:title="Build version"

android:summary="@string/versionName" />

Arun Shankar answered 2019-04-13T21:15:44Z

15 votes

我通过扩展Preference类解决了这个问题。

package com.example.android;

import android.content.Context;

import android.preference.Preference;

import android.util.AttributeSet;

public class VersionPreference extends Preference {

public VersionPreference(Context context, AttributeSet attrs) {

super(context, attrs);

String versionName;

final PackageManager packageManager = context.getPackageManager();

if (packageManager != null) {

try {

PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);

versionName = packageInfo.versionName;

} catch (PackageManager.NameNotFoundException e) {

versionName = null;

}

setSummary(versionName);

}

}

}

然后在我的首选项XML:

seastland answered 2019-04-13T21:16:15Z

9 votes

我使用BuildConfig.VERSION_NAME.toString();。从packageManager获取它有什么区别?

对不起,没有基于XML的解决方案对我有用。

Mullazman answered 2019-04-13T21:16:48Z

2 votes

您无法从XML中使用它。

您需要在XML中扩展您正在使用的小部件,并添加逻辑以使用Konstantin Burov的答案中提到的内容来设置文本。

Macarse answered 2019-04-13T21:17:22Z

1 votes

如果您使用的是gradle,则可以使用build.gradle文件在编译时将值添加到xml资源中。

示例代码提取自:[https://medium.com/@manas/manage-your-android-app-s-versioncode-versionname-with-gradle-7f9c5dcf09bf]

buildTypes {

debug {

versionNameSuffix ".debug"

resValue "string", "app_version", "${defaultConfig.versionName}${versionNameSuffix}"

}

release {

resValue "string", "app_version", "${defaultConfig.versionName}"

}

}

现在根据需要在XML中使用.debug

在调试模式下,它将在链接文章中描述的版本名称中添加.debug。

CrandellWS answered 2019-04-13T21:18:07Z

-3 votes

游戏后期,但你可以通过使用?android:attr无需@string/xyz

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="?android:attr/versionName"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="?android:attr/versionCode"

/>

ddrscott answered 2019-04-13T21:18:33Z

android获取其他app布局,android - 如何从App的(布局)XML变量中获取Manifest版本号?...相关推荐

  1. android xml获取指定,android:如何从xml文件中获取信息?

    我得到一个程序,从一个链接的服务器获取天气.我已经做了一些将字符串结合到URL的字符串.我现在需要从XML文件中获取信息.android:如何从xml文件中获取信息? 这是我的代码:(我更换了,为了安 ...

  2. 从Dicom的xml文件中获取结节坐标并生成mask

    使用数据集:LIDC 代码作用:从xml文件中获取结节坐标并生成mask 备注:没有学过python,都是边写边查,有的地方可能看起来不简洁,请自行优化 21-05-13 Debug 在我训练完Une ...

  3. Android RxJava操作符的学习---组合合并操作符---从磁盘或内存缓存中获取缓存数据

    1. 需求场景 2. 功能说明 对于从磁盘 / 内存缓存中 获取缓存数据 的功能逻辑如下: 3. 具体实现 详细请看代码注释 // 该2变量用于模拟内存缓存 & 磁盘缓存中的数据String ...

  4. php获取百度真实网址,怎么从百度网盘的外链中获取真实的下载地址

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 第一步 http://pan.baidu.com/share/list?channel=chunlei&clienttype=0&web= ...

  5. 阿里云视频上传视频获取进度条问题(使用session方案,获取进度一直为0的解决方案)补充:前后端分离项目中获取进度解决方案

    1.场景描述: 之前用阿里云上传视频,前端反应上传视频经常出现获取视频url失败问题.但是接口我测过很多遍都是没有问题的.后台这边提供了一个视频上传的接口返回一个videoId,还提供了一个根据vid ...

  6. React中 useState在合成事件中是异步的,怎么获取到useState 设置后的最新值,或者说setState中获取到最新值

    useState 在合成事件中是异步的 合成时间是什么呢 合成事件: 简单来说 比如onClick,或者 onChange 或者说是 Input之类的事件 所以一个情景是这样的 当你在onClick ...

  7. c#获取对象的唯一标识_关于uniqueidentifier:在C#中获取唯一标识符的最佳方法...

    本问题已经有最佳答案,请猛点这里访问. 之前我曾问过类似的问题,但现在我减少了一些有关我所需要的限制. 我需要使用C#在计算机上高效地找到唯一标识符. 只要易于检索,它在任何特定计算机上都应始终保持不 ...

  8. php 获取sql字段名,php – 使用DISTINCT和UNION在SQL查询中获取字段名称

    我有以下查询: SELECT DISTINCT(uniq) FROM ( SELECT sex AS uniq FROM type4 UNION SELECT fason AS uniq FROM t ...

  9. 【Android 安全】DEX 加密 ( 代理 Application 开发 | multiple-dex-core 依赖库开发 | 配置元数据 | 获取 apk 文件并准备相关目录 )

    文章目录 一.multiple-dex-core 依赖库作用 二.配置目录元数据 三.multiple-dex-core 代理 Application 四.获取 apk 文件并准备相关目录 五.相关代 ...

最新文章

  1. linux openwrt插件,OpenWrt添加软件包(一)
  2. 大图剪切工具,大图分割工具
  3. lisp java_ai lisp java
  4. TCPDUMP/LIBPCAP 1-由零开始
  5. ML/DL常用评估方法
  6. 各种编程技术中的$符的使用
  7. python写个验证码
  8. Atitit 四种自动机 fsm pda 目录 1. 自动机可分为有限自动机、后进先出自动机、线性有界自动机、图灵机等几种。它们对语言的识别能力各不相同。 2 1.1. 抽象自动机的理论。 2 1.
  9. 智能优化算法论文python复现,附代码--鲸鱼优化算法(WOA)-1
  10. Typora免费版下载【Mac、Windows】
  11. lisp 计算三点的夹角_计算三点所形成的夹角的三种方法
  12. mysql openxml_OpenXML SDK2.0初窥
  13. php翻译英文 保留格式,页面如何实现自动翻译成英文
  14. NR、EN-DC等名词解释
  15. Java 微服务实践
  16. 模仿猫眼电影App一个动画效果
  17. iOS结构化并发---喵神出品。
  18. 微信扫码登陆(JAVA)
  19. 和风天气 (简易版)
  20. 群晖(Synology)NAS服务器硬盘莫名丢失存储空间的解决方法

热门文章

  1. [Linux]Ubuntu下用apt-get安装的应用程序位置
  2. 【设计模式系列】行为型之策略模式
  3. ubuntu 16.04下安装mysql
  4. ERROR: Could not install packages due to an OSError: [Errno 28] 设备上没有空间
  5. matplotlib之scatter
  6. collections模块的Counter类
  7. VS2010与SVN
  8. liunx下NetworkManager导致网卡不能启动
  9. 泰顺县人事劳动社会保障局灾备集成项目招标
  10. 转贴:Google提供网站恶意软件侦测服务