zacząłem rozwijanie bardzo prostą aplikację Android, który składa się z trzech części:Dalvik szuka pliku .so z rozszerzeniem ".0" - dlaczego?
- aplikacja Java sama
- fabrycznie wbudowane biblioteki współdzielonej (będziemy nazywać go
libfoo
) - kolejna wspólna biblioteka który korzysta z pre-built biblioteki (nazwijmy go
libfoowrapper
)
System plików wygląda mniej więcej tak:
jni
Android.mk
libfoo.so
foowrapper.c
Plik Android.mk
zawiera następujące elementy:
LOCAL_PATH := $(call my-dir)
#==============================
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
include $(PREBUILT_SHARED_LIBRARY)
#=========================
include $(CLEAR_VARS)
LOCAL_MODULE := foowrapper
LOCAL_SRC_FILES := foowrapper.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)
Kiedy zbudować aplikację w Eclipse, wszystko wydaje się działać prawidłowo - nie błędy są zgłaszane. Jednak, kiedy przesłać aplikację do mojego Samsung Obejrzyj (z systemem Android 4.0.4), otrzymuję następujący błąd w dzienniku:
03-05 21:20:27.859: E/AndroidRuntime(20324): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1936]: 102 could not load needed library 'libfoo.so.0' for 'libfoowrapper.so' (load_library[1091]: Library 'libfoo.so.0' not found)
Dlaczego Dalvik szuka .so.0
pliku zamiast pliku .so
? Jakie zmiany muszę wprowadzić w mojej aplikacji, aby pozbyć się tego błędu?
mógłbyś skopiować jak cię ładują biblioteki po stronie Java? Musisz wykonać System.loadLibrary ("foo") i System.loadLibrary ("foowrapper") w statycznym bloku w Javie, we właściwej kolejności. Co więcej, czy próbowałeś tego w innych urządzeniach? – Esparver
Brzmi jak "libfoowrapper.so" ma odniesienie do 'libfoo.so.0'. Sprawdź, z czym łączy się plik 'libfoowrapper.so'. – fadden