Application.mk中APP_ABI

smilestone322發表於2018-12-22

在使用NDK編譯過程中發現針對不同的CPU架構,部分支援編譯除錯,部分不支援除錯,故記錄下來,以防忘記

 

在Application.mk檔案中有個預定義命令引數APP_ABI,是指明編譯與除錯的CPU架構。

目前Android系統支援以下七種不同的CPU架構:ARMv5,ARMv7(從2010年起),x86(從2011年),MIPS(從2012年),ARMv8,MIPS64和x86_64(從2014年),每一種都對應相應的ABI。

    

CPU架構 ABI  
ARMv5 armeabi 32位,從2010年
ARMv7 armeabi-v7a 32位,從2010年
x86 x86 32位,從2011年
MIPS mips 32位,從2012年
ARMv8 arm64-v8a 64位,從2014年
MIPS64 mips64 64位,從2014年
x86_64 x86_64 64位,從2014年

相應生成arm64-v8a,mips64,x86_64下的檔案需要NDK_r10以上版本支援。在Application.mk檔案裡配置APP_ABI的內容。例如指明某個具體的CPU架構

APP_ABI := arm64-v8a

或者直接生成所有的版本

APP_ABI := all

注意:根據不同的NDK版本,APP_ABI := all僅能生成當前版本支援的ABI資訊庫檔案,如果需要生成最新的必須更新相應的NDK版本。

或者明確寫明支援的CPU架構

APP_ABI := armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64

建議採用該方法

注意:由於目前版本支援的問題,採用Eclipse+NDK+Windows整合方式開發,對應編譯生成對應CPU架構的so檔案是沒有問題的。但是不一定可以執行除錯工作,啟動NDK除錯模式時將會提示無法識別對應的ABI。

注意:(1)、目前模擬器只有x86_64的沒有arm64-v8a的;(2)、在用真機測試armv8-a時,最好先通過adb shell, cat  /proc/cpuinfo ,來檢視下真機是否是支援armv8-a;(3)、arm32和arm64有些配置引數不能共存,如-msoft-float僅在arm32位下支援,在arm64位下是不支援的. 

相關文章