Установка android: versionName как ссылка на строковый ресурс приводит к 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" > 

И содержимое файла 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.

ОБНОВИТЬ:

Появилась еще одна вещь, которая не работает с таким использованием versionName и versionCode . Приложение не может быть установлено в Google Play. Появится следующая ошибка:

Недопустимый файл: ERROR получает атрибут 'android: versionCode': атрибут не является целым значением

Я думаю, что существует множество проблем с этим подходом / как вы его используете.

1.), если вы можете скомпилировать и загрузить APK на рынок Android и использовать правильный номер версии и имя, то вы можете использовать ссылки ресурсов для android: versionCode = "@ integer / version_code" android: versionName = "@ строка / VERSION_NAME»

Если вы не можете, вы не должны использовать перерывы.

2.) Если вы собираетесь использовать этот подход, зачем тогда пытаться извлечь их из пакетаinfo с помощью getResources (). GetString (R.string.version_name)?

В целом я не вижу большого преимущества такого подхода, кроме возможности поменять файл ресурсов на сборку. В этом случае вам может понадобиться для последнего подхода заполнить свой экран.

Вы можете установить versionName в манифесте как ссылку на строковый ресурс, но не versionCode.

Это должно сработать. В dimension.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"