歷史
Android早期由「Android之父」之稱的Andy Rubin創辦,Google於2005年併購了成立僅22個月的高科技企業Android,展開了簡訊、手機檢索、定位等業務,基於Linux的通用平台進入了開發。Google公司在2007年11月5日正式公佈這個作業系統,2008年,Patrick Brady於Google I/O演講「Anatomy & Physiology of an Android」,並提出的Android HAL架構圖。HAL以*.so檔的形式存在,可以把Android framework與Linux kernel隔開。
2010年2月3日,Linux核心開發者Greg Kroah-Hartman將Android的驅動程式從Linux核心「狀態樹」(「staging tree」)上除去,從此,Android與Linux核心開發分道揚鑣。
名稱來源
Android一詞最早出現於法國作家利爾亞當在1886年發表的科幻小說《未來夏娃》中。他將外表像人的機器起名為Android。
市場衝擊
其他作業系統如微軟的Windows Mobile,手機商要向微軟繳付相當於手機成本10%的牌照費,Android則以免費開源打破某些限制,此外,手機製造商和網路商為保障收入,通常會限制使用者可以使用甚麼功能和服務。Android亦不設限制,可以像用電腦上網一樣,享用很多服務。Android對手有蘋果電腦的iOS及微軟的Windows Phone及RIM使用的BlackBerry OS系統。
Android Market
2009年2月,Google推出Android Market線上應用程式商店,使用者可在該平台網頁尋找、購買、下載及評級使用手機應用程式及其他內容。
Android Market萾內的付費程式在許多國家與地區內提供,如美國、英國、瑞典、德國、斯裡蘭卡、泰國、越南、香港、中國、台灣等。但覆蓋範圍有限。目前中國還未能得到該服務,用戶仍可通過國際信用卡和一款名為"Market Access"的免費軟體來完成在非支援地區的購買,但需要注意的是,通過這種方法購買的軟體可能不會得到當地承認的發票(Invoice)。
版本
Android系統差不多每半年一次的升級步伐,每代Android系統都以甜點命名,比如1.5版叫做Cupcake(紙杯蛋糕),1.6版為Donut(甜甜圈),2.0/2.1叫蟁clair(閃電泡芙,一種法式奶油夾心甜點),之後是2.2版的Froyo(冷乳酪)和2.3版的Gingerbread(薑餅)最後3.0版叫Honeycomb(蜂窩)。以C D E F G H字頭順序排列。Donut將把社交網路功能作為升級重點,在「手機的各種體驗中」都增加社交網路元素。
發佈
| 1.5 (Cupcake) 基於Linux Kernel 2.6.27 |
2009年4月30日,官方1.5版本(Cupcake 紙杯蛋糕)的Android發佈。
主要的更新如下:
|
|---|---|
| 1.6 (Donut) 基於Linux Kernel 2.6.29 |
2009年9月15日,1.6(Donut 甜甜圈)版本軟體開發套件發佈。主要的更新如下: |
| 2.0/2.0.1/2.1 (Eclair) 基於Linux Kernel 2.6.29 |
2009年10月26日,2.0(Eclair 鬆餅)版本軟體開發套件發佈。主要的更新如下:
|
| 2.2/2.2.1 (Froyo) 基於Linux Kernel 2.6.32 |
2010年5月20日,2.2(Froyo 凍酸奶)版本軟體開發套件發佈。主要的更新如下:
註:部分標稱為2.2的韌體仍然在使用2.6.29的核心。這種韌體可以實作大部分2.2的功能(比如flash),但效能上與2.6.32有一定差距。 |
| 2.3 (Gingerbread) 基於Linux Kernel 2.6.35 |
2010年12月7日,2.3(Gingerbread 薑餅)版本軟體開發套件發佈。主要的更新如下: |
| 3.0.1/3.1/3.2 (Honeycomb) |
* 2011年2月2日, 3.0(Honeycomb 蜂巢)版本主要更新如下:
|
| 4.0 (Ice Cream Sandwich) |
* 2011年11月24日,4.0(Ice Cream Sandwich 冰淇淋三明治)版本主要更新如下:
|
系統架構

應用程式
Android以Linux為核心的Android行動平台,使用Java作為程式語言,使介面到功能,都有層出不窮的變化,其中Activity等同於J2ME的MIDlet,一個Activity類別負責建立視窗,一個活動中的Activity就是在foreground(前景)模式,背景執行的程式叫做Service。兩者之間透過由ServiceConnection和AIDL連結,達到複數程式同時執行的效果。如果執行中的Activity全部畫面被其他Activity取代時,該Activity便被停止,甚至被系統清除。
View等同於J2ME的Displayable,程式人員可以透過View類別與「XML layout」檔將UI放置在視窗上,Android 1.5的版本可以利用View打造出所謂的Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout,HTC的Android Hero手機即含有大量的widget。至於ViewGroup是各種layout的基礎抽象類別,ViewGroup之內還可以有ViewGroup。View的建構函式不需要再Activity中呼叫,但是Displayable的是必須的,在Activity中,要透過findViewById()來從XML中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View與事件息息相關,兩者之間透過Listener結合在一起,每一個View都可以註冊一個event listener,例如:當View要處理使用者觸碰的事件時,就要向Android框架註冊View.OnClickListener。另外還有Image等同於J2ME的BitMap。
中介軟體
作業系統與應用程式的溝通橋樑,並用分為兩層:函式層和虛擬機器器。 Bionic是Android改良libc的版本。Android同時包含了Webkit,所謂的Webkit就是Apple Safari瀏覽器背後的引擎。Surface flinger是就2D或3D的內容顯示到螢幕上。Android使用工具鏈為Google自製的Bionic Libc。
Android採用OpenCORE作為基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
Android使用Skia為核心圖形引擎,搭配OpenGL/ES。Skia與Linux Cairo功能相當,但相較於Linux Cairo, Skia功能還只是陽春型的。2005年Skia公司被Google收購,2007年初,Skia GL源碼被公開,目前Skia也是Google Chrome的圖形引擎。
Android的多媒體資料函式庫採用SQLite資料函式庫系統。資料函式庫又分為共用資料函式庫及私用資料函式庫。使用者可透過ContentResolver類別取得共用資料函式庫。
Android的中間層多以Java實作,並且採用特殊的Dalvik虛擬機器器。Dalvik虛擬機器器是一種「暫存器型態」的Java虛擬機器器,變數皆存放於暫存器中,虛擬機器器的指令相對減少。
Dalvik虛擬機器器可以有多個例項,每個Android應用程式都用一個自屬的Dalvik虛擬機器器來執行,讓系統在執行程式時可達到最佳化。Dalvik虛擬機器器並非執行Java位元組碼,而是執行一種稱為.dex格式的檔案。
硬體抽像層
Android的硬體抽像層是能以封閉源碼形式提供硬體驅動模組。HAL的目的是為了把Android framework與Linux kernel隔開,讓Android不至過度依賴Linux kernel,以達成kernel independent的概念,也讓Android framework的開發能在不考量驅動程式實作的前提下進行發展。
HAL stub是一種代理人的概念,stub是以*.so檔的形式存在。Stub向HAL「提供」操作函式,並由Android runtime向HAL取得stub的operations,再callback這些操作函式。HAL里包含了許多的stub(代理人)。Runtime只要說明「型別」,即module ID,就可以取得操作函式。
程式語言
Android是執行於Linux kernel之上,但並不是GNU/Linux。因為在一般GNU/Linux裏支援的功能,Android大都沒有支援,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android為了達到商業應用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅動程式移到userspace,使得Linux driver與Linux kernel徹底分開。bionic/libc/kernel/ 並非標準的kernel header files。Android的kernel header是利用工具由Linux kernel header所產生的,這樣做是為了保留常數、資料結構與巨集。
目前Android的Linux kernel控制包括安全,記憶體管理,行程管理,網路堆疊,驅動程式模型等。下載Android源碼之前,先要安裝其構建工具Repo來初始化源碼。Repo是Android用來輔助Git工作的一個工具。
本文內容僅供參考,無任何買賣建議,投資人應謹慎評估,風險自負。




內容非常詳細也解了我對Android的疑惑
感謝分享~