为什么我从Market获得java.lang.UnsatisfiedLinkError的报告

时间:2011-12-15 07:50:12

标签: android crash report google-play unsatisfiedlinkerror

我在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 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

图书馆的大小是多少?也许你在加载库时遇到了旧手机的内存限制?

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我从市场获得关于UnsatisfiedLinkError的报告,即使我的应用程序在模拟器和我用于测试的少数Android设备上工作正常。在某些时候,我打开了生成的.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位库。