在實際開發(fā)中,經(jīng)常遇到使用jni庫時找不到so文件的問題,經(jīng)過實際的摸索,我總結了一下的規(guī)律,不知道是否正確,如果理解錯了,還請看到的大神指正一下.
指令集的詳細問題就不多羅嗦了,我也不是很清楚,Android 開發(fā)者主要遇到的指令平臺有
arm 平臺的有
現(xiàn)在的主流soc一般都是64位的,所以一般都是arm64-v8a的指令集
新的指令集的soc 一般兼容老的指令集
- armeabi //很早的arm 手機
- armeabi-v7a // 現(xiàn)在還活著的32 位的arm手機大部分是這個
- arm64-v8a // 64位的arm手機
** x86 平臺有""
32 位的x86 cpu 對應 x86, 64位的x86 cpu 對應 x86_64,同樣新cpu兼容老的指令集
- x86
- x86_64
在實際測試中,拿 arm平臺距離,假設手機soc 的指令集是arm64-v8a,那么應用將優(yōu)先從 arm64-v8a 中查找so文件,沒有則從armeabi-v7a中查找,依然沒有則從armeabi 中查找,還沒有報找不到so的異常
但在實際項目中,我們有可能引入多方的sdk,這些sdk提供的so文件有的三種arm指令集都有,有的只有arm-v7a,這時候如果我們在abiFilters 中不過濾掉 arm64-v8a的話,這時候就會出現(xiàn)arm-v8a里的so文件不全的情況,但是因為arm64-v8a 下有so文件,此時系統(tǒng)便不再去其他文件夾下查找了,所以此時及時armeabi-v7a 下有so文件依然會報錯