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

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

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

百度人脸识别组件与mmkv冲突问题解决方案_第1张图片
编译时直接爆红,根据报错信息应该是项目中有多个模块依赖中的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”…

编译不报错了,运行闪退继续报错
百度人脸识别组件与mmkv冲突问题解决方案_第2张图片
问题已经很明确了 定位到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'

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

你可能感兴趣的:(android,java,android,组件化,语音识别)