百度人脸识别组件与mmkv冲突问题解决方案

最近碰到项目需要实现人脸识别的需求,之前对百度人脸的离线采集sdk做了一些封装形成组件化模块,本想着直接将整个模块集成到项目中,更换一下授权文件和id授权id简单快速,结果却遇到新的问题

问题1 More than one file was found with OS independent path ‘lib/arm64-v8a/libc++_shared.so’.

在这里插入图片描述
编译时直接爆红,根据报错信息应该是项目中有多个模块依赖中的so都依赖到lib/arm64-v8a/libc++_shared.so这个文件了
先用pickFirst排掉重复依赖

        packagingOptions {
//加上这些代码  More than one file was found with OS independent path 'lib/x86/libc++_shared.so'
//            pickFirst 'libc++_shared.so'
            pickFirst 'lib/armeabi-v7a/libc++_shared.so'
            pickFirst 'lib/arm64-v8a/libc++_shared.so'
        }

问题2 java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “__emutls_get_address” referenced by “/data/app/com.epoint.workarea.szjs.zhgd.fangyangjituan-R-M7819VAQfiLZO-t-8mdw==/lib/arm/libmmkv.so”…

编译不报错了,运行闪退继续报错
在这里插入图片描述
问题已经很明确了 定位到so文件,lib/arm/libmmkv.so无法找到符号 “__emutls_get_address” 结合上一个报错信息,个人推测应该是百度人脸识别的so和mmkv的so产生了冲突,应该是编译生成so文件时ndk的版本不同,导致代码中某个符号在不同版本中解析不出来报错。
然后去百度人脸官网提交了工单询问有没有解决办法,客服很耐心的解答说这和我们没关系,我们没有解决方案哦
只能去github上找mmkv的issues找了一圈,发现有人有相同的问题,而mmkv维护者给了解决方案使用最新版的mmkv:1.2.13

最终解决方案

找到依赖mmkv的模块排掉mmkv,依赖1.2.31版本mmkv

    api("com.xxxx.xxx:xxxxx:1.1.0", {
        exclude module: "mmkv"
    })
    implementation 'com.tencent:mmkv:1.2.13'

运行测试百度采集功能正常

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值