7

我有两个 3rd 方本机库,比如说libfoo.solibbar.so. 我很难加载这两个库。我已将它们复制到libs适当的 CPU 架构(armeabi、mips 和 x86)下的文件夹中,并将Project Structure>Modules>Android>Structurelibs下的 Native 目录设置为指向此 libs 文件夹。我只能加载一个库,而不能加载另一个。如果我尝试一次加载一个(删除其他库),它运行良好。我得到的例外是:

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,那么只会复制一个(在我前段时间的试验中)。

然后你可以加载它:

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 回答