2013-03-04 23 views
5

Ho un'applicazione pubblicata che segnala un arresto anomalo di java.lang.UnsatisfiedLinkError su alcuni dispositivi. Per essere più precisi, l'applicazione si blocca in fase di start up con il seguente messaggio di registro:java.lang.UnsatisfiedLinkErrore arresto anomalo di alcuni dispositivi

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load qcc: findLibrary returned null

Il crash attuale è nell'istruzione System.loadLibrary("qcc");, quindi l'applicazione non è trovare la libreria di sicuro.

Il problema è che non sono stato in grado di riprodurre il problema da solo. In realtà lo stesso apk funziona perfettamente su molti dispositivi e versioni differenti.


L'app utilizza due librerie C scritte e compilate da una terza persona. Essi sono stati compilati utilizzando il arm-linux-androideabi-4.6 toolchain, e io sono la loro integrazione nel mio progetto in corso nkd-build con il Android.mk seguente file:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := libqcc 
LOCAL_SRC_FILES := qcc/libqcc.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := libqpe 
LOCAL_SRC_FILES := qpe/libqpe.so 
include $(PREBUILT_SHARED_LIBRARY) 

L'errore è stato segnalato su dispositivi diversi, ma tutti loro in questo momento sono uno delle seguenti versioni di Android: 2.2, 2.2.1 o 2.2.2.


Penso che potrebbe essere un problema di architettura o un problema strano durante l'installazione.

Qualcuno sa quale potrebbe essere il problema?


UPDATE:

mi sono reso conto che avrei potuto riprodurre il problema in un emulatore di Android 2.2. Queste sono informazioni extra che posso raccogliere dal logcat.

11:14:59.962 I/dalvikvm( 287): Unable to dlopen(/data/data/.../lib/libqcc.so): Cannot load library: link_image[1995]: failed to link libqcc.so 
11:14:59.962 W/dalvikvm( 287): Exception Ljava/lang/UnsatisfiedLinkError; 
+0

Potrebbe essere un problema armeabi vs. armeabi-v7a. Costruisci per entrambi, per ogni evenienza. –

+0

Seva Alekseyev ha ragione, forse puoi provare a creare un file Application.mk (se non ce l'hai ancora) con questa riga: APP_ABI: = armeabi armeabi-v7a – Esparver

risposta

5

In questo caso il problema era che la biblioteca stava usando alcuni metodi C che non sono supportati su Android 2.2

Questa link era il modo per scoprire il problema.

Metodi come pthread_rwlock_init non sono implementati nella libreria C del sistema fino ad Android 2.3 (source).

Problemi correlati