集成环境:Android Studio
我的静态库位于“jniLibs”文件夹下。
我还加载了那个库。这是我使用的代码:
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/