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

时间:2012-03-15 15:33:09

标签: android reference resources nullpointerexception version

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

以下是我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"
>

和build.xml文件的内容位于我的项目的res/values下面:

<?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>

稍后我尝试检索版本号,以便在我的应用程序的“关于”屏幕上显示它。

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

问题描述:

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

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

更新

出现了一个额外的事情,它不适用于versionNameversionCode的使用。应用程序无法部署到Google Play。出现以下错误:

  

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

3 个答案:

答案 0 :(得分:2)

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

1。)如果您可以编译并上传APK到Android市场并使用正确的版本号和名称,那么您可以使用android的资源引用:versionCode =“@ integer / version_code”android:versionName = “@串/ VERSION_NAME”

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

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

总而言之,除了能够通过构建框交换资源文件之外,我看不出这种方法的优点。在这种情况下,您可能需要使用后一种方法来填充您的屏幕。

答案 1 :(得分:2)

您可以在manifest中将versionName设置为对字符串资源的引用,而不是versionCode。

答案 2 :(得分:0)

这应该有效。在dimensions.xml中添加以下内容。

<resources>
     <item name="version_number" format="float" type="dimen">2.8</item>
     <item name="version_code" format="integer" type="dimen">8</item>
</resources>

在你的清单中添加以下内容。

    android:versionCode="@dimen/version_code"
    android:versionName="@dimen/version_number"