将android:versionName设置为字符串资源的引用会导致模拟器下的NullPointerException

Vla*_*ets 8 resources android reference version nullpointerexception

我正在尝试将android:versionName我的android清单设置为对存储在外部资源文件中的字符串资源的引用.

以下是我的摘录AndroidManifest.xml:

<manifest
  xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.toycorporation"
  android:versionCode="@integer/version_code"
  android:versionName="@string/version_name"
>
Run Code Online (Sandbox Code Playgroud)

以及位于res/values我的项目的disrectory 下的build.xml文件的内容:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
  <item type="string" name="build_date">03/15/2012</item>
  <item type="integer" name="version_code">315281</item>
  <item type="string" name="version_name">3.15.28.1</item>                 
</resources>
Run Code Online (Sandbox Code Playgroud)

稍后我尝试检索版本号以在我的应用程序的"关于"屏幕上显示它.

PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),0);
Log.d("PackageInfo", "Version name: " + String.valueOf(packageInfo.versionName));
Run Code Online (Sandbox Code Playgroud)

问题描述:

当我构建应用程序并自动将其安装在我的HTC设备上时,一切都很完美.版本名称通过引用传递,在"关于"屏幕上,我获取了logcat中记录的版本名称值.但是当我尝试构建应用程序并在模拟器上启动它时,我得到的null不是版本名称值.

我已经尝试使用Eclipse和IDEA构建应用程序并将其安装到模拟器.所以似乎问题与IDE无关.

更新:

还出现了一个额外的东西,它不能用于versionNameversionCode.应用程序无法部署到Google Play.出现以下错误:

该文件无效:ERROR获取'android:versionCode'属性:属性不是整数值

Mat*_*unt 2

我认为这种方法/您如何使用它存在多种问题。

1.) 如果您可以编译 APK 并将其上传到 android 市场,并且使用了正确的版本号和名称,那么您就可以使用 android:versionCode="@integer/version_code" android:versionName="@ 的资源引用字符串/版本名称”

如果你不能,那么你不应该使用 rerences。

2.) 如果您打算采用这种方法,为什么要尝试使用 getResources().getString(R.string.version_name) 从 packageinfo 中检索它们呢?

总而言之,除了能够通过构建框交换资源文件之外,我没有看到这种方法有太多优势。在这种情况下,您可能需要使用后一种方法来填充您的“关于”屏幕。

  • 在清单文件中使用引用的唯一目的是将所有与构建相关的值(例如版本名称、版本代码、构建日期)移动到单独的 xml 文件,使构建脚本更容易在单个位置更改这些值。 (3认同)