每次我更新我的 Android 应用程序时,几个随机客户都会收到此异常。我将其缩小到两个原因,都与使用 jni 有关。
- 升级应用程序时会删除 *.so 库。
- 应用升级时*.so库没有升级,老版本依然存在。
设备报告并未表明此问题与操作系统版本、内存或任何合理因素有关。与其关注为什么 Android 在升级库时遇到问题,我希望有人知道如何在遇到此错误时手动将库从应用程序的 APK 中拉出并将它们放在正确的目录中。
每次我更新我的 Android 应用程序时,几个随机客户都会收到此异常。我将其缩小到两个原因,都与使用 jni 有关。
设备报告并未表明此问题与操作系统版本、内存或任何合理因素有关。与其关注为什么 Android 在升级库时遇到问题,我希望有人知道如何在遇到此错误时手动将库从应用程序的 APK 中拉出并将它们放在正确的目录中。
似乎您可能有 ABI 不匹配 - 或者可能是由人们一直在谈论的 Android 错误引起的错误ABI 不匹配,当首选专用品种之一时,可能不接受通用 arm 库。
至于您的解决方法...您无法写入应用程序安装的 lib/ 目录,但如果您使用 System.load() 具有精确的路径/文件名而不是 loadLibrary() 仅具有库,则可以将库放在其他位置姓名。我认为没有任何官方(如未来证明)方法可以从您的 apk 中提取任意内容,尽管目前使用 zipfile 类(可能使用诸如 Context.getPackageCodePath() 之类的东西来发现apk 的位置和安装变量名称)
检查库加载尝试是否成功并在失败时报告有关设备的信息可能同样有用。