从别的项目拷贝SO库出现java.lang.UnsatisfiedLinkError: No implementation found问题记录

当从别的项目拷贝so,并且在build文件中配置好了

ndk{

    //设置支持的SO库架构

    abiFilters'armeabi-v7a'(项目支持的so库的架构)

}

sourceSets{

    main{

        jniLibs.srcDirs = ['src/main/jniLibs']

}

}

这时候还是出现了java.lang.UnsatisfiedLinkError: No implementation found这个错误,那么基本上不用怀疑是否是so库架构配置问题,大概率应该是你使用此so库的类所在的项目包名和so库中的接口包名不匹配的问题,解决方法如下:

1:在Android studio Terminal中cd到你存放so库的目录,一般是在main/jniLibs下,随便进入其中一个如:armeabi-v7a,使用命令 nm -D xxxx.so,就能看到接口包名如:T Java_com_test_jni_jniutil_JniUtils_方法名

2:在工程main/java目录下新建对应的com.test.jni.jniutil包

3:在此包下新建类JniUtils,在此类中加载so库,并创建对应的方法

ps: JNI的命名规则

        JNI的命名规则,对于传统的JNI编程来说,JNI方法跟Java类方法的名称之间有一定的对应关系,要遵循一定的命名规则:

前缀:Java_

类的全限定名,用下划线进行分隔(_):com_test_jni_jniutil_JniUtils

方法名:XXXX

JNI函数指定第一个参数: JNIEnv *

JNI函数指定第二个参数: jobject

实际Java参数: jstring, jint ….

你可能感兴趣的:(从别的项目拷贝SO库出现java.lang.UnsatisfiedLinkError: No implementation found问题记录)