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库架构,如下图:

so库分析

 

可以看到,arm64-v8a、x86、armeabi缺少了三个so库,这就是导致so库没有加载的原因。只需要将armeabi-v7a的三个so库分别复制到arm64-v8a、x86、armeabi即可。

4、如果以上都没问题,那就要检查是否没有对SDK进行初始化,或者初始化的时机不对,比如在初始化之前使用了SDK。

 

 

 

发表回复

后才能评论