Android開發(fā)中,在打包發(fā)布應(yīng)用時(shí)會選擇應(yīng)用適配的cpu架構(gòu)平臺,在引用第三方庫時(shí)也遇到根據(jù)不同cpu架構(gòu)引入相應(yīng)的so包。Android主要包括一下cpu架構(gòu):
目前創(chuàng)新互聯(lián)公司已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、虹口網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
在Android系統(tǒng)上,每一個(gè)CPU架構(gòu)對應(yīng)一個(gè)ABI:
ABI是Application Binary Interface的縮寫,常表示兩個(gè)程序模塊之間的接口,且其中一個(gè)模塊常為機(jī)器碼級別的library或操作系統(tǒng)。它定義了函數(shù)庫的調(diào)用、應(yīng)用的二進(jìn)制文件(尤其是.so)如何運(yùn)行在相應(yīng)的系統(tǒng)平臺上等細(xì)節(jié)。其中mips及mips64極少用于手機(jī),出發(fā)點(diǎn)是高性能,主要用于路由器、貓。
從CPU發(fā)明到現(xiàn)在,有非常多種架構(gòu),從我們熟悉的X86,ARM,到不太熟悉的MIPS,IA64,它們之間的差距都非常大。但是如果從最基本的邏輯角度來分類的話,它們可以被分為兩大類,即所謂的“復(fù)雜指令集(CISC)”與“精簡指令集(RISC)”系統(tǒng)。
Intel和ARM處理器的第一個(gè)區(qū)別是,前者使用復(fù)雜指令集(CISC),后者使用精簡指令集(RISC)。屬于這兩種類中的各種架構(gòu)之間最大的區(qū)別,在于它們的設(shè)計(jì)者考慮問題方式的不同。
ARM架構(gòu)是一個(gè)32位精簡指令集RISC(Reduced Instruction Set Computing)處理器架構(gòu),其廣泛地使用在許多嵌入式系統(tǒng)設(shè)計(jì)。但在其他領(lǐng)域上也有很多作為,由于節(jié)能的特點(diǎn),ARM處理器非常適用于移動(dòng)通信領(lǐng)域,匹配其主要設(shè)計(jì)目標(biāo)為低成本、高性能、低耗電的特性。
ARM的優(yōu)勢不在于性能強(qiáng)大而在于效率,ARM采用RISC流水線指令集,在完成綜合性工作方面根本就處于劣勢,而在一些任務(wù)相對固定的應(yīng)用場合其優(yōu)勢就能發(fā)揮得淋漓盡致。ARM結(jié)構(gòu)的電腦是通過專用的數(shù)據(jù)接口使CPU與數(shù)據(jù)存儲設(shè)備進(jìn)行連接,所以ARM的存儲、內(nèi)存等性能擴(kuò)展難以進(jìn)行(一般在產(chǎn)品設(shè)計(jì)時(shí)已經(jīng)定好其內(nèi)存及數(shù)據(jù)存儲的容量),所以采用ARM結(jié)構(gòu)的系統(tǒng),一般不考慮擴(kuò)展?;痉钚小皦蛴镁秃谩钡脑瓌t。
x86 架構(gòu)是一個(gè)復(fù)雜指令集CISC(Complex Instruction Set Computer)處理器架構(gòu)。X86結(jié)構(gòu)的電腦無論如何都比ARM結(jié)構(gòu)的系統(tǒng)在性能方面要快得多、強(qiáng)得多。X86的CPU隨便就是1G以上、雙核、四核。X86結(jié)構(gòu)的電腦采用“橋”的方式與擴(kuò)展設(shè)備(如:硬盤、內(nèi)存等)進(jìn)行連接,而且x86結(jié)構(gòu)的電腦出現(xiàn)了近30年,其配套擴(kuò)展的設(shè)備種類多、價(jià)格也比較便宜,所以x86結(jié)構(gòu)的電腦能很容易進(jìn)行性能擴(kuò)展,如增加內(nèi)存、硬盤等。
Android平臺采用了整合的策略思想,包括底層Linux操作系統(tǒng)、中間層的中間件和上層的Java應(yīng)用程序。下面我把Android的特性及其架構(gòu)體系結(jié)構(gòu)總結(jié)一下。
一、Android的平臺特性
Android平臺有如下特性:
1. 應(yīng)用程序框架支持組件的重用與替換。
這樣我們可以把系統(tǒng)中不喜歡的應(yīng)用程序刪除,安裝我們喜歡的應(yīng)用程序。
2. Dalvik虛擬機(jī)專門為移動(dòng)設(shè)備進(jìn)行了優(yōu)化。
Android應(yīng)用程序?qū)⒂蒍ava編寫、編譯的類文件通過DX工具轉(zhuǎn)換成一種后綴名為.dex的文件來執(zhí)行。Dalvik虛擬機(jī)是基于寄存器的,相對于Java虛擬機(jī)速度要快很多。
3. 內(nèi)部集成瀏覽器基于開源的WebKit引擎。
有了內(nèi)置的瀏覽器,這將意味著WAP應(yīng)用的時(shí)代即將結(jié)束,真正的移動(dòng)互聯(lián)網(wǎng)時(shí)代已經(jīng)來臨,手機(jī)就是一臺“小電腦”,可以在網(wǎng)上隨意遨游。
4. 優(yōu)化的圖形庫包括2D和3D圖形庫,3D圖形庫基于OpenGL ES 1.0。
強(qiáng)大的圖形庫給游戲開發(fā)帶來福音。在3G最為重要的的應(yīng)用莫過于手機(jī)上網(wǎng)和手機(jī)游戲。
5. SQLite用作結(jié)構(gòu)化的數(shù)據(jù)存儲。
6. 多媒體支持包括常見的音頻、視頻和靜態(tài)印象文件格式
如MPEG4、H.264、MP3、AAC、AMR、JGP、PNG、GIF。
7. GSM電話(依賴于硬件)。
8. 藍(lán)牙(Bluetooth)、EDGE、3G、WiFi(依賴于硬件)。
9. 照相機(jī)、GPS、指南針和加速度計(jì)(依賴于硬件)。
10. 豐富的開發(fā)環(huán)境包括設(shè)備模擬器、調(diào)試工具、內(nèi)存及性能分析圖表和Eclipse集成的開發(fā)環(huán)境插件。
Google提供了Android開發(fā)包SDK,其中包含了大量的類庫和開發(fā)工具,并且針對Eclipse的可視化開發(fā)插件ADT。
二、Android平臺架構(gòu)
從上圖我們可以看出,Android操作系統(tǒng)的體系結(jié)構(gòu)可分為4層,由上到下依次是應(yīng)用程序、應(yīng)用程序框架、核心類庫和Linux內(nèi)核,其中第三層還包括Android運(yùn)行時(shí)的環(huán)境。下面分別來講解各個(gè)部分。
1. 程序應(yīng)用
Android
連同一個(gè)核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括E-mail客戶端、SMS短消息程序、日歷、地圖、瀏覽器、聯(lián)系人管理程序等。所有的應(yīng)用程序都是用Java編寫的。
2. 應(yīng)用程序框架
開發(fā)者完全可以訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序框架架構(gòu)用來簡化組件軟件的重用,任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其他的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。該應(yīng)用程序重用機(jī)制使得組件可以被用戶替換。
以下所有的應(yīng)用程序都由一系列的服務(wù)和系統(tǒng)組成,包括:
1)一個(gè)可擴(kuò)展的視圖(Views)可以用來創(chuàng)建應(yīng)用程序,包括列表(lists)、網(wǎng)絡(luò)(grids)、文本框(text
boxes)、按鈕(buttons),甚至是一個(gè)可嵌入的Web瀏覽器。
2)內(nèi)容管理器(Content Providers)使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫),或者共享它們自己的數(shù)據(jù)。
3)一個(gè)資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串、圖形和分層文件(layout files)。
4)一個(gè)通知管理器(Notification Manager)使得應(yīng)用程序可以在狀態(tài)欄中顯示客戶通知信息。
5)一個(gè)活動(dòng)類管理器(Activity Manager)用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。
3. Android程序庫
Android包括一個(gè)被Android系統(tǒng)中各種不同組件所使用的C/C++集庫。該庫通過Android應(yīng)用程序框架為開發(fā)者提供服務(wù)。
以下是一些主要的核心庫:
1)系統(tǒng)C庫:一個(gè)從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(libc),專門為基于Embedded Linux的設(shè)備定制。
2)媒體庫:基于PacketVideo
OpenCORE;該庫支持錄放,并且可以錄制許多流行的音頻視頻格式,還有靜態(tài)映像文件包括MPEG4、H.264、MP3、AAC、JPG、PNG。
3)Surface Manager:對顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提供2D和3D圖層的無縫融合。
4)LibWebCore:一個(gè)最新的Web瀏覽器引擎,用來支持Android瀏覽器和一個(gè)可嵌入的Web視圖。
5)SGL:一個(gè)內(nèi)置的2D圖形引擎。
6)3D libraries:基于OpenGL ES 1.0 APIs實(shí)現(xiàn);該庫可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。
7)FreeType:位圖(bitmap)和向量(vector)字體顯示。
8)SQLite:一個(gè)對于所以應(yīng)用程序可用、功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫引擎。
4. Android運(yùn)行庫
Android包括了一個(gè)核心庫,該核心庫提供了Java編程語言核心庫的大多數(shù)功能。
每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik是針對同時(shí)高效地運(yùn)行多個(gè)VMs實(shí)現(xiàn)的。Dalvik虛擬機(jī)執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對最小內(nèi)存使用做了優(yōu)化。該虛擬機(jī)是基于寄存器的,所有的類都是經(jīng)由Java匯編器編譯,然后通過SDK中的DX工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。
Dalvik虛擬機(jī)依賴于Linux的一些功能,比如線程機(jī)制和底層內(nèi)存管理機(jī)制。
5. Linux內(nèi)核
Android的核心系統(tǒng)服務(wù)依賴于Linux內(nèi)核,如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。Linux內(nèi)核也同時(shí)作為硬件和軟件棧之間的硬件抽象層。
android系統(tǒng)架構(gòu)分從下往上為linux 內(nèi)核層、運(yùn)行庫、應(yīng)用程序框架層、和應(yīng)用程序?qū)?/p>
linuxkernel:負(fù)責(zé)硬件的驅(qū)動(dòng)程序、網(wǎng)絡(luò)、電源、系統(tǒng)安全以及內(nèi)存管理等功能。
libraries和 androidruntime:libraries:即c/c++函數(shù)庫部分,大多數(shù)都是開放源代碼的函數(shù)庫,例如webkit,該函數(shù)庫負(fù)責(zé) android網(wǎng)頁瀏覽器的運(yùn)行,例如標(biāo)準(zhǔn)的c函數(shù)庫libc、openssl、sqlite等,當(dāng)然也包括支持游戲開發(fā)2dsgl和 3dopengles,在多媒體方面有mediaframework框架來支持各種影音和圖形文件的播放與顯示,例如mpeg4、h.264、mp3、 aac、amr、jpg和png等眾多的多媒體文件格式。android的runtime負(fù)責(zé)解釋和執(zhí)行生成的dalvik格式的字節(jié)碼。
applicationframework(應(yīng)用軟件架構(gòu)),java應(yīng)用程序開發(fā)人員主要是使用該層封裝好的api進(jìn)行快速開發(fā)。
applications:該層是java的應(yīng)用程序?qū)?,android內(nèi)置的googlemaps、e-mail、即時(shí)通信工具、瀏覽器、mp3播放 器等處于該層,java開發(fā)人員開發(fā)的程序也處于該層,而且和內(nèi)置的應(yīng)用程序具有平等的位置,可以調(diào)用內(nèi)置的應(yīng)用程序,也可以替換內(nèi)置的應(yīng)用程序。
上面的四個(gè)層次,下層為上層服務(wù),上層需要下層的支持,調(diào)用下層的服務(wù),這種嚴(yán)格分層的方式帶來的極大的穩(wěn)定性、靈活性和可擴(kuò)展性,使得不同層的開發(fā)人員可以按照規(guī)范專心特定層的開發(fā)。
android應(yīng)用程序使用框架的api并在框架下運(yùn)行,這就帶來了程序開發(fā)的高度一致性,另一方面也告訴我們,要想寫出優(yōu)質(zhì)高效的程序就必須對整個(gè) applicationframework進(jìn)行非常深入的理解。精通applicationframework,你就可以真正的理解android的設(shè)計(jì) 和運(yùn)行機(jī)制,也就更能夠駕馭整個(gè)應(yīng)用層的開發(fā)。
android系統(tǒng)分為四部分,從高到低分別是:
1、Android應(yīng)用層
2、Android應(yīng)用框架層
3、Android系統(tǒng)運(yùn)行層
4、Linux內(nèi)核層
Android系統(tǒng)構(gòu)架主要應(yīng)用于ARM平臺,但不僅限于ARM,通過編譯控制,在X86、MAC等體系結(jié)構(gòu)的機(jī)器上同樣可以運(yùn)行。
擴(kuò)展資料:
Android運(yùn)行庫
Android包括了一個(gè)核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。
每一個(gè)Android都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik被設(shè)計(jì)成一個(gè)設(shè)備可以同時(shí)高效地運(yùn)行多個(gè)虛擬系統(tǒng)。Dalvik虛擬機(jī)執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對小內(nèi)存使用做了優(yōu)化。
同時(shí)虛擬機(jī)是基于寄存器的,所有的類都經(jīng)由JAVA編譯器編譯,然后通過SDK中的“dx”工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。
參考資料:百度百科-Android系統(tǒng)構(gòu)架