Android调用JNI报java.lang.UnsatisfiedLinkError: No implementation found for错误的解决方法
在接入第三方库时,报如下错误:
2022-08-28 03:14:45.632 7195-7195/com.diyidaima.manage E/AndroidRuntime: FATAL EXCEPTION: main Process: com.diyidaima.manage, PID: 7195 java.lang.UnsatisfiedLinkError: No implementation found for int com.lansosdk.videoeditor.MediaInfo.nativePrepare(java.lang.String, boolean) (tried Java_com_lansosdk_videoeditor_MediaInfo_nativePrepare and Java_com_lansosdk_videoeditor_MediaInfo_nativePrepare__Ljava_lang_String_2Z) at com.lansosdk.videoeditor.MediaInfo.nativePrepare(Native Method) at com.lansosdk.videoeditor.MediaInfo.prepare(MediaInfo.java:230)
问题的本质是相应的so库没有加载,导致报该异常。所以只需要按照下方的方式排查即可:
1、是否建了jniLibs文件,并且将so复制到jniLibs目录下;
2、jniLibs文件名是否写成了niLibs导致错误;
3、jniLibs下的api 架构是不是没有当前测试手机的,只需要在相应Module 的build.gradle的defaultConfig添加如下配置:
defaultConfig { ... ndk { //设置支持的SO库架构。设置测试手机的SO库架构 abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'arm64-v8a' } }
然后查看一下apk包的so库架构,如下图:
可以看到,arm64-v8a、x86、armeabi缺少了三个so库,这就是导致so库没有加载的原因。只需要将armeabi-v7a的三个so库分别复制到arm64-v8a、x86、armeabi即可。
4、如果以上都没问题,那就要检查是否没有对SDK进行初始化,或者初始化的时机不对,比如在初始化之前使用了SDK。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。