UnsatisfiedLinkError Android
我们有这个加载本地库的应用程序,这个库提供了本地方法供我们调用。 在某些手机(特别是较慢的手机)上,这会导致问题。 每当(我认为)库仍在“加载”并且方法被提前调用时,就会发生UnsatisfiedLinkError。
有没有办法解决这个问题? 就像检查一个库是否已经加载一样。
即使在较慢的设备上,对System.loadLibrary()
的调用速度也非常快。 但是如果您的应用程序运行多线程,或者如果涉及静态构造函数的类仅响应某些UI事件而加载 - 则可能存在竞争条件:依赖存在本机库的其他类会导致崩溃。
没有禁止使用调用System.loadLibrary()
的所有具有本机方法的类的静态构造函数。 你可以看到一些关于本地库被加载的警告,但这不会产生负面影响。
有时,我们使用自定义Java代码在应用程序第一次运行时将本机库提取到文件目录,而不是依赖系统安装程序,这会将它们放入lib目录中。 这应该特别小心,所有活动(双关语)都应该等到提取库(通常来自APK的资产文件夹)完成。
另一个问题是,对于某些设备,系统库可能会使用您的库的名称。 在这种情况下, System.loadLibrary()
将从/ system / lib加载库,而不是从您的应用程序加载; 但这很难解释3秒延迟的影响。