也算踩到了 is 32-bit instead of 64-bit的坑

問題說明

這幾天主要在做內存分析與解決內存的釋放,然後打開了AS的 “Enable advanced profiling”選項
注:剛‘接手“的項目,代碼都不熟悉,好扯蛋!!!
在這裏插入圖片描述
打開這個選項後,觸發了一系列的反應,結果是應用一運行就崩潰!!!

原因分析

去看下自己應用的apk中的so,是怎麼樣的情況?
在這裏插入圖片描述
發現個奇怪的so (ibsupportjni.so),然後當前自己有分析的項目只使用32位的so,所以就踩中了android 應用安裝與加截so的如下規則

當你安裝應用到系統時,系統會從lib目錄下的(armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips64, mips)文件夾中查找本地庫文件,不同的架構加載不同的文件夾下的庫文件。例如64bit的架構從arm64-v8a、x86_64、mips64這些目錄中加載。如果你的arm64-v8a文件夾下剛好有這個需要使用到的庫文件,則不會從其他文件夾如armeabi加載該庫文件。此時就會出現32bit庫文件和64bit庫文件混合使用的情況

** 總結:AS的adevanced profiling選項打開後,會往應用塞一個64位的so,如果自己的應用還沒有支持64位的架構,那得注意處理一下 **

解決方案

方案1、關閉 AS的 “Enable advanced profiling”選項
方案2、給自己的應用增加64位so的支持
方案3、在構建腳本中過濾64位so (這時候你是不能使用 AS 的advanced profiling功能了呀!)

參考文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章