加载Android .so有时会失败(很少)

时间:2015-09-26 11:39:08

标签: android android-ndk loadlibrary

我们的Android应用程序存在一个奇怪的问题。在Fabric中,我们遇到了非常罕见的崩溃。它是标准的UnsatisfiedLinkError,这意味着在Java类的静态初始化程序中,.so库无法加载。这是我们到目前为止所发现的:

  • 这个问题非常罕见。它发生在数十万件装置中的几百件装置中。

  • 一旦发生,似乎重新启动甚至重新安装都无法解决问题。

  • 它出现在索尼,三星,华为等各种品牌中。

  • 它发生在2.3到5.x的所有Android版本中。

  • 我们设法在Nexus 1设备的办公室里抓到了一次。当它开始发生时,它总是在LoadLibrary调用中失败,即使相同的apk在其他设备上工作正常。

  • 当问题发生时,我删除了libv7a和x86版本的lib并且只留下了armeabi版本以排除加载错误的lib,它仍然失败。通过Android工作室重新运行应用程序几次添加日志仍然导致失败在同一个地方。

  • 然后突然间,没有明显的变化,它开始在Nexus 1中工作,甚至在几十次重试之后,我们再也无法重现这个问题。在它开始工作之前发生的唯一事情是我试图手动安装一个损坏的adb安装的损坏的apk,下次我通过Android工作室加载应用程序,它工作,甚至从此工作。我不确定腐败apk的安装失败是否以某种方式清理了一些东西,或者它只是巧合。

  • 我没做的就是检查发生故障时armeabi .so文件是否实际存在于设备上的lib文件夹中。在它已经开始工作之后我才开始考虑这个问题。

所以,总结一下。 apk是完全没问题,但安装得很好,从Android工作室Play商店99.9%的设备,但在某些条件下(这是非常罕见的),LoadLibrary失败,当它,它似乎没有明显的修复,甚至没有重新安装解决了它,但正如我解释的那样,最终发生了变化,当它开始在Nexus 1上工作时,它一直在继续工作。

这个问题非常棘手,因为我们现在无法重现它,而且我们知道它至少影响了我们的一小部分用户。

欢迎任何关于如何缩小范围的建议。

0 个答案:

没有答案