美文网首页
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