Caused by: java.lang.UnsatisfiedLinkError: No implementation found for void com.geoway.mobile.utils

来源:互联网 发布:tpp ttip 知乎 编辑:程序博客网 时间:2024/05/17 10:39

最近一个项目中依赖: compile 'com.github.barteksc:android-pdf-viewer:2.7.0-beta.1',但是由于还使用了其他的SDK,当运行的时候就出现了这个问题:

 Caused by: java.lang.UnsatisfiedLinkError: No implementation found for void com.geoway.mobile.utils.AndroidUtilsModuleJNI.AndroidUtils_setContext(android.content.Context) (tried Java_com_geoway_mobile_utils_AndroidUtilsModuleJNI_AndroidUtils_1setContext and Java_com_geoway_mobile_utils_AndroidUtilsModuleJNI_AndroidUtils_1setContext__Landroid_content_Context_2)

                                                       at com.geoway.mobile.utils.AndroidUtilsModuleJNI.AndroidUtils_setContext(Native Method)

简而言之,就是出现了c++层给我们编译的so文件出现了问题;通过参考这个http://blog.csdn.net/xulike1990/article/details/54848323;知道了问题出现在我们的这些都是android设备的cup类型:
armeabiv-v7a: 第7代及以上的ARM处理器;
arm64-v8a: 第8代、64位ARM处理器;
armeabi: 第5代、第6代的ARM处理器;
mips:一种RISC处理器。
mips64:64位的。
x86: 平板;

x86_64:64位的平板。根据这些cup生成的so文件的问题;这些问题的根本就是:比如说你的设备是适配arm-64的,其中pdf-viewer中生成了这个arm-64的so文件,而在其他的SDK中又没有生成改SDK对应的arm-64的so文件;因此出现了上述找不到JNI方法的问题;


当然有人可能疑惑,我们单独使用任何一个的时候,自己的设备都没有问题,在一起使用时就出现了问题,这个就是我们的设备,最先适配自己cup对应的so文件,当找不到的时候,会向下适配。当两个都添加时,就会出现上述问题。


重点来了,解决办法:

方法1:如果你可以自己编译so文件,那么你就编译出相同的两套文件夹对应的so文件,就可以了,当然这个跟自己底层SDK开发有关,这个比较高大上


方法2: 屌丝也有屌丝的方法:

相信还记得abiFilters这个东西吧,没错就是ndk{

abiFilters:" "," "};

这个,刚开始我也想这个对我们依赖上来的东西,会不会生效,实验结果表明是生效的;

所以:

ndk {    abiFilters "armeabi-v7a" ,"armeabi" // 指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,armeabi,arm-v8之类的so会被过滤掉)}
解决了我的问题;

希望对大家有帮助!!

另外:你会问你怎么知道你的都生成了哪些cup的包?

这个你讲你的apk改名,改成rar,用压缩文件打开,就可以知道了!

阅读全文
0 0