在Android的不同模块中使用不同版本的SO文件(如libc++_shared.so)

2023-12-25

我在应用程序的两个单独的模块中使用两个不同的自定义 aar 库。库附带了许多“.so”文件 - 例如“libc++_shared.so”等。在包含这两个文件后,我收到如下错误:

2 files found with path 'lib/arm64-v8a/libc++_shared.so' from inputs

所以我用了:

packagingOptions {
      pickFirst 
}

不幸的是,对于我来说这不是一个好的解决方案,因为现在运行应用程序后我得到:

  java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "vpx_codec_enc_config_default" referenced by "[...]/base.apk!/lib/arm64-v8a/libmediaengine.so"...

有什么解决方案可以让我在不同版本的不同模块中使用两个相同的 .so 文件吗?


当您在应用程序中包含两个包含相同 .so 文件的不同自定义 aar 库时,您可能会遇到链接器无法决定使用哪个版本的 .so 文件的问题。解决此问题的一种方法是对每个库中的 .so 文件使用不同的名称,例如libc++_shared_v1.so and libc++_shared_v2.so。这样,链接器就会知道每个库要使用哪个版本的 .so 文件。

另一个解决方案是为您的应用程序使用不同的构建类型或风格。这样您就可以为每种构建类型或风格包含不同版本的 .so 文件。例如,您可以有一个debug使用第一个库和一个的构建类型release使用第二个库的构建类型。

您还可以使用自定义链接描述文件来指定要使用的 .so 文件版本。此脚本可用于覆盖默认链接器行为,并且您可以使用它来指定每个库使用哪个版本的 .so 文件。

值得一提的是,使用自定义链接器脚本的解决方案并不总是那么容易,它需要一些 android NDK 和 JNI 的经验,并且在尝试此解决方案之前熟悉 android 构建过程非常重要。

综上所述,在android中的不同模块中使用相同.so文件的不同版本有多种解决方案。这取决于您的用例以及您愿意实施的解决方案的复杂性。

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

在Android的不同模块中使用不同版本的SO文件(如libc++_shared.so) 的相关文章

随机推荐

  • Qt Creator 自动生成的垃圾(文件)的用途是什么以及如何驯服它们?

    我对 Qt 相当陌生 我正在使用新的诺基亚 Qt SDK beta 并且我正在空闲时间为我的诺基亚 N900 开发一个小型应用程序 幸运的是 我能够正确设置所有内容 并在设备上运行我的应用程序 我在学校学过C 所以我认为这不会那么困难 我使
  • 字符串、获取和执行 while

    我正在用 C 语言做一个练习 但我在 处遇到问题 我想重复 cicle 做 while 事实上 如果我输入 1 程序会从顶部再次启动 但它不会在gets testo 我尝试了很多方法都没有解决该错误 有人可以帮助我吗 include
  • 如何使用量角器上传文件

    我正在编写一个需要上传 JPEG 图像的量角器脚本 我可以单击上传按钮 打开 Windows 文件选择器 但是 然后我需要使用量角器在文件选择器对话框中写入文件的路径 但是 我不知道它是如何工作的 我尝试只使用输入路径sendKeys到目前
  • Jasper iReport 表返回空文档,尽管查询有效

    我正在尝试使用 Jasper iReport 4 5 创建报告 并使用表格来显示一些数据 该表由查询填充 当我在查询编辑器中检查查询预览时 我得到了我想要的结果 但是 当我尝试创建报告预览时 我得到的只是 文档没有页面 甚至表头中的静态文本
  • openssl_encrypt 返回 false

    我试图在 PHP 中使用 openssl encrypt 加密字符串 但它一直返回 FALSE encrypted openssl encrypt 1234 AES 256 CBC kGJeGF2hEQ OPENSSL ZERO PADDI
  • TFS构建错误MSB4126(解决方案配置无效)如何修复

    我正在致力于将网站迁移到 Web 项目 我更新了该项目 并且本地一切正常 我已转而构建解决方案而不是项目 但是在构建服务器上构建时 我收到一条错误消息 c agent work 10 s mySolution sln metaproj 0
  • “与 Google 集成”按钮突然消失(收到 404)

    我有 Google Apps Marketplace 应用程序 在其中使用 与 Google 集成 按钮来启动 google OAuth2 流程 由于某种未知原因 该按钮今天消失了 我收到错误 404 https apis google c
  • 如何在Spring Boot中访问GCS存储桶?

    Spring Boot中GCP从GCS存储桶读取文件的配置是什么 您可以自动装配存储类以与存储桶一起使用 CRUD 操作 Autowired private Storage storage public void store InputSt
  • 如何在Python中从XML文件中读取注释文本

    我可以使用 import xml etree ElementTree as et 读取 xml 文件 但我的问题是阅读评论文本数据文件中给出 如何读取 例如在下面的 xml 中 我想阅读基础车辆 is 1997 凯迪拉克卡特拉
  • RSA 中的任何真实世界示例以及 Oracle 中的 ORDS

    我正在使用 ORDS 我将使用 RAS 真正的应用程序安全性 或 VPD 来控制授权 我阅读了 oracle RAS 文档 但没有明白如何将它与 ORDS 没有 apex 一起使用 对于使用 VPD 来说也是如此 我在中创建了用户ords
  • 当 SocketChannel 关闭时如何得到通知?

    我希望在以下情况时收到通知SocketChannel http docs oracle com javase 7 docs api java nio channels SocketChannel html有它的close http docs
  • D3:获取选定元素的边界框

    我的 svg 中有多个元素 我想放大其中之一 我想做同样的事这个例子 http bl ocks org mbostock 9656675但具有非地理路径 就像是 d3 select myElement bounds that I can u
  • pandas 将 NaN 替换为 None 表现出违反直觉的行为

    给定一个系列 s pd Series 1 1 1 2 np nan s 0 1 1 1 1 2 2 NaN dtype float64 如果需要将 NaN 转换为 None 例如 使用镶木地板 那么我希望 0 1 1 1 1 2 2 Non
  • 针对非 IE 浏览器和特定 IE 版本的有效条件注释

    如何使用条件评论来定位 仅限 Internet Explorer 某些 IE 版本 某些 IE 版本和所有其他浏览器 没有IE 只有其他浏览器 以一种验证的方式 validator w3 org http www validator w3
  • Pygame:帧重影?

    我正在使用 pygame 在 python 中开发动画环境 用户绘制每一帧 然后使用 ffmpeg 将动画保存为 avi 电影 我想实现一个功能 但不知道如何 帧重影 就像在绘制当前帧时显示前一帧一样 我尝试创建一个名为ghost当按下下一
  • NSTextView 选择特定行

    我使用的是 Xcode 10 Objective C macOS 而不是 iOS 是否可以以编程方式选择一行NSTextView如果给出行号 无需更改内容的任何属性 只需像用户通过三次单击一样选择它即可 我知道如何按范围获取选定的文本 但这
  • C++ 内存模型和 char 数组上的竞争条件

    基本上我很难理解这一点 来自 Bjarne FAQ 然而 大多数现代处理器无法读取或写入单个 字符 它必须读取或写入整个单词 因此分配给 c 实际上是 读取包含c的单词 替换c部分 然后写 单词又回来了 由于对 b 的赋值类似 因此有 两个
  • 有什么办法可以阻止用户在本地保存文档吗?

    如果用户在我的网站上查看文档 例如代表某些机密信息的 pdf 文件 我是否可以阻止他们在本地保存文档 一句话 不 一旦您将数据发送到他们的浏览器 他们就可以用它做他们想做的事情 您可以使用一些 Flash 组件或 Java Applet 来
  • 如何使用jdbc从db2读取xml列

    假设我在 DB2 中有一个名为 ABC 的表 其中有 2 列 id number content xml String q select from ABC where id 121 Connection conn getConnection
  • 在Android的不同模块中使用不同版本的SO文件(如libc++_shared.so)

    我在应用程序的两个单独的模块中使用两个不同的自定义 aar 库 库附带了许多 so 文件 例如 libc shared so 等 在包含这两个文件后 我收到如下错误 2 files found with path lib arm64 v8a