【问题标题】:Using Android Renderscript v8 Support Library causes link errors with other shared libraries使用 Android Renderscript v8 支持库会导致与其他共享库的链接错误
【发布时间】:2015-03-31 19:31:14
【问题描述】:

我正在尝试使用来自 SDK Build Tools 22.0.0 的 v8 Renderscript 支持库。

我正在使用 gradle 来构建,我已经包含了这些行

defaultConfig {
    renderscriptTargetApi 21
    renderscriptSupportModeEnabled true
}

导入和使用该库似乎很好,但是当我运行我的应用程序时,尝试加载另一个共享库时它会阻塞,并给出 UnsatisfiedLinkError。如果我除了删除渲染脚本之外没有进行其他更改,则没有链接问题。

这有什么问题吗?我正在使用 SDK 工具 22.0.0、gradle 2.2.1、Android Gradle 插件 1.1.0 和 Android Studio 1.1.0。

【问题讨论】:

  • 你能提供你看到的错误的 logcat 转储吗?
  • 我真的不能,因为它包含专有信息。但要点是,我正在构建依赖于包含 .so 文件的 AAR 库。通常,没有问题,但启用 Renderscript 支持模式后,当应用程序尝试加载该 .so 时,我会收到 UnsatisfiedLinkError。如果没有启用 Renderscript 支持模式(甚至使用 Renderscript,但不是支持库版本),.so 加载正常。
  • 检查它在抱怨哪个符号(它会在日志中说明。)在我看来,您的 AAR 包含的内容与 RS 支持库在本机使用的内容之间可能存在一些重叠水平。

标签: android gradle shared-libraries renderscript


【解决方案1】:

发生在我身上的是,当我在 64 位设备上运行时,PathClassLoader 发现了 64 位版本的渲染脚本库,因此尝试加载项目中包含的所有其他库的 64 位版本。您不能混合运行 64 位和 32 位。但由于某些库在 64 位版本中不存在,PathClassLoader 找不到它们,因此UnsatisfiedLinkError。对我有用的解决方案是排除 64 位版本的渲染脚本库。

查看这篇精彩的文章,了解它是如何完成的。 Mixing 32- and 64-bit Dependencies in Android

Stackoverflow post 提出了一个更简单的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多