2011-12-19 7 views
0

JNIコードをまったく含まないかなり大きな共有ライブラリファイル(= 12メガバイト)があります。Android System.loadLibraryがネイティブライブラリをロード中に停止する

System.loadLibrary("some_file")を呼び出す場合、方法を返すことはなく、関連する出力は生成されません。また、Windows Taskmanagerは、エミュレータのインスタンスがすべてのCPUパワーを奪うわけではないことを報告します。

私は次のコードでクラスがあります。ここでは

static 
{ 
    System.out.println("Trying"); 
    System.loadLibrary("some_file"); 
    System.out.println("Works"); 
} 

がLogCatから与えられた出力です:私は、ライブラリlibsome_file.soを使用してネイティブテストアプリケーションをアップロードした場合

I/System.out(534): Trying 
D/dalvikvm(534): Trying to load lib /data/data/app/lib/libsome_file.so 0x40643c20 

とこれをエミュレータのシェルから実行すると、アプリケーションが動作します。

System.loadLibraryが行っていることをデバッグする方法はありますか、System.loadLibraryが返されない理由を知っている人はいますか?

+0

ライブラリに他のライブラリが必要な場合は問題が発生する可能性がありますが、ハングするとは思われません。私はあなたが正常に小さなライブラリを試したと仮定します。 –

+0

私はいくつかのndk-samplesを試しました。彼らは完全に動作します。 – foens

答えて

1

私は自分自身で解決策を見つけました。私は追加のデバッグツールを使用しませんでしたが、ライブラリがロードされたときに実行されたいくつかのコードを削除しました。特定のコードがハングアップし、System.loadLibraryもハングします。

+0

関連する? http://stackoverflow.com/questions/12701940/hold-in-trying-to-load-lib-and-no-return-for-ever/17514491#17514491 –

+0

いいえ...私たちのコードはハングしました: ( – foens

0

他の人がこの問題に遭遇した場合のために私のソリューションを追加してください。問題は、私たちのライブラリに静的にロードされたいくつかの外部依存関係(OpenSceneGraph)にありました。彼らはAndroid 4.0でぶら下がっていましたが、それは4.2以上で正常に動作していました。

問題がある場合は、__android_log_printをライブラリのJNI_onLoad(もしあれば)に入れてください。それが呼び出されていない場合は、静的に呼び出すことができるすべての関数(マクロの背後に隠れていることがあることに注意してください)を調べ、ライブラリをロードできるかどうかを調べてください。

関連する問題