2013-03-04 18 views
5

Mam opublikowaną aplikację, która zgłasza awarię java.lang.UnsatisfiedLinkError na niektórych urządzeniach. Aby być bardziej precyzyjnym, awarii aplikacji na uruchomienie z następującym komunikatem dziennika:Awaria java.lang.UnsatisfiedLinkError na niektórych urządzeniach

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

Rzeczywista upaść jest w instrukcji System.loadLibrary("qcc");, więc aplikacja nie jest znalezienie biblioteki na pewno.

Problem polega na tym, że sam nie udało mi się odtworzyć problemu. W rzeczywistości ten sam apk działa doskonale na wielu różnych urządzeniach i wersjach.


Aplikacja korzysta z dwóch bibliotek C napisanych i skompilowanych przez trzecią osobę. Zostały one przygotowane w oparciu o arm-linux-androideabi-4.6 toolchain, a ja ich integracji w moim projekcie uruchomionym nkd-build z następującym Android.mk pliku:

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) 

Błąd jest zgłaszana na różnych urządzeniach, ale wszystkie z nich w tej chwili są jednym następujących wersji Androida: 2.2, 2.2.1 lub 2.2.2.


Myślę, że może to być problem z architekturą lub dziwny problem podczas instalacji.

Czy ktoś wie, jaki może być problem?


UPDATE:

zdałem sobie sprawę, że mogę odtworzyć problemu w Android 2.2 emulatora. To dodatkowe informacje, które mogłem zebrać z 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

Może być problem z armeabi vs armeabi-v7a. Zbuduj dla obu, na wszelki wypadek. –

+0

Seva Alekseyev ma rację, może możesz spróbować stworzyć plik Application.mk (jeśli jeszcze go nie masz) z tą linią: APP_ABI: = armeabi armeabi-v7a – Esparver

Odpowiedz

5

W tym przypadku problemem było to, że biblioteka została użyciu niektórych metod C, które nie są obsługiwane w systemie Android 2.2

Ten link była droga do odkrycia problemu.

Metody takie jak pthread_rwlock_init nie są zaimplementowane w bibliotece C systemu do wersji Android 2.3 (source).

Powiązane problemy