android - UnsatisfiedLinkError 安卓

标签 android java-native-interface native unsatisfiedlinkerror

我们有这个加载原生库的应用程序,这个库提供 供我们调用的本地方法。在某些手机上(尤其是速度较慢的 的),这会导致问题。每当发生 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/

相关文章:

android - 从 ActionBar 迁移到 ToolBar

java - 使用 FFMpeg 将 BGR BufferedImage 快速转换为 YUV

javascript - React Native-如何将状态从组件传递到其父组件

c++ - 跨平台硬件原生 OpenGL 库,可能带有多媒体?

java - 将图像从我的外部存储文件读取到 native c (openCV) Android 中

android - 什么是委托(delegate)对象?

android - 无法发布 Artifact 'xxx.aar' (xxx.aar),因为它不存在

android - C++ 信号处理程序无法通知 Java 端

java - Android Studio 3.1.2 - 无法运行 C++ 子例程 "No implementation found for Java.lang.String..."

android - PLUS 无法在 Google Play 服务中定义