2016-07-22 11:07 出處:清屏網 人氣:683 評論(0)html
RT,在Andoridsutdio中調用.so庫出現如現標題所示錯誤,該怎麼解決。首先出現這個錯誤的緣由是由於你的cpu架構是64位的。而你的.so庫在編譯的時候沒有支持64位cpu。 經@lolstudio 提醒, 若是這個.so的庫是你本身弄的,那你從新生成下支持64位cpu的.so庫出來就好了,剩下的文字就不用看了,本文適用於你無法對.so作操做的朋友。查看cpu架構,能夠經過adb shell 命令。進入/system/目錄下有一個build.prop文件,這個裏面有一行 ro.product.cpu.abi=xx就是你所要的信息,具體命令以下:android
adb shell cd /system cat build.prop
apk包在安裝的時候,系統會把包中與本身的abi對應的lib目錄中的so庫文件拷貝到system分區中,32位機器中只有一個目錄/system/lib,64位機器中有兩個目錄/system/lib和/system/lib64,app啓動進行連接時,64位機器中會先到/system/lib64目錄中去找,這時候確定找不到。若是沒有找到再到/system/lib目錄中去找。若是你把32位的so庫拷貝到了lib64目錄中,會致使連接失敗,一樣,64位的so庫被拷貝到lib目錄中也會致使失敗,因此so庫要和目錄一一對應。shell
首先個人目錄結構是這樣的:網絡
個人.so並無放在新建的jniLibs目錄中,這個關係應該不大,兩種方式均可以。架構
個人cpu架構是 ro.product.cpu.abi=arm64-v8aapp
而個人只有一個CPU架構就是armebi-v7a,咱們要作的就是阻止生成arm64-v8a;gradle
正常狀況打開apk的lib結構以下:ui
方案以下:spa
android.useDeprecatedNdk=true
ndk { abiFilters "armeabi", "armeabi-v7a", "x86", "mips" }
這時候你解壓開生成的apk包,會發現目錄lib結構以下:htm
OK,這樣就解決了個人這個問題,網絡上有一些別的阻止生成arm64-v8a,可是很差使。