安卓so包常見報錯問題
一./lib/arm64, /system/lib64, /vendor/lib64]]] couldn't find "libAndroidIDCard.so
我沒有在libs資料夾下面建立類似“arm64-v8a”這個資料夾,因為整合所按照的官方SDK中並沒有給出相應的so包。
原因分析
新建專案中會多了幾個資料夾,我想這就是問題的所在,根據查詢順序,64位處理器會優先查詢arm64-v8a
,裡面如果沒有相應的so檔案就會報錯。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庫要和目錄一一對應。
如果我們的工程的so庫目錄中沒有arm64目錄,預設情況下,Android Studio會在apk中自動建立一個空的arm64-v8a資料夾,並根據一些規則把某些so庫(具體是怎樣的規則,我也不知道)拷貝到這個目錄中,這樣就導致,在64位機器上在lib64目錄下找到的so庫並不是正確的so庫檔案,從而出現了上面的錯誤
解決辦法
解決辦法就是阻止Android Studio自動的生成arm64-v8a目錄,我們自己寫指令碼把對應的so庫檔案拷貝到build對應的目錄下
ndk {
abiFilters "armeabi"
}
切記:在Module(注意不是Library)的build.gradle檔案中新增如下內容
這句話的意思就是指定ndk需要相容的架構,把除了armeabi以外的相容包都過濾掉。
二.is 32-bit instead of 64-bit動態庫錯誤分析
針對第三方應用,在它安裝的時候,安裝包管理器會檢查該應用是否使用native libraries,如果使用本地庫檔案的話,則會根據相應的架構abi來選擇是32bit還是64bit。
針對系統應用來說,它的庫檔案存放在/system/lib,所以無法確定該應用是否依賴其他應用在system/lib下的庫檔案。因此安裝包管理器,無法確定系統應用使用哪種架構abi,故在64bit模式下執行。
當你安裝應用到系統時,系統會從lib目錄下的(armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips64, mips)資料夾中查詢本地庫檔案,不同的架構載入不同的資料夾下的庫檔案。例如64bit的架構從arm64-v8a、x86_64、mips64這些目錄中載入。如果你的arm64-v8a資料夾下剛好有這個需要使用到的庫檔案,則不會從其他資料夾如armeabi載入該庫檔案。此時就會出現32bit庫檔案和64bit庫檔案混合使用的情況,但是32bit的庫檔案不能和64bit的庫檔案不能混合使用。因此,有一種解決辦法是過濾掉64bit的庫檔案,全部使用32bit的庫檔案。在Android studio配置檔案build.gradle(Module APP)中配置如下:
相關文章
- RHCE常見的報錯問題
- LightDB Canopy 常見報錯問題分析(一)
- iOS開發執行報錯、常見問題iOS
- TypeScript常見報錯TypeScript
- RabbitMQ—常見報錯MQ
- pip常見報錯
- sqlldr經常報錯的問題SQL
- maven jar包衝突常見報錯及解決方法MavenJAR
- 【FAQ】RPM軟體包使用常見問題(轉)
- PbootCMS網站常見報錯boot網站
- 【Nginx】常見問題Nginx
- js常見問題JS
- CSS常見問題CSS
- Git 常見問題Git
- PHP 常見問題PHP
- swiper常見問題
- nginx 常見問題Nginx
- java 常見問題Java
- MyBatis常見問題MyBatis
- 前端常見問題前端
- Git常見問題Git
- SQLServer常見問題SQLServer
- css 常見問題CSS
- HTML常見問題HTML
- PyMongo 常見問題Go
- xhtml常見問題HTML
- UITableview 常見問題UIView
- mysql常見問題MySql
- MySQL 常見問題MySql
- BlockUI常見問題BloCUI
- Mysql:常見問題MySql
- JavaScript 除錯常見報錯以及原因JavaScript除錯
- PostgreSQL/Citus 常見報錯問題分析(一)ERROR: direct joins between distributedSQLError
- LightDB Canopy 常見報錯問題分析(二)DETAIL: Distributed relations cannot haveAI
- 細述zabbix郵件報警常見問題
- Oracle常見問題一千問Oracle
- C語言初學者常見問題與錯誤C語言
- Oracle 常見的錯誤問題及解決方法Oracle