Android——java.lang.UnsatisfiedLinkError错误解决

最近在项目新开发过程中,新集成了一个开源组件,然而集成之后运行时出现了崩溃。崩溃日志如下:

 java.lang.UnsatisfiedLinkError: No implementation found for boolean cn.bmob.v3.helper.BmobNative.init(android.content.Context, java.lang.String) (tried Java_cn_bmob_v3_helper_BmobNative_init and Java_cn_bmob_v3_helper_BmobNative_init__Landroid_content_Context_2Ljava_lang_String_2)
                                                                            at cn.bmob.v3.helper.BmobNative.init(Native Method)
                                                                            at cn.bmob.v3.BmobWrapper.<init>(BmobWrapper.java:48)
                                                                            at cn.bmob.v3.BmobWrapper.V(BmobWrapper.java:35)
                                                                            at cn.bmob.v3.BmobWrapper.Code(BmobWrapper.java:28)
                                                                            at cn.bmob.v3.Bmob.initialize(Bmob.java:70)

参考https://blog.csdn.net/xiaxiayige/article/details/68925669
在android开发中,通常引用了一些第三方的sdk的so库之后,不同机型之间就会发生这样一个错误,Java.lang.UnsatisfiedLinkError
这是由于程序运行的时候未获取到争取的so库包产生的一个错误。

随机解压缩apk包,查看so库的类型,果然除了armeabi之外还包括了其他种类,而在此之前考虑到apk大小瘦身许多so只集成了armeabi类型的:
在这里插入图片描述

新集成的开源组件是

   compile 'com.facebook.fresco:fresco:1.5.0'

本来最开始考虑的解决方案是下载其jar包,集成armeabi的so就好了,后面考虑这样做以后要是再集成新的组件也会出现同样的问题,解决其来非常繁琐。

后面查找资料发现,可以对apk需要的cpu架构进行过滤,在app的build.gradle 下的defaultConfig里面添加过滤即可:

        ndk {
            abiFilters 'armeabi'  //兼容x86cpu架构  需要什么样的架构就添加什么样的
        }

这样再次进行编译会发现apk体积也减少了,而且崩溃问题也即决了。

对于so库的集成到底需要集成几种架构类型的,个人是参考了微信的做法只集成了armeabi一个类型,既可以减少apk大小,兼容性也不错。

猜你喜欢

转载自blog.csdn.net/u014132820/article/details/83119059