一個關於arm64-v8a、armeabi向下相容so檔案的坑
阿新 • • 發佈:2019-01-23
CPU架構對應的so檔案所在位置
arm64-v8a
armeabi-v7a
armeabi
mips
mips64
x86
x86_64
不同版本的CPU架構中,高版本是可以向下相容的,比如arm64-v8是可以向下相容所有版本的,前提是你的專案中不能有arm64-v8的資料夾。比如專案中有arm64-v8和armeabi兩個資料夾,手機會直接去arm64-v8下面去找需要的so檔案,例如armeabi裡面有a、b兩個so檔案,arm64-v8下面有a一個so檔案,那麼當CPU為arm64-v8的手機用到b.so檔案的時候,手機是找不到的,因為手機發現有arm64-v8資料夾,就會直接去這個下面找b.so檔案。
前段時間在一個專案中華為P8手機上遇到了找不到arm64-v8的情況,因為專案中匯入了一些第三方的so檔案,然後有的第三方做了arm64-v8的適配,有的沒有做,所以導致so檔案在各個CPU架構的資料夾下面數量不一致,最後為了相容只留下了armeabi和armeabi-v7a的資料夾。
到這裡本以為解決了,但發現手機仍然還會去找arm64-v8的這個資料夾,百思不得其解……最後發現有一個第三方的依賴庫裡面有arm64-v8的資料夾……
所以要想向下相容不同的CPU,就要保證整個專案中只有和該CPU版本對應的資料夾就行了(包括依賴庫)。