Android(安卓)架構大致分析

Android的五層架構:

從上到下一共5層:
一、| 應用層(APP)|
二、| 應用框架層(framework) |
三、| 系統運行庫層 |
四、| 硬件抽象層HAL |
五、| Linux內核層 |

接下來大致解釋一下各個層是幹什麼的,自己學習心得,邏輯有些雜亂。

1.應用層(APP層):簡單點說就是手機上面的app軟件,你能直接使用的手機功能,就是負責和用戶直接交互的東西。


2.應用框架層(framework)
項應用開發者提供統一的API(Application Programming Interface,應用程序編程接口),主要是面向JAVA開發程序員。有一些資源管理器(ResourceManager)[以前老版本安卓手機獲取ROOT權限後用RE文件管理器可以換一些開機動畫等等],位置管理器(LocationManger),通知管理器(NotificationManager)等等。


3.系統運行庫層
Android的系統運行庫層由兩部分組成:系統庫Android運行時名字就是:Android運行時!)。
系統庫是應用程序框架的支撐,是連接應用程序框架層與Linux內核層的重要紐帶。
Android運行時:因爲Android應用程序時採用Java語言編寫,程序在Android運行時中執行,其運行時分爲核心庫和Dalvik虛擬機兩部分。

系統庫
1、 Libc。系統c庫,一個從BSD繼承來的標準C系統函數庫,專門爲基於EmbeddedLinux的設備定製。
2、 Media Framework。多媒體庫,Android系統多媒體庫,基於PacketVideoOpen、CORE。該庫支持錄放.並且可以錄製許多流行的音頻視頻格式.還有靜態映像文件,包括MPEG4、H.264、MP3、AAC、JPG、PNG等。
3、 Surface Manager。主要負責管理針對顯示系統的訪問,並且爲多個應用程序提供2D和3D圖層的無縫融合。
4、 Webkit瀏覽器。一個最新的web瀏覽器引擎,用來支持Android瀏覽器和一個可嵌入的Web視圖。
5、 SGL。一個內置的2D圖形引擎。
6、 SSL。位於TCP/IP與各種應用層協議之間.爲數據通信提供支持。
7、 OpenGL ES。3D效果的支持。基於OpenGLES 1.0 APIs實現;該庫可以使用硬件3D加速或者使用高度優化的3D軟加速。
8、greeType。提供位圖bitmap和向量vector的字體描述與顯示。
9、SQLite。一個對於所有應用程序可用、功能強勁的輕型關係型數據庫引擎。

Android運行時
1、核心庫。核心庫提供了Java語言API中的大多數功能,同時也包含Android的一些核心API.如android.OS、android.net、android.media等。
2、Dalvik虛擬機。每個Android應用都運行在自己的進程上,享有Dalvik虛擬機爲它分配的專有實例,並在該實例中執行。Dalvik虛擬機是一種基於寄存器的Java虛擬機,而不是傳統的基於棧的虛擬機,並進行了內存資源使用的優化以及支持多個虛擬機的特點。


4.硬件抽象層HAL
硬件抽象層是位於操作系統 內核與硬件電路之間的接口層,其目的在於將硬件抽象化。它隱藏了特定平臺的硬件接口細節,爲操作系統提供虛擬硬件平臺,使其具有硬件無關性,可在多種平臺上進行移植。 從軟硬件測試的角度來看,軟硬件的測試工作都可分別基於硬件抽象層來完成,使得軟硬件測試工作的並行進行成爲可能。
(換句話說就是做軟件開發的可以不用看電路圖,不用懂硬件,通過這一層的一些驅動程序可以實現軟件和硬件的正確對接,軟件正確操作硬件,軟件通過更改一小部分代碼就能移植到其它硬件平臺)


5.Linux內核層
(會在另外文章詳解Linux內核結構)
Android是在Linux內核的基礎上構建的,Android的內核屬於Linux內核的一個分支,它並不GNU/Linux,因爲一般在GNU/Linux中被支持的功能,在Android大多沒有被支持。衆所周知,Linux是一個開源的操作系統,由非營利的組織——Linux基金會所管理。雖然Linux是開源的,但是Android必須在GNU GPL(用於保護開源軟件的一個授權規範)的許可下使用Linux的源碼,纔可以商用。所以爲了達到商業應用的目的,Android必須去除被GNU GPL所約束的部分。Android去除了CairoX11AlsaFFmpegGTKPangoGlibc等,並以Bionic取代Glibc、以Skia取代Cairo、以Opencore取代FFmpeg等。Android並沒有用戶空間驅動,而是將所有的驅動都放在內核空間中,並以HAL隔開版權問題。

Linux內核層提供了幾乎所有手機、平板電腦相關設備的驅動程序,實現系統與各種硬件的通信,如顯示屏、攝像頭、內存、鍵盤、無線網絡、音頻設備、電源等組件。

主要的驅動如下所示:
1、顯示驅動(DisplayDriver):基於Linux的幀緩衝(FrameBuffer)驅動。
2、鍵盤驅動(KeyBoardDriver):作爲輸入設備的鍵盤驅動。
3、Flash內存驅動(FlashMemoryDriver):基於MTD的Flash驅動程序。
4、照相機驅動(CameraDriver):常用的基於Linux的v4l2(VideoforLinux)驅動。
5、音頻驅動(AudioDriver):常用的基於ALSA(AdvancedLinuxSoundArchitecture)的高級Linux聲音體系驅動。
6、藍牙驅動(BluetoothDriver):基於IEEE802.15.1標準的無線傳輸技術。
7、WiFi驅動:基於IEEE802.11標準的驅動程序。
8、Binder IPC驅動:Android的一個特殊的驅動程序,具有單獨的設備節點,提供進程間通信的功能。
9、PowerManagement(電源管理):比如電池電量等。

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