標籤:
(來源於ThinkPHP)
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架構。該應用程式的架構設計簡化了組件的重用;任何一個應用程式都發行就緒它的功能塊,並且任何其他的應用程式都可以使用其所發布的功能塊(應該遵循架構的安全性限制)。同樣,該應用程式的重用機制也使使用者可以方便地替換程式組件。
隱藏在每個應用後面的是一系列的服務和系統,其中包括:
Active Manager(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系統在移動嵌入式領域的應用將會非常廣闊。
Android系統架構及核心簡介