Установка android: versionName в качестве ссылки на строковый ресурс приводит к исключению NullPointerException под эмулятором - PullRequest
8 голосов
/ 15 марта 2012

Я пытаюсь установить 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.Появляется следующая ошибка:

Файл недействителен: ОШИБКА при получении атрибута 'android: versionCode': атрибут не является целочисленным значением

Ответы [ 3 ]

2 голосов
/ 07 июля 2013

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

2 голосов
/ 20 марта 2012

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

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

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

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

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

0 голосов
/ 09 мая 2014

Это должно работать.в размеры.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" 
...