【问题标题】:How do I load a native library (.so) from another native library (.so)?如何从另一个本机库 (.so) 加载本机库 (.so)?
【发布时间】:2018-07-12 17:57:52
【问题描述】:

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

【问题讨论】:

  • 能否添加您的代码?
  • 在我的 Java 文件中,我从 System.loadLibrary(liba.so) 加载,然后在 liba.so 的源文件中,我使用 dlopen 打开 libb.so。我想知道如何将它们打包到 APK 中,以便 liba.so 在内部调用 libb.so。现在,我可以从 Java 层调用 liba.so,但没有从 liba.so 调用 libb.so

标签: java android-ndk loadlibrary


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多