我们有这个加载原生库的应用程序,这个库提供 供我们调用的本地方法。在某些手机上(尤其是速度较慢的 的),这会导致问题。每当发生 UnsatisfiedLinkError (我认为)库仍在“加载”并调用了一个方法 过早地。
有没有办法处理这个问题?就像检查库是否已经加载一样。
最佳答案
即使在较慢的设备上,对 System.loadLibrary()
的调用也非常快;但是,如果您的应用程序以多线程方式运行,或者如果涉及静态构造函数的类仅在响应某些 UI 事件时加载 - 那么可能会出现竞争条件:依赖于存在的 native 库的其他一些类将导致崩溃。
对于所有具有 native 方法的类,不禁止使用调用 System.loadLibrary()
的静态构造函数。您可能会看到一些关于 native 库被加载的警告,但这不会产生负面影响。
有时,我们使用自定义 Java 代码将 native 库提取到 files第一次运行应用程序时的目录,而不是依赖系统安装程序,将它们放入 lib目录。这应该格外小心,所有 Activity (双关语意)应该等到库(通常从 APK 的 Assets 文件夹)提取完成。
另一个问题是,对于某些设备,您的库名称可能会被系统库使用。在这种情况下,System.loadLibrary()
将从 /system/lib 而不是从您的应用加载库;但这很难解释 3 秒延迟的影响。
关于android - UnsatisfiedLinkError 安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285967/