为什么我会从Market获得java.lang.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,有时会崩溃另一个。

我不能在testing时重现这个问题,虽然我几乎testing了所有版本的Android …

任何指针将不胜感激

谢谢

Solutions Collecting From Web of "为什么我会从Market获得java.lang.UnsatisfiedLinkError的报告"

我自己也见过类似的问题 – 这似乎影响到很less的用户,我不能直接将其与设备types或操作系统相关联。 然而,从我所做的研究中,我发现了关于Cyanogenmod Google Code页面的讨论。 快速总结一下:听起来这个mod的某些版本没有精确地复制Google对系统级库的一些更改,这意味着某些符号(例如__android_log_print )可能会导致错误,包括导致库无法加载。

我正在试图把这个进一步下去,但我想我会分享我所要约会的。

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

图书馆的大小是多less? 也许你正在加载库的时候碰到老手机的内存限制?

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

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

我从市场获得有关UnsatisfiedLinkError报告,尽pipe我的应用在模拟器和我用于testing的几个Android设备上工作正常。 在某些时候,我打开生成的.apk文件,注意到很less的libs/<ABI>文件夹缺less我使用的一个链接库( .so文件)。 事实certificate,具有arm64能力的CPU的Android设备将加载一些链接的库,并且当他们无法find我的应用使用的库之一(而不是回落到arm7v)的arm64版本时崩溃。

有关更多详细信息的类似问题,请参阅此处: https : //realm.io/docs/java/latest/#couldnt-load-librealm-jniso

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

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

备注 – arm64-v8a CPU与arm-v7a指令集兼容,可以运行32位Thumb指令,但不允许混合使用64位和32位库。