7

私は 2 つのサードパーティのネイティブ ライブラリを持っていlibfoo.soますlibbar.so。これらのライブラリの両方をロードするのに苦労しています。libsこれらを適切な CPU アーキテクチャ (armeabi、mips、および x86) の下のフォルダーにコピーし、 [ Project Structure] > [Modules] > [Android] > [Structurelibs ]の下の Native ディレクトリをこの libs フォルダーを指すように設定しました。1 つのライブラリしかロードできず、もう 1 つのライブラリはロードできません。一度に 1 つずつロードしようとすると (他のライブラリを削除して)、問題なく動作します。私が得ている例外は次のとおりです。

java.lang.UnsatisfiedLinkError: Couldn't load foo from loader dalvik.system.PathClassLoader 

これらのネイティブ ライブラリの両方を見つけるために IntelliJ または Android ランタイムを使用するにはどうすればよいですか?

4

1 に答える 1

0

複数のネイティブ ライブラリをロードすることは完全にわかっています。それらを /libs/CPU_ARCH/ ディレクトリにコピーするだけです。ただし、すべてのライブラリは同じアーキテクチャである必要があります。libfoo.so が armeabi で libbar.so が x86 の場合、コピーされるのは 1 つだけです (少し前の試行の時点で)。

次に、それをロードできます。

static {
    //the following 3 are identical
    //System.load(context.getApplicationInfo().dataDir + "/lib/libfoo.so");
    //Runtime.getRuntime().load(context.getApplicationInfo().dataDir + "/lib/libfoo.so");
    System.loadLibrary("foo");

    System.loadLibrary("bar");
}

System.loadLibrary() が失敗した場合は、System.load() または Runtime.getRuntime().load() を使用してフル パスでロードを試みることができます。

于 2013-10-04T02:52:51.380 に答える