AndroidStudio中調(diào)用.so包出現(xiàn)找不到.so包的錯誤

QQ截圖20160721125018.png

出現(xiàn)原因

RT,在Andoridsutdio中調(diào)用.so庫出現(xiàn)如現(xiàn)標題所示錯誤,該怎么解決。首先出現(xiàn)這個錯誤的原因是因為你的cpu架構(gòu)是64位的。而你的.so庫在編譯的時候沒有支持64位cpu。** 經(jīng)@lolstudio 提醒, 如果這個.so的庫是你自己弄的,那你重新生成下支持64位cpu的.so庫出來就行了,剩下的文字就不用看了,本文適用于你沒法對.so做操作的朋友。** 查看cpu架構(gòu),可以通過adb shell 命令。進入/system/目錄下有一個build.prop文件,這個里面有一行 ro.product.cpu.abi=xx就是你所要的信息,具體命令如下:

                adb shell
                cd /system
                cat build.prop

apk包在安裝的時候,系統(tǒng)會把包中與自己的abi對應的lib目錄中的so庫文件拷貝到system分區(qū)中,32位機器中只有一個目錄/system/lib,64位機器中有兩個目錄/system/lib和/system/lib64,app啟動進行鏈接時,64位機器中會先到/system/lib64目錄中去找,這時候肯定找不到。如果沒有找到再到/system/lib目錄中去找。如果你把32位的so庫拷貝到了lib64目錄中,會導致鏈接失敗,同樣,64位的so庫被拷貝到lib目錄中也會導致失敗,所以so庫要和目錄一一對應。

解決方案

首先我的目錄結(jié)構(gòu)是這樣的:


QQ截圖20160721123538.png

我的.so并沒有放在新建的jniLibs目錄中,這個關(guān)系應該不大,兩種方式都可以。
我的cpu架構(gòu)是 ro.product.cpu.abi=arm64-v8a
而我的只有一個CPU架構(gòu)就是armebi-v7a,我們要做的就是阻止生成arm64-v8a;
正常情況打開apk的lib結(jié)構(gòu)如下:


QQ截圖20160721124748.png

方案如下:

  • 首先在project目錄下的 gradle.properties中添加一句
    android.useDeprecatedNdk=true
  • 在app的build.gradle中的defaulConfig下添加如下:
    ndk {
    abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }

這時候你解壓開生成的apk包,會發(fā)現(xiàn)目錄lib結(jié)構(gòu)如下:

QQ截圖20160721124539.png

OK,這樣就解決了我的這個問題,網(wǎng)絡上有一些別的阻止生成arm64-v8a,但是不好使。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容