1.背景:
项目中要集成商汤的活体检测sdk,
2.遇到的问题:
商汤提供的demo 可以正常运行,但是将sdk集成至项目中时一直报错,但是商汤侧却没办法提供具体的报错原因
3.解决问题:
反编译商汤的源码发现,报错的原因是so文件导致
商汤反编译的源码.jpg
商汤反编译的源码.png
解压商汤的sdk发现,sdk中只存在armeabi-v7a和armeabi-v8a两个适配文件夹,而项目需要适配armeabi,所以,按照商汤的faq,将v7a中的so文件,拷贝至项目中的armeabi即可解决问题,另外,商汤不支持x86的cpu
4.so文件加载逻辑
arm64-v8a是可以向下兼容的,但前提是你的项目里面没有arm64-v8a的文件夹,如果你有两个文件夹armeabi和arm64-v8a,两个文件夹,armeabi里面有a.so 和 b.so,arm64-v8a里面只有a.so,那么arm64-v8a的手机在用到b的时候发现有arm64-v8a的文件夹,发现里面没有b.so,就报错了,所以这个时候删掉arm64-v8a文件夹,这个时候手机发现没有适配arm64-v8a,就会直接去找armeabi的so库,所以要么你别加arm64-v8a,要么armeabi里面有的so库,arm64-v8a里面也必须有
5.另记一个问题
如果so文件,或者包含so文件的aar被重复引用的话,可能报以下错误
More than one file was found with OS independent path 'lib/arm64-v8a/libIndoorMapSDK2.2.5.so'
6.查看手机cpu信息
adb shell
cat /proc/cpuinfo
结果信息
Processor : AArch64 Processor rev 4 (aarch64)
processor : 0
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
AArch64是ARMv8 架构的一种执行状态。