2012-03-15 13 views
8

Estoy tratando de configurar el android:versionName en mi manifiesto de Android como una referencia al recurso de cadena almacenado en el archivo de recursos externo.Configuración de android: versionName como referencia al recurso de cadena conduce a NullPointerException bajo el emulador

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 situado 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 intenta 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 lo instalará automáticamente en el dispositivo HTC todo funciona perfecto. El nombre de la versión se pasa por referencia y en la pantalla Acerca de obtengo el valor del nombre de la versión registrado en el logcat. Pero cuando intento construir la aplicación y ejecutarla en el emulador obtengo null en lugar del valor del nombre de la versión.

Ya he intentado construir e instalar la aplicación al emulador usando Eclipse e IDEA. Parece que el problema no está relacionado con IDE.

ACTUALIZACIÓN:

Una cosa adicional parecía que no funciona con el uso de tales versionName y versionCode. La aplicación no se puede implementar en Google Play. aparece el siguiente error:

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

+0

lo hace usando ' 3.15.28.1' work? –

+1

No, no es así. Acabo de intentar agregar un recurso de cadena simple a 'cadenas.xml' y usar referencia en' AndroidManifest.xml' como lo indicó @Espiandev. Todavía sin suerte. –

+0

Duplicado de http://stackoverflow.com/questions/6018079/reference-an-integer-resource-for-android-manifest-versioncode –

Respuesta

2

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

1.) si puede compilar y cargar el APK en el mercado android y se utiliza el número de versión correcto y el nombre, entonces puede usar referencias de recursos para el android: versionCode = "@ integer/version_code" android: versionName = "@ string/version_name"

Si no puede, entonces no debe usar rerences.

2.) Si va a seguir este enfoque, ¿por qué luego tratar de recuperarlos de la información del paquete sobre el uso de getResources(). GetString (R.string.version_name)?

En general, no veo una gran ventaja de este enfoque más allá de poder cambiar un archivo de recursos por un cuadro de compilación. En ese caso, puede que necesite para el último acercamiento poblar su pantalla sobre.

+3

El único propósito de usar referencias en el archivo de manifiesto era mover todos los valores relacionados con la compilación (tales como nombre de la versión, código de versión, fecha de compilación) para separar el archivo xml, lo que facilita que el script de compilación cambie esos valores en un solo lugar. –

2

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

0

Esto debería funcionar. en dimensions.xml agrega 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" 
Cuestiones relacionadas