2011-11-10 10 views
0

Javaコードをコンパイルして.JARに入れてから、その上でdx --dexを実行しています。私はadbを通じてAndroidデバイスにファイルをプッシュしていますが、実行時に共有ライブラリをリンクする際に問題が発生しています。 HostConnection.javaでAndroid UnsatisfiedLinkError:共有ライブラリをロードする際の問題

、私は自分のライブラリをロードするために、次のコードを持っている:

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) 

HostConnection.javaの25行目は実際にはSystem.loadLibrary( "hostConnectio n ")。

私のライブラリはlibhostConnection.soと呼ばれ、私の.jarはdevice.jarと呼ばれます。これらは両方とも/ data/localに格納されています。共有ライブラリを/ system/libに移動しようとしましたが、シェルはファイルをコピーできません(読み取り専用)。

私が間違っていることはわかりませんが、アプリケーションを実行するときにリンク用の共有ライブラリが見つからないと思います。輸出に間違った変数を使用しているのか、何か他のことをしなければならないのかどうかはわかりません。

誰でもお手伝いできますか?大変感謝しています。

ありがとうございました!

答えて

0

私はそれを理解しました。変数は正しいですが、パスは単にフォルダではなく、何らかの理由での.soファイルである必要があります:これは実際に動作

ローカル

輸出LD_LIBRARY_PATH = /データ/。

ありがとうございます。

1

あなたのeclipseプロジェクトのlib/armeabi(-v7a)ディレクトリにあなたのライブラリを入れてみてはどうですか?私はそれが共有ライブラリをリンクする推奨された方法だと信じています。

+0

私はEclipseをまったく使用していません。私はすべて手動で行っています。 – Jary

関連する問題