安卓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 常見報錯問題分析(一)
- Anbox安卓apk應用安裝及使用說明和常見問題安卓APK
- jupyter安裝常見問題
- 安裝工具常見問題
- PhpCms安裝報錯怎麼辦?PHPCMS安裝使用常見問題解決辦法PHP
- docker安裝和常見問題Docker
- 解決帝國CMS安裝出錯和常見問題
- Charls抓包,手機端下載安裝證書常見問題
- TypeScript常見報錯TypeScript
- pip常見報錯
- RabbitMQ—常見報錯MQ
- PostgreSQL/Citus 常見報錯問題分析(一)ERROR: direct joins between distributedSQLError
- LightDB Canopy 常見報錯問題分析(二)DETAIL: Distributed relations cannot haveAI
- 安卓除錯 .so 斷到 JNI_OnLoad 或者 .init段安卓除錯
- 常見問題
- 帝國CMS7.5版安裝包裡的常見問題內容
- CUDA Toolkit常見安裝問題一覽
- vscode與chrome除錯配置與常見問題VSCodeChrome除錯
- vs斷點除錯unity安卓包斷點除錯Unity安卓
- Kafka安裝搭建、常見報錯、常用命令Kafka
- js常見問題JS
- Homestead 常見問題
- Apache 常見問題Apache
- Linux 常見問題Linux
- Git 常見問題Git
- PHP 常見問題PHP
- swiper常見問題
- Composer 常見問題
- HTML常見問題HTML
- Git常見問題Git
- 前端常見問題前端
- 【Nginx】常見問題Nginx
- ndk 常見問題
- CSS常見問題CSS
- nginx 常見問題Nginx
- Mysql:常見問題MySql
- XSS常見問題