如何在IntelliJ中添加多个本机库(.so)文件

ash*_*lal 6 android intellij-idea shared-objects android-ndk

我有两个第三方本地库,说libfoo.solibbar.so.我很难加载这两个库.我已将它们复制到libs适当的CPU arch(armeabi,mips和x86)下的文件夹中,并将Project结构>模块> Android> Structurelibs下的Native 目录设置为指向此libs文件夹.我只能加载一个库而不能加载另一个库.如果我尝试一次加载一个(删除其他库),它运行正常.我得到的例外是:

java.lang.UnsatisfiedLinkError: Couldn't load foo from loader dalvik.system.PathClassLoader 
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能让IntelliJ或Android运行时找到这两个本地库?

Kry*_*ton 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");
}
Run Code Online (Sandbox Code Playgroud)

如果 System.loadLibrary() 失败,那么您可以尝试使用 System.load() 或 Runtime.getRuntime().load() 加载完整路径