如何从另一个本机库(.so)加载本机库(.so)?

时间:2018-02-02 09:06:33

标签: java android-ndk loadlibrary

所以,我现在的代码就像它从Java层加载库(比如liba.so)而在内部liba.so加载libb.so.因此,如果我必须将所有库打包到APK中并将其安装在没有root访问权限的设备上,那么构建我的项目的过程是什么,其中来自Java层的一次加载调用将加载两个库,首先是liba。 so(直接调用)然后libb.so(第二次调用,嵌套调用,从liba.so调用)?

1 个答案:

答案 0 :(得分:1)

如果将liba.so和libb.so打包到您的APK中,则安装程序会将两者都解压缩到nativeLibraryDir

从Java,loadLibrary()将自动查看此目录。但是dlopen()并不知道这条路。您必须向dlopen()提供已安装的libb.so的完整路径。

或者,您可以从Java加载libb,然后它将在内存中,liba将在没有dlopen()的情况下找到它的导出符号。

如果您需要更好地了解将库打包到APK中的过程,请参阅this wonderful answer