美文网首页
Android 关于so文件的随记

Android 关于so文件的随记

作者: RookieRun | 来源:发表于2019-05-30 11:13 被阅读0次

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 架构的一种执行状态。

7.参考链接
https://blog.csdn.net/qq_32452623/article/details/71076023
https://www.cnblogs.com/janehlp/p/7473240.html

相关文章

网友评论

      本文标题:Android 关于so文件的随记

      本文链接:https://www.haomeiwen.com/subject/fusmtctx.html