# android abi Application Binary Interface ABI定義了函數庫的調用、應用的二進制文件(尤其是.so)如何運行在相應的系統平台上等細節。 Android目前支持以下七種ABI:armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips、mips64。 # android's cpu Android目前有以下七種cpu架構:ARMv5、ARMv7、ARMv8、x86、x86_64、MIPS和MIPS64。 ARM 是指 Advanced RISC Machine 是一個32位元精簡指令集(RISC)處理器架構,其廣泛地使用在許多嵌入式系統設計。 RISC stand for Reduced Instruction Set Computing # cpu架構對應最優abi | CPU架構 | 最優ABI | | -------- | -------- | | ARMv5 | armeabi | | ARMv7 | armeabi-v7a | | ARMv8 | arm64-v8a | | x86 | x86 | | x86_64| x86_64 | | MIPS | mips | | MIPS64| mips64 | 應用程式安裝到設備時,只有該設備的CPU架構支持的最優 so庫才會被安裝 ``` 如:x86架構的設備支持x86、armeabi-v7a和armeabi等ABI。 但優先級從高到低依次為x86、armeabi-v7a、armeabi。 系統會根據此順序尋找首個可用的最優的so庫,找到則結束。 ``` * x86設備包含**ARM模擬層**,能夠很好地運行ARM類型的so庫,但並不保證100%不發生Crash。 * 64位設備(arm64-v8a, x86_64, mips64)能夠運行32位的so庫。但是以32位模式運行時,會丟失專為64位優化過的性能特徵(ART, WebView, Media, etc.)。 # so庫使用 理論上應該為每個ABI目錄提供對應的so庫。但是Android支持7種ABI,若全部支持,必然導致APK包過大。 * 一般只保留armeabi、armeabi-v7a這兩個ABI的so庫。 * mips/mips64:極少用於手機,可忽略。 * x86/x86_64:x86架構的手機的市場佔有率很低,約為1%左右。而且x86架構都包含ARM模擬層,兼容ARM類型的ABI。 * arm64-v8a:64位ARM架構。可用32位模式運行armeabi-v7a和armeabi。 * armeabi-v7a:截止於2017年2月,目前主流版本AMRv7。 * armeabi:老版本ARMv5,但仍需要兼容。 # 結論 1. 為了減小apk體積,只保留armeabi和armeabi-v7a兩個目錄,並保證這兩個目錄中so庫數量一致。 2. 對只提供armeabi版本的第三方so庫,原樣複製一份到armeabi-v7a目錄中 Link: https://www.jianshu.com/p/170f65439844 https://www.jianshu.com/p/f23df3aa342c http://david740204.pixnet.net/blog/post/412169557-android-studio%E8%A3%A1%E8%87%AA%E5%AE%9Aandroid.mk%E5%92%8Capplication.mk # Cross toolchains 由於嵌入式系統先天上的限制(有限的記憶體大小、處理器的效能、系統可能沒有螢幕顯示相關訊息等等),在嵌入式系統內執行compiler、assembler 等開發工具有時是不可能的。因此,軟體開發工具必須能提供跨平台編譯的功能,才能符合實際的需求。 --Build machine:the machine builds cross toolchains --Host machine:the machine cross toolchains will execute on --Target machine:the machine cross toolchains will produce outputs for ###### tags: `note`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up