2011-11-10 4 views
0

일부 Java 코드를 컴파일하고 .JAR에 넣은 다음 dx --dex를 실행합니다. 내 파일을 adb를 통해 안드로이드 장치로 보내고 있지만 런타임에 내 공유 라이브러리를 연결하는 데 문제가 있습니다. 나는 불행하게도 다음과 같은 오류를 얻고있다Android UnsatisfiedLinkError : 공유 라이브러리로드 문제

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 

: 나는 응용 프로그램이 방법을로드하고

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

: HostConnection.java에서

, 나는 내 라이브러리를로드하는 코드를 다음 한

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) 

HostConnection.java의 25 번째 줄은 실제로 System.loadLibrary ("hostConnectio 엔").

내 라이브러리는 libhostConnection.so이고 내 .jar은 device.jar입니다. 이들은 모두/data/local에 저장됩니다. 공유 라이브러리를/system/lib로 옮겨 보려고했지만 쉘이 파일을 복사 할 수 없게됩니다 (읽기 전용).

내가 잘못하고있는 것이 확실하지 않지만 응용 프로그램을 실행할 때 링크 용 공유 라이브러리를 찾을 수 없다고 생각합니다. 잘못된 변수를 수출에 사용하고 있는지, 아니면 다른 것을해야하는지 잘 모르겠습니다.

아무도 도와 줄 수 없습니까? 대단히 감사하겠습니다.

대단히 감사합니다!

답변

0

나는 그것을 알아 냈다. 변수는 정확하지만 경로는 폴더가 아니라 어떤 이유로 .so를 파일이어야합니다 :

수출 LD_LIBRARY_PATH =/데이터 /이 실제로 작동

지역.

감사합니다.

1

그리고 이클립스 프로젝트의 lib/armeabi (-v7a) 디렉토리에 라이브러리를 넣으십시오. 공유 라이브러리를 연결하는 권장 방법이라고 생각합니다.

+0

Eclipse를 전혀 사용하지 않고 있습니다. 모두 수동으로 처리하고 있습니다. – Jary

관련 문제