目錄[隱藏] |
[編輯] 歷史
[編輯] 開發
Google於2005年併購了成立僅22個月的高科技企業Android,展開了簡訊、手機檢索、定位等業務,同時基於Linux的通用平台也進入了開發。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核心開發分道揚鑣。[3]
[編輯] 公佈前的傳聞
Google的東南亞銷售與營運常務董事Richard Kimber曾說:"At this point in time, we are very focused on the software, not the phone.(目前我們完全專注於軟體而非電話)"。可是Google並未正式否認正在製作電話的傳聞,Google可能與一家硬體生產商合作創作 Google Phone。傳言指出Google Phone將提供完全免費的服務,Google會透過廣告獲取收益。Google Phone的發佈日期預期為2009年。
LG宣佈將於2007年第二季開始在其手提電話產品中安裝Google的軟體。[4]
[編輯] 升級
Android系統今後將繼續每半年一次的升級步伐,分別定在每年的夏天和年終。每代Android系統都將以甜點命名,比如1.5版叫做 Cupcake(紙杯蛋糕),1.6版為Donut(甜甜圈),然後是Éclair(法式奶油夾心甜點)和Froyo(冷凍乳酪)。Donut將把社交網 路功能作為升級重點,在「手機的各種體驗中」都增加社交網路元素[5]。[編輯] 對手機業界的影響
已經與Sony Ericsson、HTC、NTT DoCoMo、KDDI、Motorola等世界移動領域34家公司於免費提供達成一致。今後對於行動通訊的影響勢必會進一步體現出來。但是如此廣泛公司的同盟是否能夠有效運作及以持久值得拭目以待。[編輯] 發佈
1.5 (Cupcake) 基於Linux Kernel 2.6.27 | 2009年4月30日,官方1.5版本(Cupcake)的Android發佈。[6][7]主要的更新如下:
|
---|---|
1.6 (Donut) 基於Linux Kernel 2.6.29 | 2009年9月15日, 1.6(Donut)版本SDK發佈。[9][10]主要的更新如下:
|
2.0/2.0.1/2.1 (Eclair) 基於Linux Kernel 2.6.29 | 2009年10月26日, 2.0(Eclair)版本SDK發佈。[12]主要的更新如下:[13]
|
2.2 (Froyo) 基於Linux Kernel 2.6.32 | 2010年5月20日, 2.2(Froyo)版本SDK發佈。[14] 已確定新功能:
|
??? (Gingerbread) 基於Linux Kernel 2.6.33 | 已確定新功能: 未確定新功能:
|
[編輯] 系統架構
[編輯] 應用程式
以Java為編程語言,使Android從介面到 功能,都有層出不窮的變化,其中Activity等同於J2ME的MIDlet,一個 Activity 類別(class)負責建立視窗(window),一個活動中的Activity就是在 foreground(前景)模式,背景執行的程式叫做Service。兩者之間透過由ServiceConnection和AIDL連結,達到複數程式 同時執行的效果。如果執行中的 Activity 全部畫面被其他 Activity 取代時,該 Activity 便被停止(stopped),甚至被系統清除(kill)。View等同於J2ME的Displayable,程式人員可以透過 View 類別與「XML layout」檔將UI放置在視窗上,Android 1.5的版本可以利用 View 打造出所謂的 Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout,HTC的Android Hero手機即含有大量的widget。至於ViewGroup 是各種layout 的基礎抽象類別(abstract class),ViewGroup之內還可以有ViewGroup。View的構造函數不需要再Activity中調用,但是Displayable的是 必須的,在Activity 中,要通過findViewById()來從XML 中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關,兩者之間透過Listener 結合在一起,每一個View都可以註冊一個event listener,例如:當View要處理使用者觸碰(touch)的事件時,就要向Android框架註冊View.OnClickListener。 另外還有Image等同於J2ME的BitMap。
[編輯] 中間件
作業系統與應用程式的溝通橋樑,並用分為兩層:函式層(Library)和虛擬機器(Virtual Machine)。Bionic是 Android 改良libc的版本。Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到螢幕上。Android使用工具鏈(Toolchain)為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類別(Column)取得共用資料庫。
Android的中間層多以Java 實作,並且採用特殊的Dalvik 虛擬機器(Dalvik Virtual Machine)。Dalvik虛擬機器是一種「暫存器型態」(Register Based)的Java虛擬機器,變數皆存放於暫存器中,虛擬機器的指令相對減少。
Dalvik虛擬機器可以有多個instance, 每個Android應用程式都用一個自屬的Dalvik虛擬機器來執行,讓系統在執行程式時可達到最佳化。Dalvik 虛擬機器並非執行Java Bytecode,而是執行一種稱為.dex格式的檔案。
[編輯] 硬體抽像層
Android HAL 是為了將 Android framework 與 Linux kernel 隔開,降低對 Linux kernel 的依賴,以達成kernel independent。Android HAL 目前以 HAL stub 的形式存在,本身是.so 檔,是一種 proxy 的概念。Android runtime 向 HAL 取得 stub 的 operations,再以 callback 的方式操作函數。[編輯] 作業系統
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控制包括安全(Security),記憶體管理(Memory Managemeat),程式管理(Process Management),網路堆疊(Network Stack),驅動程式模型(Driver Model)等。下載Android源碼之前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。
沒有留言:
張貼留言