Configuración de android: versionName como referencia a cadena de recursos lleva a NullPointerException en el emulador

Estoy tratando de establecer el android:versionName en mi android manifiesto como una referencia a la cadena de recursos almacenados en el archivo de recursos externos.

A continuación se muestra un extracto de mi 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" > 

Y el contenido del archivo build.xml ubicado bajo res/values disrectory de mi proyecto:

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

Más tarde intento recuperar el número de versión para mostrarlo en la pantalla Acerca de mi aplicación.

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

Descripción del problema:

Cuando construyo la aplicación y la instalo automáticamente en mi dispositivo HTC todo funciona perfecto. El nombre de la versión se pasa por referencia y en la pantalla Acerca de Tengo el valor de nombre de versión registrado en el logcat. Pero cuando intento construir la aplicación y lanzarla en el emulador consigo null vez del valor del nombre de la versión.

Ya he intentado crear e instalar la aplicación en el emulador con Eclipse e IDEA. Así que parece que el problema no está relacionado con el IDE.

ACTUALIZAR:

Apareció una cosa adicional que no funciona con tal uso de versionName y versionCode . La aplicación no se puede implementar en Google Play. Aparece el siguiente error:

El archivo no es válido: ERROR obtener 'android: versionCode' atributo: atributo no es un valor entero

Creo que hay una mezcla de problemas con este enfoque / cómo lo está utilizando.

1.) si puede compilar y cargar el APK en el mercado de Android y el número de versión correcta y el nombre se utiliza entonces usted es capaz de utilizar referencias de recursos para el androide: versionCode = "@ entero / version_code" android: versionName = "@ String / version_name "

Si no puedes, entonces no deberías usar las rerencias.

2.) Si usted va a tomar este enfoque, ¿por qué entonces tratar de recuperarlos de la información sobre el paquete utilizando getResources (). GetString (R.string.version_name)?

En general, no veo mucho de una ventaja de este enfoque más allá de poder intercambiar un archivo de recursos por un cuadro de construcción. En cuyo caso puede que necesite para el último enfoque para llenar su pantalla.

Puede definir versionName en manifesto como una referencia al recurso de cadena, pero no a versionCode.

Esto debería funcionar. En dimensions.xml, agregue lo siguiente.

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

En su manifiesto agregue lo siguiente.

  android:versionCode="@dimen/version_code" android:versionName="@dimen/version_number" 
  • Instalar referrer no está rastreando en el mercado web android
  • Referencia a una cadena en un recurso de matriz de cadena con xml
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.