Android UnsatisfiedLinkError: проблема с загрузкой общей библиотеки - PullRequest
0 голосов
/ 10 ноября 2011

Я компилирую некоторый код Java, помещаю его в .JAR и затем запускаю на нем dx --dex. Я отправляю свой файл на устройство Android через adb, но у меня возникают проблемы с подключением моей общей библиотеки во время выполнения.

В HostConnection.java у меня есть следующий код для загрузки моей библиотеки:

static {
    System.loadLibrary("hostConnection");
}

Я загружаю приложение следующим образом:

adb shell
su
export CLASSPATH=/data/local/device.jar
export LD_LIBRARY_PATH=/data/local/libhostConnection.so
exec app_process /system/bin com.device.client.Main

Я, к сожалению, получаю следующую ошибку:

D/dalvikvm( 1616): DexOpt: load 482ms, verify 84ms, opt 10ms
D/dalvikvm( 1608): DexOpt: --- END 'device.jar' (success) ---
D/dalvikvm( 1608): DEX prep '/data/local/device.jar': unzip in 1715ms, rewrite 1287ms
W/dalvikvm( 1608): Exception Ljava/lang/UnsatisfiedLinkError; thrown during Lcom/device/client/HostConnection;.<clinit>
D/AndroidRuntime( 1608): Shutting down VM
W/dalvikvm( 1608): threadid=1: thread exiting with uncaught exception (group=0x4001d830)
I/Process ( 1608): Sending signal. PID: 1608 SIG: 9
E/AndroidRuntime( 1608): *** FATAL EXCEPTION IN SYSTEM PROCESS: main
E/AndroidRuntime( 1608): java.lang.ExceptionInInitializerError
E/AndroidRuntime( 1608):    at com.device.client.Main.<init>(Main.java:27)
E/AndroidRuntime( 1608):    at com.device.client.Main.main(Main.java:21)
E/AndroidRuntime( 1608):    at com.android.internal.os.RuntimeInit.finishInit(Native Method)
E/AndroidRuntime( 1608):    at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)
E/AndroidRuntime( 1608):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1608): Caused by: java.lang.UnsatisfiedLinkError: Library hostConnection not found
E/AndroidRuntime( 1608):    at java.lang.Runtime.loadLibrary(Runtime.java:461)
E/AndroidRuntime( 1608):    at java.lang.System.loadLibrary(System.java:557)
E/AndroidRuntime( 1620):    at com.device.client.HostConnection.<clinit>(HostConnection.java:25)

Строка 25 в HostConnection.java действительно является System.loadLibrary ("hostConnection").

Моя библиотека называется libhostConnection.so, а мой .jar называется device.jar. Они оба хранятся в / data / local. Я попытался переместить разделяемую библиотеку в / system / lib, но оболочка не позволяет мне скопировать файл (только для чтения).

Я не уверен, что я делаю неправильно, но я считаю, что он не может найти общую библиотеку для ссылок при запуске приложения. Я не уверен, что я использую неправильную переменную в экспорте или я должен сделать что-то еще.

Может ли кто-нибудь помочь мне? Это будет высоко ценится.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

А почему бы вам не попробовать поместить вашу библиотеку в каталог lib / armeabi (-v7a) в вашем проекте eclipse? Я считаю, что это рекомендуемый способ связывания разделяемой библиотеки.

0 голосов
/ 10 ноября 2011

Я понял это.Переменная верна, но путь должен быть просто папкой, а не файлом .so по какой-то причине:

export LD_LIBRARY_PATH = / data / local

Это на самом деле работает.

Спасибо.

...