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

接触到过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,希望能帮助到你们。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容