Android - java.lang.UnsatisfiedLinkError:找不到本机方法

时间:2016-07-06 07:36:55

标签: java android java-native-interface

IDE:Android Studio

我的静态库位于" jniLibs"文件夹中。

enter image description here

我也装了那个库。这是我使用的代码:

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

本机方法在单独的类(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 项目中复制了这个库,然后在声明方法和导入必要的标题时做了同样的事情。

这种问题的可能原因是什么?我在堆栈上搜索,有人说在.c文件中的方法之前缺少Java关键字。但是,我不认为这可能是问题,因为就像我说的那样,这个用于另一个工作正常的项目。

1 个答案:

答案 0 :(得分:4)

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

  • java中本机方法的声明仍然相同,即方法名称和签名都保持不变
  • 本机方法的声明放在具有与捐赠项目中相同名称和包的类中。

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