java - 安卓 - java.lang.UnsatisfiedLinkError : Native method not found

标签 java android java-native-interface

集成环境:Android Studio

我的静态库位于“jniLibs”文件夹下。

enter image description here

我还加载了那个库。这是我使用的代码:

static 
{
    System.loadLibrary("elianjni");
}

native 方法在单独的类 (ElianNative) 上声明为:

public native int InitSmartConnection(String paramString, int paramInt1, int paramInt2);    

public native int StartSmartConnection(String paramString1, String paramString2, String paramString3, byte paramByte);

但是,当我调用方法 InitSmartConnection 时,应用程序崩溃了,错误是:

java.lang.UnsatisfiedLinkError: Native method not found: com.monitor.camera.connect.ElianNative.InitSmartConnection:(Ljava/lang/String;II)I

at com.monitor.camera.connect.ElianNative.InitSmartConnection(Native Method) 

我不知道这可能是什么原因,因为我只是从另一个WORKING 项目复制了这个库,然后在声明方法和导入必要的 header 时做了同样的事情。

出现这种问题的可能原因是什么?我在堆栈上搜索,有人说这是 .c 文件中方法之前缺少 Java 关键字。但是我不认为这可能是问题所在,因为就像我所说的那样,它在另一个运行良好的项目中使用。

最佳答案

如果您从其他项目复制了 native 库二进制文件 (.so),您必须确保:

  • java中本地方法的声明还是一样的,即方法名和签名都保持不变
  • 本地方法的声明放置在与捐助项目中具有相同名称和包的类中。

同时检查 System.loadLibrary() 是否成功结束,logcat 中没有错误日志。

关于java - 安卓 - java.lang.UnsatisfiedLinkError : Native method not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218562/

相关文章:

java - 通过 double[] 数组对 int[] 数组进行排序

Android 设备重启检查指定的报警时间是否过去

java - 如何使用 Dagger 模块和 Robolectric 测试 Activity onResume() 上的模拟交互?

android - 传递简历 :Mat from android to jni

java - intellij 内部出现不满意的链接错误

java - 将 jdouble* native 变量解析为 double* native 变量 (jni)

java - GL_QUADS 以我不希望的方式渲染

java - Activity完全显示时的回调

java - String.toUpperCase 可以去除重音或不去除重音

java - 类创建性能影响