2011-08-04 11 views
0

Androidアプリにサードパーティのライブラリを追加しようとしています。これは、.jarファイルと.soファイルを使用します。これはあらかじめ構築された.soファイルです(つまり、Androidアプリ専用に作られたものではありません)。私は.jarファイルや.soファイルのソースファイルにアクセスできません!Android NDKで事前構築されたライブラリを読み込む際に問題が発生する

System.loadLibrary( "foo");を呼び出してライブラリを動的にロードしようとしています。現在、アプリを実行しようとするとUnsatisfiedLinkError:Library foo not foundでクラッシュします。プロジェクトのlibs /とlibs/armeabiファイルの両方に.soファイルがあります。

ここでゴーストを追いかけていますか?私は後のことが実現可能かどうかを判断しようとしています。私が参照しているネイティブコードはありません。私のすべての関数呼び出しは.soファイルに裏打ちされた.jarファイルです。私は何もコンパイルしていないので、Android.mkファイルを実行していません。.soファイルは既に提供されています。私は実際にここから進んでいく方向についていくつかアドバイスを使うことができます。

+0

ここで説明したアイデアの一部を見てみたいです。http://stackoverflow.com/questions/6209070/android-load-native-library – jimkberry

答えて

0

System.loadLibrary()に与えられたベース名が、実際にビルドされたライブラリとは異なるファイル(またはパス)名に展開されている可能性があります。 Logcatは、ロードしようとしているものを正確に表示します。 System.load()をSystem.loadLibrary()の代わりに絶対パス/ファイル名で使用することもできますが、実際には後で動作させるべきです。

私はそれが異なるエラーメッセージを生成すると思いますが、.soがアンドロイドと互換性がない可能性もあります。互換性のあるプロセッサタイプとabiのためだけでなく、ダイナミックライブラリ非バイオメトリックなlibc)はデバイスにインストールされていません。

+0

これは間違いなく可能性があります。私は互換性がないので、あなたが正しいと思う。私はそれがおそらくJNI互換ではない知っているすべてのための地獄!私はこれについて多くのことを読んだことがあります。最終的には、ndk-buildスクリプトを利用してAndroid用のソースファイルを作成しない限り、単純に動作しません。 – BigJim

+0

@BigJim私は、.soの依存関係をダンプし、実際にインストールされていることを確認し、明示的なパスを試してみることで、より詳細に調べる価値があると思います。少なくともそれは教育的経験になるでしょう。 –

関連する問題