9

我在 Android 市场上有一个应用程序,在它的崩溃报告中我得到 java.lang.UnsatisfiedLinkError 崩溃,并且每次它都是针对不同的 .so 文件。

错误看起来像

java.lang.ExceptionInInitializerError
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load *****: findLibrary returned null

或者

java.lang.ExceptionInInitializerError
at java.lang.Thread.run(Thread.java:1019)
Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: alloc_mem_region[871]: OOPS: 116 cannot map library ********. no vspace available.

或者

java.lang.UnsatisfiedLinkError: Couldn't load ******: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:429)
at java.lang.System.loadLibrary(System.java:554)

看起来有些设备找不到一些 .so 文件。崩溃不是针对任何特定的 .so 文件。我的应用程序中有大约 4 个 .so 文件,有时它会因 1 个而崩溃,有时会因另一个而崩溃。

尽管我在几乎所有版本的 Android 上进行了测试,但我在测试时永远无法重现此问题...

任何指针将不胜感激

谢谢

4

4 回答 4

5

我自己也看到过类似的问题——这似乎影响了极少数用户,我无法直接将其与设备类型或操作系统相关联。然而,根据我所做的研究,我在Cyanogenmod Google 代码页面上找到了一个讨论;快速总结一下:听起来该 mod 的某些版本并未精确复制 Google 对系统级库所做的一些更改,这意味着某些符号(__android_log_print例如 )可能会导致错误,包括导致您的库无法加载。

我正在尝试进一步确定这一点,但我想我会分享我迄今为止所拥有的。

于 2012-10-20T16:29:14.153 回答
1

你知道产生这个问题的手机和/或安卓版本吗?

图书馆的规模是多少?也许您在加载库时遇到了旧手机的一些内存限制?

于 2011-12-26T01:05:38.540 回答
0

也许你在 libxxxx.so 中分配了太多内存

“原因:java.lang.UnsatisfiedLinkError:无法加载库:alloc_mem_region [871]:OOPS:116 无法映射库* *。没有可用的 vspace。”

于 2013-01-16T09:05:41.780 回答
0

UnsatisfiedLinkError尽管我的应用程序在模拟器和少数用于测试的 android 设备上运行良好,但我从 Market 收到了有关 的报告。在某些时候,我打开了生成的 .apk 存档,并注意到很少有libs/<ABI>文件夹缺少我使用的链接库之一(.so文件)。事实证明,具有 arm64 功能 CPU 的 Android 设备将加载一些链接库并在找不到我的应用程序使用的库之一的 arm64 版本时崩溃(而不是回退到 arm7v)。

此处解释了具有更多详细信息的类似问题: https ://realm.io/docs/java/latest/#couldnt-load-librealm-jniso

长话短说,我在 build.gradle 中添加了额外的配置,不包括 arm64:

android {
  ndk {
    abiFilters "armeabi", "armeabi-v7a", "x86"
  }
}

附带说明 - arm64-v8a CPU 与 arm-v7a 指令集兼容,它们可以运行 32 位 Thumb 指令,但不允许混合使用 64 位和 32 位库。

于 2015-11-25T17:13:31.453 回答