Android是Google公司開發的基于Linux平臺的開源手機操作系統,它包括操作系統、中間件、用戶界面和應用程序,而且不存在任何以往阻礙移動產業創新的專利權障礙,并由Google公司于2007年11月5日正式發布。同時,Google公司組建了一個開放手機聯盟,這個聯盟由中國移動、摩托羅拉、高通、宏達電和T-Mobile等在內的全球30多家技術和無線應用的領軍企業組成,Google通過與運營商、設備制造商、開發商和其他有關各方結成深層次的合作伙伴關系,希望借助建立標準化、開放式的移動電話軟件平臺,在移動產業內形成一個開放式的生態系統;可預見地,生產和使用基于Android系統的嵌入式手持移動設備將是未來的發展趨勢,對相應軟件的需求量也將日趨增長,因此對Android系統內部作一個完整和深入的分析,對基于Android平臺的軟件移植和開發是很有益處的。?
1 Android系統平臺架構?
對操作系統而言,必須做到設計合理、層次分明,同時還需考慮整個系統的結構要聚耦適當,Android系統是基于linux內核的,因此還必須具備開源的特性,以符合開源人員共同工作。?
從系統的組成要件來講,Android平臺架構包括硬件設備、板級支持包、驅動程序、操作系統內核、程序運行庫,運行框架,應用程序等,它們的有機結合和協同工作共同完成了整個系統的正常運行和對事務的處理。?
依據Google開源資料可知,整個系統由Linux內核、程序庫、Android Runtime、應用程序框架和應用程序等5部分組成,,系統架構如圖1所示。?
參照圖1,由上而下對組成系統各部分的主要組件作以下描述。?
1.1 Linux內核?
Android基于Linux 2.6內核,但并非完全照搬內核,而是對內核作了部分增刪和修改,在Linux 2.6內核的基礎上,Android核心系統實現了安全性、內存管理、進程管理、網絡協議棧和驅動模型等功能,Linux內核也同時作為硬件和軟件棧之間的抽象層。?
①硬件驅動程序:完成與各種硬件的通信,Linux內核提供了大部分設備的驅動程序,如顯示屏,攝像頭,內存,鍵盤,無線網絡,音頻設備,電源等組件。?
②系統內存管理:對所有可用的內存進行統一編碼管理,定義一整套內存定位,使用與回收的策略。?
③系統進程管理:內核管理進程的創建與銷毀,管理進程間的通信,以及采取必要的措施避免死鎖等內容。?
④網絡管理系統:無線網絡設備工作原理,內核掌控如何讀取網絡設備中的緩存數據。?
1.2 程序庫?
程序庫是指可供使用的各種標準程序、子程序、文件以及它們的目錄等信息的有序集合,Android包含一些C/C++庫,Android系統中不同的組件通過應用程序框架可以使用這些庫,以下是一些核心庫:?
Surface Manager:管理顯示子系統,并且為多個應用程序提供2D和3D圖層的無縫融合;?
Media Framework:基于OpenCORE的多媒體框架,支持多種常用的音頻、視頻格式文件的回放和錄制,同時支持靜態圖像文件。?
SQLite:一個對于所有應用程序可用,功能強勁的輕型關系型數據庫引擎。?
OpenGL ES:3D圖形庫,用于3D圖形渲染,該庫可以使用3D硬件加速。?
FreeType:位圖(Bitmap)和矢量(Vector)字體顯示。?
WebKit:支持Android瀏覽器和一個可嵌入的Web視圖。?
SGL:2D圖形庫,用于2D圖形渲染。?
LibC:一個從BSD繼承的標準C系統函數庫,它是專門為基于嵌入式Linux設備定制的。?
1.3 Android運行庫(Android Runtime)?
Android運行庫包括兩部分:一是核心庫,二是自身的虛擬機。?
核心庫提供Java編程語言核心庫的大多數功能。Dalvik虛擬機是Google專為Android開發的,比SunJava虛擬機的效率更高,功能也更為復雜,以更好的支撐Android平臺,并擁有獨立的版權。每一個Android應用程序都在自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例, Dalvik虛擬機執行.dex的可執行文件,該格式文件針對小內存的使用進行了優化,同時虛擬機是基于寄存器實現的,所有的類由Java編譯器編譯,然后通過SDK中的相應工具轉化成.dex格式,最后由虛擬機執行。?
1.4 應用程序框架?
應用程序框架是指定義了一個應用程序運行所必須的全部功能組件,開發者也可以訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發布它的功能塊,并且任何其他的應用程序都可以使用其所發布的功能塊(應該遵循框架的安全性限制)。同樣,該應用程序的重用機制也使用戶可以方便地替換程序組件。?
隱藏在每個應用后面的是一系列的服務和系統,其中包括:?
活動管理器(Activity Manager):用來管理應用程序生命周期,并且提供常用的導航回退功能。?
豐富而又可擴展的視圖(Views):可以用來構建應用程序,它包括列表(Lists)、網格(Grids)、文本框?
(Text Boxes)、按鈕(Buttons),甚至包括可嵌入的Web瀏覽器。?
內容提供器(Content Providers):使得應用程序可以訪問另一個應用程序的數據,或者可以共享它們自己的數據。?
資源管理器(Resource Manager):提供非代碼資源的訪問,如本地字符串、圖形和布局文件(Layout Files)。?
通知管理器(Notification Manager):使得應用程序可以在狀態欄中顯示自定義的提示信息。?
Android程序框架體顯了“統一”與“兼容”的原則,其優勢歸納為:?
①任何一個應用程序都可以發布它的功能塊。?
②所有的應用程序在Android平臺上都是平等的。?
③所有的應用程序與資源都被按類別進行分別管理。?
④所有程序各司其職。?
1.5 應用程序?
Android系統發布時,會同一系列核心應用程序和常用程序一起發布,如常用的手機功能程序,包括語音電話、通訊錄、短信收發、照相、話機設置等;數據應用程序,包括郵件工具,日程表,瀏覽器,地圖導航等,以及Android Market上的各種應用程序;所有的應用程序都是使用Java語言編寫。?
2 Android內核?
Android內核基于Linux2.6內核作了部分修改和增刪,是一個增強內核版本,除了修改部分Bug外,它還提供了用于支持Android平臺的設備驅動,與標準的Linux內核比較、分析可知其內核的全貌和基本結構,下面對基于Android修改的核心驅動作初步闡述:?
2.1 系統進程管理?
Android平臺的進程間通訊基于Binder機制實現,它提供了一種進程間通信的方法,即一個進程可以以類似遠程過程調用的形式調用另一個進程所提供的功能,然后帶著執行的結果返回。Android Binder是基于Service與Client的,有一個ServiceManager的守護進程管理著系統的各個服務,它負責監聽是否有其他程序向其發送請求,如果有請求就響應,每個服務都要在ServiceManager中注冊,而請求服務的客戶端去ServiceManager請求服務。?
2.2 內存管理?
低內存管理器(Low Memory Killer):相對于Linux標準OOM(Out Of Memory)機制更加靈活,它可以根據需要殺死進程來釋放需要的內存。匿名共享內存(ashmem):為進程間提供大塊共享內存,同時為內核提供回收和管理這個內存的機制。Android PMEM(Physical):PMEM用于向用戶空間提供連續的物理內存區域,DSP和某些設備只能工作在連續的物理內存上。?
2.3 文件系統管理?
Android平臺采用Yaffs2作為MTD nand flash文件系統,Yaffs2是一個快速穩定的應用于NAND和NOR Flash的跨平臺的嵌入式設備文件系統,同其他Flash文件系統相比,Yaffs2使用更小的內存來保存它的運行狀態,因此它占用內存小;Yaffs2的垃圾回收非常簡單而且快速,因此能達到更好的性能;Yaffs2在大容量的NAND Flash上性能表現尤為明顯,非常適合大容量的Flash存儲。?
2.4 時鐘管理?
Android Alarm,提供了一個定時器用于把設備從睡眠狀態喚醒,同時它也提供了一個即使在設備睡眠時也會運行的時鐘基準,Android timed device,提供了對設備進行定時控制功能,目前支持vibrator和LED設備。?
2.5 電源管理?
Android電源管理(PM),一個基于標準Linux電源管理系統的輕量級的Android電源管理驅動,針對嵌入式設備做了很多優化。?
2.6 USB管理?
Android的USB驅動是基于gaeget框架的,USB Gadget驅動是一個基于標準Linux USB gadget驅動框架的設備驅動。?
2.7 系統日志管理?
Android Logger,一個輕量級的日志設備,用于抓取Android系統的各種日志。?
3 結束語?
Android是一款開放的、基于Linux內核的嵌入式操作系統,將被廣泛地應用到各種移動手持設備中,充分發揮其強大的網絡功能;由于開源的特性,Android不區分核心應用程序和第三方應用程序,并可自由的吸納新出現的尖端技術;同時,Android提供廣泛而實用的函數庫和工具,利用它們可以開發豐富的應用程序。由此可以展望,基于開放手機聯盟(Open Handset Alliance)平臺強大的技術實力和市場推廣,Android系統在移動嵌入式領域的應用將會非常廣闊。?
?
評論
查看更多