当从别的项目拷贝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 ….
网友评论