一、加载.so出现的一些问题
1. so文件 放进了优先级低的ABI目录
问题:如果你的项目中,有其他优先级更好的ABI目录,但是你把ABI文件方法放到了优先级低的目录,最后导致你的ABI文件无法被加载
案例:某手机CPU架构是ARMv7,ABI文件是armeabi-v7a,但是放进了armeabi目录中
结果:项目中有armeabi-v7a的目录,armeabi目录的文件,无法被加载,然后运行报错,出现类似于如下log信息。
Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/.xx../base.apk"],nativeLibraryDirectories=[/data/app/.xx../lib/arm, /vendor/lib, /system/lib]]] couldn't find "lib..xx...so"
支付宝:ABI文件是armeabi-v7a,所以放到armeabi-v7a目录中。
银联:ABI文件是armeabi,所以放到armeabi目录中。
结果:在运行时,会发现运行后crash,出现如下日志:
Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/.xx../base.apk"],nativeLibraryDirectories=[/data/app/.xx../lib/arm, /vendor/lib, /system/lib]]] couldn't find "lib..xx...so"
解决方案1:使用同一优先级的ABI文件,ABI文件放入到优先级相同的ABI目录
支付宝:ABI文件是armeabi-v7a,放到armeabi-v7a目录中。
银联:ABI文件是armeabi-v7a,放到armeabi-v7a目录中。
支付宝:ABI文件是armeabi,放到armeabi目录中。
银联:ABI文件是armeabi,放到armeabi目录中。
解决方案2:如果两个第三方提供的是不同优先级的ABI文件,则将ABI文件放入到优先级相同的ABI(优先级低的目录下)。
支付宝:ABI文件是armeabi-v7a,放到armeabi目录中。
银联:ABI文件是armeabi,放到armeabi目录中。