Android关于UnsatisfiedLinkError问题的理解与解决

在之前几次往项目添加第三方库或者合并项目的时候出现了不少于十次的UnsatisfiedLinkError的错误,发现每次解决了再次遇到都会重新掉坑,网络上的知识目前所提供的解决方案没有办法囊括问题。所有写下这篇博客,当做自己的标记。以下是错误的官方解释:

        在把本机调用链接到对应的本机定义时,类装入器扮演着重要角色。如果程序试图装入一个不存在或者放错的本机库时,在链接阶段的解析过程会发生 UnsatisfiedLinkError。JVM 规范指定 UnsatisfiedLinkError 是:

      对于声明为 native 的方法,如果 Java 虚拟机找不到和它对应的本机语言定义,就会抛出该异常。

当调用本机方法时,类装入器会尝试装入定义了该方法的本机库。如果找不到这个库,就会抛出这个错误。

      第一种:说的很清楚,就是说找不到对应的so文件,这是第一种情况,首先去看看自己是不是漏了so添加。

      第二种:so在编译的时候,就已经固定了包名,所以需要在应用中调用时,需要创建这个包,并把调用so相关的方法,封装到这个包里

      第三种:但是如果添加了两三个第三方的so库报错了这个问题,那就是不同的库有不同的so文件夹,当其中一个支持的比较少,但是另一个比较全时,也会出现这样的错误,解决方法就是不支持的so文件夹删除。列举一下别人写的例子:

        举个例子:
        环信支持的指令集arm64-v8aarmeabi-v7ax86
        百度地图支持的指令集arm64-v8aarmeabiarmeabi-v7ax86x86_64mipsmips64
        如果想在所有设备上都能运行,需要把x86_64mipsmips64这些删除;
        根据前边所说可以保留armeabiarmeabi-v7a文件夹,然后复制armeabi-v7a里的so文件到armeabi就行了

       

          第四种:报错(这是我遇到的问题)

java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-support-annotations-23.3.0_16262edeb4287d69eb7544500542e84bdbeff311-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.xiaoyigou.xiaoyigou/files/instant-run/dex/slice-library-

           在网络上查询了错误之后主要原因是android studio的instant run导致的。

           参考:http://blog.csdn.net/sinat_31598337/article/details/51418608   里面讲述的将其关闭。这个问题主要是因为一直使用instant run的模式,导致没有加载到so文件,所以才报这个错误。

          以上都是个人的积累,肯定有不足跟遗漏的地方,发现错误会及时改正。

猜你喜欢

转载自blog.csdn.net/weixin_30267253/article/details/68066106