java.lang.UnsatisfiedLinkError: Native method not found 可能引起的原因

在本地使用.so库时,偶尔会出现java.lang.UnsatisfiedLinkError: Native method not found 异常,产生原因可能如下:

1,生成的.h头文件中 Java没有大写。例如:

JNIEXPORT void JNICALL java_com_android_jni_center_NewJni_sendData
  (JNIEnv * env, jobject obj, jstring str){
  printf("%s",str);
  }

2,存在对应native方法的类,没有静态加载so库  System.loadLibrary("JniC");

public class NewJni {
    public native String getStringFromC();
    public native void sendData(String data);
    public native void sendIntData(int data);
    public native  int getAge();
    static {
        System.loadLibrary("JniC");
    }
}

3,AndroidStudio中,so文件不能放到libs下,放到libs也会出现找不到情况。eclipse 是可以将so文件放到libs下的


正确的方式是放到代码的src/main/jniLibs下面。如下:


4,某些第三方的so文件,要求项目的native方法必须放入到指定的包名下,包名不能任意命名。如果你将含有native方法的类,没有按照他的规定放到指定的位置也可能会出现找不到的情况。大概原因是因为他的so已经按照指定的包名,类名和方法名,生成了对应的so。如果你不按照指定的位置放,那么native方法就不能与so中的方法一一对应,所以就是匹配不到的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值