Android问题:java.lang.UnsatisfiedLinkError: No implementation found for异常解决方法

许鸿志
2023-12-01

java.lang.UnsatisfiedLinkError: No implementation found for异常解决方法

一天内遇到两次这个错误,被折磨一整天,关键是报错的原因还不一样,网上没有找到相关的解决方案,在此记录一下,分享给遇到同样错误的同胞。

报错的原因

报这个错的原因猜测是因为没有找到so库,有时候我们再导入jar包的时候,可能还需要导入对应的so库。那么报这个错原因会有两个。

  1. so文件没有导入,或者位置没放对,导致jar包没有找到这个so文件,就会报错。
  2. so文件没有加载,这个问题很少遇见,因为在使用jar包时,jar中一般都会做初始化,但是也会遇到奇葩的情况,需要自己初始化。

1. SO库没有导入

一般jar包的位置是放置到libs下,so文件放在app\src\main\jniLibs目录下,如果没有jniLibs则自行创建。其实so文件也是可以放在libs目录下的,不过要再对应model下build.gradle中加入以下代码:

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

如果你是将so文件放在jniLibs目录下了,那么则必须删除以上代码,否则还是会找不到so文件。
还有一种情况,这个是最骚的,那就是你以上步骤都是对的,但是还是找不到so文件,那么恭喜你,这也许不是你的错……
都是他的错——Android Studio缓存的错,既然知道是缓存的错,那就简单了,把缓存删了就OK了

第一步:关闭AS
第二步:打开项目所在的目录将项目下的.gradle、.idea、gradle三个文件删了
第三步:将所需要的的jar包和so库都直接在文件中重新加入一遍。
第四步:启动AS,启动项目,如果出现一个弹窗提示,不要慌,这是因为把gradle给删了,提示你是否重新创建,点OK就行,别点cancle,否则后面需要你自己创建了,我就帮不到你了。
第五步:没了。

2. so文件没有加载

除了上面的一种情况外,还会出现一种情况,就是因为so库没有初始化。一些jar包只提供了对应so文件,但内部并没有初始化,需要自己初始化o((⊙﹏⊙))o。看来我还是太年轻了。那么怎么解决呢,直接上代码:
Application.class

    static {
        // 十级警告: libname不一定是so库的名字,至于是什么,这个可能需要找给你so库的人问了。
        System.loadLibrary("usb1.0");
        System.loadLibrary("serial_icod");
        System.loadLibrary("image_icod");
    }

嗯,没了,不用担心,这次真的完结了。
以上就是我遇到的,如果没能还是没能解决你的问题,那没办法了╮(╯▽╰)╭。
新增:
还有一种可能,框架下的文件不统一,比如我的jniLibs文件下,只有一个armeabi-v7a,那么他支持在这个框架下的系统使用,如果你还用到了armeabi或arm64-v8a等多个框架,那么你最好保证所有支持的框架下的so库齐全,如果没有,则粘贴一个其他框架下的包。

 类似资料: