美文网首页Android studioAndroid知识Android技术难题
AAR和外部项目同时都有so文件导致错误的解决办法

AAR和外部项目同时都有so文件导致错误的解决办法

作者: 13itch | 来源:发表于2016-08-25 14:46 被阅读3289次

    接触到过Jni的童鞋们应该看着个crash会比较眼熟,对,就是so文件找不到,而引发的错误。

    “java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader..............couldn't find "xxxxxxx.so"”

    crash

    当时遇到这个问题是我很疑惑,报错报的是外部项目的so文件找不到(这里简称外so),AAR里的so文件(这里简称内so)却没有报错,可我确实在引入了这个AAR之后,编译生成的APK报错了。

    第一个想法:会不会是本身gradle本身不支持编译生成APK时将内so文件打包进APK呢?

    跟着我就去谷歌大法了一波,结果还真的在某些gradle版本里是不支持打包的,需要自身在外部项目里加入内so。ANDROID动态加载 使用SO库时要注意的一些问题 但有个问题,我这边是最新你的gradle,而且报错报的是外so找不到,那就pass掉了这种可能。但我还是尝试性地将内so复制到外部的lib里去编译了一遍,徒劳。。。。

    第二个想法:会不会是so文件重名了?

    显然不会,我还不至于在这个问题上折腾那么久。

    那么问题来了,到底是什么原因呢?

    通过分析crash日志,我发现一个问题:

    nativeLibraryDirectories=[/data/app/xxx-1/lib/arm64, /data/app/xxx-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]

    我外部的lib里并没有那么多文件夹啊!!!!

    这个就是crash的原因所在了。

    当AAR内部的so文件类型比外部多时,会导致外部的so文件找不到。

    所以果断的剔除了AAR中不需要的so文件夹“arm64”,“arm64-v8a”,“x86”。

    再次编译,OK,齐活了。88,希望能帮助到你们。

    相关文章

      网友评论

      • 水告哥:感谢,修改第三方aar没那么方便,我解压缩后看到第三方都编译了哪些平台,自己的so也对应编译了那几个平台后,就成功了,特意上来谢谢答主分享解决方案
      • 晓谈生活:请问一下,如何删除aar中的arm64-v8a等so文件??
        13itch:@zxhandroid jar是可以直接解压删除之后压缩改后缀名就可以了,aar未试过,你也可以用类似的方法试试
      • sr71k:请问,您文中所提的删除aar中多余的文件夹是指app/build/intermediates/exploded/中的第三方库中的文件夹吗? 我怎么删除之后又重新生成了,这是什么原因呢,谢谢!
        13itch:@sr71k 本身你说的那几个文件夹就是as自动创建的
        13itch:@sr71k 首先我说的是jniLibs下的文件夹,第二你问得那个删除了又重新出现的问题,是正常的。

      本文标题:AAR和外部项目同时都有so文件导致错误的解决办法

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