在实际开发中,经常遇到使用jni库时找不到so文件的问题,经过实际的摸索,我总结了一下的规律,不知道是否正确,如果理解错了,还请看到的大神指正一下.
指令集的详细问题就不多罗嗦了,我也不是很清楚,Android 开发者主要遇到的指令平台有
arm 平台的有
现在的主流soc一般都是64位的,所以一般都是arm64-v8a的指令集
新的指令集的soc 一般兼容老的指令集
- armeabi //很早的arm 手机
- armeabi-v7a // 现在还活着的32 位的arm手机大部分是这个
- arm64-v8a // 64位的arm手机
** x86 平台有""
32 位的x86 cpu 对应 x86, 64位的x86 cpu 对应 x86_64,同样新cpu兼容老的指令集
- x86
- x86_64
在实际测试中,拿 arm平台距离,假设手机soc 的指令集是arm64-v8a,那么应用将优先从 arm64-v8a 中查找so文件,没有则从armeabi-v7a中查找,依然没有则从armeabi 中查找,还没有报找不到so的异常
但在实际项目中,我们有可能引入多方的sdk,这些sdk提供的so文件有的三种arm指令集都有,有的只有arm-v7a,这时候如果我们在abiFilters 中不过滤掉 arm64-v8a的话,这时候就会出现arm-v8a里的so文件不全的情况,但是因为arm64-v8a 下有so文件,此时系统便不再去其他文件夹下查找了,所以此时及时armeabi-v7a 下有so文件依然会报错