use*_*142 5 android loadlibrary android-ndk
我们的 Android 应用程序遇到了一个奇怪的问题。在 Fabric 中,我们很少发生崩溃。这是一个标准的 UnsatisfiedLinkError ,意味着在 Java 类的静态初始化程序中,.so 库无法加载。这是我们迄今为止所发现的:
这个问题非常罕见。它发生在数十万台设备中的几百台设备中。
一旦出现这种情况,似乎重启甚至重新安装都不能解决问题。
这种情况发生在索尼、三星、华为等各个品牌上。
从 2.3 到 5.x 的所有 Android 版本都会出现这种情况。
我们在办公室的 Nexus 1 设备上成功捕获了它。当它开始发生时,它总是在 LoadLibrary 调用中失败,即使同一个 apk 在其他设备上运行得很好。
问题发生的时候,我把armv7a和x86版本的lib都去掉了,只留下了armeabi的,以排除加载错误的lib,还是失败。通过Android studio重新运行应用程序多次添加日志仍然导致在同一个地方失败。
然后突然间,在没有明显变化的情况下,它开始在 Nexus 1 中工作,甚至在重试数十次之后,我们无法再次重现该问题。在它开始工作之前发生的唯一一件事是,我尝试使用 adb install 手动安装损坏的 apk,但失败了,下次我通过 Android studio 加载该应用程序时,它工作了,并且从那以后一直工作。我不确定损坏的 apk 安装失败是否以某种方式清除了某些内容,或者这只是一个巧合。
我未能做的事情是检查发生故障时设备上的 lib 文件夹中是否确实存在armeabi .so 文件。我是在它已经开始工作之后才开始考虑这个问题的。
所以,总结一下。该 apk 完全没问题,但可以在 99.9% 的设备上从 Android studio 和 Play 商店安装,但在某些情况下(非常罕见),LoadLibrary 会失败,当失败时,似乎没有明显的修复方法,甚至重新安装都没有解决这个问题,但正如我所解释的,某些东西终于发生了变化,当它开始在 Nexus 1 上工作时,它从那时起就一直继续工作。
这个问题确实很棘手,因为我们现在无法重现它,而且我们知道它至少影响了一小部分用户。
欢迎任何有关如何缩小范围的建议。
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |