Android JNI,如何加载soname libxx.so.1.2.3的库

2024-01-13

需要使用来自第 3 方的 Android 共享库,该库的 soname 和文件名相同,格式为 libxx.so.1.2.3,这在 Linux 上很常见。我将lib文件重命名为libxx.so,并使用ndk-build将libxx.so链接到libmyjni.so中。在我的 java 代码中,在调用 libmyjni.so 中的函数之前,我像这样加载它们:

    System.load("/data/local/tmp/libxx.so.1.2.3");
    System.loadLibrary("myjni");

我必须手动将 libxx.so.1.2.3 复制到 /data/local/tmp/ 。这样效果很好,在上面加载之后,我可以调用libmyjni.so中的函数。

在代码“System.loadLibrary("myjni");”中,系统总是尝试从某处获取libxx.so.1.2.3。我想知道,在现实世界中,如何在安装过程中将 libxx.so.1.2.3 复制到 Android 设备上的特定位置?这样我就可以 System.load() 它。

或者android有官方的方法将自制的lib安装到/system/lib/?

如果 libxx.so.1.2.3 的格式为 libxx.so 那么我可以使用 System.loadLibrary("xx") 来加载它。


这就是我最后所做的,保持 libxx.so.1.2.3 不变并用 Java 完成所有操作:

将 libxx.so.1.2.3 放入 android 资产中。 在 MainApp.OnCreate() 中,将文件复制到私有文件夹并从那里加载:

    AssetManager am = applicationContext.getAssets(); 
    in = am.open(OPENSSL_SO_LIB_NAME); // source instream

    File privateStorageDir = applicationContext.getFilesDir();
    String libPath = privateStorageDir.getAbsolutePath();  // copy the lib to here ...

    System.load(libPath + "/" + SO_LIB_NAME);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android JNI,如何加载soname libxx.so.1.2.3的库 的相关文章

随机推荐

  • 将 NetLogo 数据导出到带有节点和边的图形

    我在 NetLogo 中创建了代理 海龟 之间的一些链接 该链接将在每个时间步发生变化 我的目标是将这些数据 即海龟和它们之间的链接 导出到带有顶点 海龟 边缘 链接 的图形 这些数据可以作为 Gephi 的输入 是否可以看到图中netlo
  • Google Chrome 从缓存加载图像比下载速度慢

    我正在构建一个网络应用程序来浏览本地服务器上的大照片 奇怪的是 Chrome从缓存加载图像花费了太多时间 甚至比从本地服务器下载还要多 每张照片大约 5Mb Chome 下载大约花费 200 毫秒 但从缓存中花费大约 400 毫秒 Belo
  • 混合defaultdict(dict和int)

    我有 2 个示例列表 我想要实现的是获得nested带有值总和的默认字典 下面的代码效果很好 from collections import defaultdict l1 1 2 3 4 l2 5 6 7 8 dd defaultdict
  • 如何发布到 Facebook 页面(如何获取页面访问令牌 + 用户访问令牌)

    当我作为不同的 Facebook 用户 不是页面管理员 使用我的应用程序时 我正在尝试弄清楚如何发布到 Facebook 页面墙 我在测试时收到一系列错误消息 异常 200 用户尚未授权应用程序执行此操作 页面管理员已访问该应用程序并接受以
  • 插入新行而不是更新当前行

    您好 我对下面的代码有疑问 我正在做ajax 如果数据完全相同 则不会插入记录 但是 如果文本区域中的文本发生更改 它应该更新记录 但会插入新行 这是我的模型
  • 函数参数最佳实践

    我对函数参数的使用有疑问 过去 我总是编写代码 将函数所需的所有信息作为参数传入 IE 不使用全局参数 然而通过查看其他人的代码 不带参数的函数似乎是常态 我应该注意到 这些是类的私有函数 并且作为参数传入的值实际上是该类的私有成员变量 这
  • 有没有办法删除force_classic_login参数?

    当我请求使用我的 IG 应用程序登录时 它会自动向用户发送这个奇怪的登录信息 并生成此 URL 我注意到如果我删除参数强制经典登录 它带我去新品牌 有人知道如何通过SDK控制它吗 谢谢 None
  • 更改节点后如何更新 XML 文件? [复制]

    这个问题在这里已经有答案了 我正在使用 Node setTextContent 编辑节点 但它不会更改文件中的任何内容 如果我打印文本内容后 它会显示为已更改 但在程序关闭后它不会保留 for int y 0 y
  • text-indent: -9999px 是一种用图像替换文本的糟糕技术吗?有哪些替代方法?

    本文 http luigimontanez com 2010 stop using text indent css trick 说我们应该避免使用这种技术 This one http aext net 2010 02 css text in
  • 嵌套产生返回 IEnumerable> 并带有惰性求值

    我写了一个LINQ扩展方法SplitBetween类似于String Split gt new List
  • 使用 Twitter API - 如何使用不记名令牌获得参与端点的身份验证

    我正在尝试为营销仪表板获取我公司推文的参与度数据 我能够使用 Tweepy 进行身份验证以获取基本的 Twitter 源数据 但参与端点给我带来了麻烦 我是否有可能通过使用 Tweepy 进行身份验证 然后使用不记名令牌进行身份验证 从而搞
  • 使用Python搜索具有各种编码的文本文件内容?

    打开文本文件以在文件内容中查找匹配项时 我遇到了可变文本编码的问题 我正在编写一个脚本来扫描文件系统以查找具有特定内容的日志文件 以便将它们复制到存档中 名称经常发生变化 因此内容是识别它们的唯一方法 我需要识别 txt 文件并在其内容中找
  • 如何在 Bash 中运行一个超时的进程? [复制]

    这个问题在这里已经有答案了 可能的重复 Bash 脚本在给定的超时后杀死子进程 https stackoverflow com questions 5161193 bash script that kills a child process
  • 使 GCM/CBC 密码在 golang 中可流式传输

    Go 中的 GCM 和 CBC AES 密码不能与 StreamWriter 或 StreamReader 一起使用 这迫使我将整个文件分配到内存中 显然 这对于大文件来说并不理想 我正在考虑通过将一些固定大小的块分配到内存中并将它们提供给
  • 将大量常量和工作区变量传递给 fsolve 目标函数的最佳方法是什么?

    与根本不使用全局变量相比 调用全局变量需要花费大量时间来加载 考虑一个具有 1000 次迭代的循环 对这些变量进行一些计算 0 6 秒没有全局变量 约 1000 个变量 2 2 秒一个定义的全局变量 和其他变量 6 秒约 1000 个全局变
  • 如何使用 PHP 和 htaccess 创建动态子域?

    我有一个问题 我想设置 PHP 和 htaccess 来创建动态子域 我不知道怎么办 目前我的网址如下所示 www exemple com index php subdomain mike component content id 26 t
  • 在 Firebase 中创建新目录并插入数据

    我想在 Firebase 中动态创建五个新目录 我也想动态地在这些目录中插入数据 我为此目的编写了这个 jquery 脚本 for var i 0 i lt 5 i var dataRef new Firebase https blr re
  • 使用 Javascript 获取当前域名(不是路径等)

    我计划为同一个网站购买两个域名 根据使用的域 我计划在页面上提供略有不同的数据 有没有办法让我检测页面加载的实际域名 以便我知道将内容更改为什么 我已经四处寻找类似的东西 但大多数都没有按照我想要的方式工作 例如当使用 document w
  • 使用 RTSP 的视频流:Android

    我正在尝试在我的 Linux 计算机上安装 Wowza 服务器 以便为我的 Android 应用程序启用 RTSP 流 在 Android 客户端 我的应用程序需要进行哪些更改 我使用 Videoview 只是播放本地存储的视频文件 现在我
  • Android JNI,如何加载soname libxx.so.1.2.3的库

    需要使用来自第 3 方的 Android 共享库 该库的 soname 和文件名相同 格式为 libxx so 1 2 3 这在 Linux 上很常见 我将lib文件重命名为libxx so 并使用ndk build将libxx so链接到