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

本文分析了在Android项目中引入多个SDK导致的SO文件冲突问题,并提供了两种解决方案:自行编译一致的SO文件和通过配置abiFilters过滤不兼容的SO文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近一个项目中依赖: 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.youkuaiyun.com/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,用压缩文件打开,就可以知道了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值