Android不满意的错误

时间:2014-01-22 14:42:38

标签: android java-native-interface native unsatisfiedlinkerror

我们有这个加载本机库的应用程序,这个库提供了 我们调用的本机方法。在某些手机上(特别是速度较慢 其中),这会导致问题。每当发生UnsatisfiedLinkError时都会发生 (我认为)库仍在“加载”并且调用了一个方法 过早。

有没有办法解决这个问题?就像检查库是否已经加载一样。

1 个答案:

答案 0 :(得分:3)

即使在较慢的设备上,对System.loadLibrary()的呼叫也非常快;但是如果您的应用程序运行多线程,或者只涉及静态构造函数的类被加载以响应某些UI事件 - 那么可能存在竞争条件:依赖于本机库的其他一些类将导致崩溃。

没有禁止使用为所有具有本机方法的类调用System.loadLibrary()的静态构造函数。您可以看到有关本地库被加载的一些警告,但这不会产生负面影响。

有时,我们使用自定义Java代码在第一次运行应用程序时将本机库提取到files目录,而不是依赖于系统安装程序,这会将它们放入lib目录。这应该特别小心,并且所有活动(双关语)应该等到提取libs(通常来自APK的assets文件夹)完成。

另一个问题可能是,对于某些设备,系统库可能会使用您的库的名称。在这种情况下,System.loadLibrary()将从 / system / lib 加载库,而不是从您的应用加载;但这很难解释3秒延迟的影响。