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
:
- Recursos de referencia en javadoc
- ¿Cómo puedo concatenar cadenas estáticas con recursos de cadena XML?
- Referencia una pantalla de preferencias de Android separada desde dentro de otra pantalla de preferencias en XML
- Referencia de color en <item> -Tag, dentro de <layer-list>
- Cómo obtener referencia a un botón creado en un cuadro de diálogo personalizado, utilizando un diseño 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
- Archivo R.java del proyecto de la biblioteca de Android que no importa en el proyecto de la aplicación
- Jni desbordamiento de tabla incluso después de deleteLocalRef
- ¿Cuál es la diferencia entre "? Android:" y "@android:" en un archivo xml de diseño de Android?
- Cómo hacer referencia a R.java de otras aplicaciones en Android, como com.android.music?
- ¿Es posible hacer referencia a otra cadena en strings.xml?
- Mezcla de archivos de audio
- Android: ¿Cómo hago referencia a un estilo que reside en una biblioteca que hace referencia a mi aplicación?
- ¿Hay alguna documentación de Android XML?
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"