2011-12-15 15 views
9

Tengo una aplicación en el mercado de Android y en sus informes de fallos obtengo java.lang.UnsatisfiedLinkError se bloquea y cada vez es para diferentes archivos .so.¿Por qué obtengo informes de java.lang.UnsatisfiedLinkError de Market

errores parece

java.lang.ExceptionInInitializerError 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load *****: findLibrary returned null 

o

java.lang.ExceptionInInitializerError 
at java.lang.Thread.run(Thread.java:1019) 
Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: alloc_mem_region[871]: OOPS: 116 cannot map library ********. no vspace available. 

o

java.lang.UnsatisfiedLinkError: Couldn't load ******: findLibrary returned null 
at java.lang.Runtime.loadLibrary(Runtime.java:429) 
at java.lang.System.loadLibrary(System.java:554) 

Parece que algunos dispositivos no pueden encontrar algunos archivos .so .. El accidente no es para cualquiera archivo .so particular. Tengo alrededor de 4 .so archivos en mi aplicación y, a veces, se bloquea por 1 y, a veces se cuelga por otro.

nunca podría reproducir este problema durante la prueba, aunque he probado en casi todas las versiones de Android ...

Cualquier punteros sería muy apreciada

Gracias

+1

Creo que ayudaría si mostrases cómo lo vinculas – Warpzit

+1

Just System.loadLibrary ("mylibrary"). Como ya he mencionado en la mayoría de los dispositivos, no hay problemas ... pero aún así recibo algunos informes del mercado ... – Naveen

+0

Todavía no he podido resolver este problema, pero obtuve una información adicional de que mover la aplicación a la tarjeta SD resuelve el problema en algunos dispositivos ... los dispositivos que encontré son en su mayoría dispositivos HTC como HTC Wildfire S ... ¿Alguna sugerencia? – Naveen

Respuesta

1

¿Conoce los teléfonos y/o las versiones de Android que producen este problema?

¿Cuál es el tamaño de las bibliotecas? ¿Tal vez está alcanzando algunos límites de memoria de teléfonos más antiguos mientras carga las bibliotecas?

+0

Esa podría ser una de las razones ... Como dije, no pude reproducir en ninguno de los dispositivos que tengo y los registros del mercado de Android no dan información sobre el dispositivo ... – Naveen

5

He visto problemas similares yo mismo, esto parece afectar a un número muy pequeño de usuarios, y no puedo relacionarlo directamente con los tipos de dispositivos o sistemas operativos. De la investigación que he hecho, sin embargo, he encontrado una discusión sobre el Cyanogenmod Google Code page; para resumir rápidamente: parece que algunas compilaciones de ese mod no han copiado con precisión algunos cambios realizados por Google en bibliotecas de nivel de sistema, lo que significa que algunos símbolos (__android_log_print, por ejemplo) podrían estar causando errores, como la carga de la biblioteca.

Estoy en el proceso de tratar de precisar esto, pero pensé en compartir lo que tengo hasta la fecha.

0

Tal vez alloc demasiada memoria en libxxxx.so

"Causado por: java.lang.UnsatisfiedLinkError: No se puede cargar la biblioteca: alloc_mem_region [871]: oops: 116 No se puede asignar la biblioteca * *. no hay vspace disponible ".

0

Estaba recibiendo informes del mercado sobre UnsatisfiedLinkError, aunque mi aplicación funcionaba bien en el emulador y en algunos dispositivos con Android que tengo para probar. En algún momento abrí el archivo .apk generado y noté que a algunas de las carpetas libs/<ABI> les faltaba una de las bibliotecas vinculadas que uso (archivo .so). Resultó que los dispositivos Android con CPUs con capacidad Arm64 cargarán algunas de las bibliotecas vinculadas y fallarán cuando no puedan encontrar la versión arm64 de una de las bibliotecas que usa mi aplicación (en lugar de volver a recurrir a arm7v).

problema similar con más detalles se explica aquí: https://realm.io/docs/java/latest/#couldnt-load-librealm-jniso

Para resumir, he añadido una configuración adicional en mi construcción.Gradle, que excluye arm64:

android { 
    ndk { 
    abiFilters "armeabi", "armeabi-v7a", "x86" 
    } 
} 

Como nota al margen - CPU arm64-V8A son compatibles con la instrucción del brazo-v7a establecido y que pueden correr las instrucciones del pulgar de 32 bits, pero la mezcla de las bibliotecas de 64 y 32 bits no es permitido.

Cuestiones relacionadas