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

2017-01-13 14:56:12来源:http://www.jianshu.com/p/7e37b76ae39a作者:13itch人点击

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




最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台