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核心開發分道揚鑣。
[7][編輯]名稱來源
Android一詞最早出現於法國作家
利爾亞當在1886年發表的科幻小說《未來夏娃》中。他將外表像人的機器起名為Android。
[編輯]市場衝擊
[編輯]Android Market
2009年2月,
Google推出Android Market線上應用程式商店,使用者可在該平台網頁尋找、購買、下載及評級使用手機應用程式及其他內容
[10]。
Android Market™內的付費程式在許多國家與地區內提供,如美國、英國、瑞典、德國、斯裡蘭卡、泰國、越南、香港、中國、台灣等。但覆蓋範圍有限。
[11]目前中國還未能得到該服務,用戶仍可通過國際信用卡和一款名為"Market Access"的免費軟體來完成在非支援地區的購買,但需要注意的是,通過這種方法購買的軟體可能不會得到當地承認的發票(Invoice)。
Android系統差不多每半年一次的升級步伐,每代Android系統都以甜點命名,比如1.5版叫做Cupcake(紙杯蛋糕),1.6版為Donut(甜甜圈),2.0/2.1叫Éclair(閃電泡芙,一種法式奶油夾心甜點
[12]),之後是2.2版的Froyo(冷冻乳酪)和2.3版的Gingerbread(薑餅)最後3.0版叫Honeycomb(蜂窩)。以C D E F G H字頭順序排列。Donut將把社交網路功能作為升級重點,在「手機的各種體驗中」都增加社交網路元素
[13]。
1.5 (Cupcake) 基於Linux Kernel 2.6.27 |
2009年4月30日,官方1.5版本(Cupcake)的Android發佈。[14][15]主要的更新如下:
- 拍攝/播放影片,並支援上傳到Youtube
- 支援立體聲藍芽耳機,同時改善自動配對效能
- 最新的採用WebKit技術的瀏覽器,支援複制/貼上和頁面中搜尋
- GPS效能大大提高
- 提供螢幕虛擬鍵盤
- 主螢幕增加音樂播放器和相框widgets
- 應用程式自動隨著手機旋轉
- 簡訊、Gmail、日暦,瀏覽器的使用者介面大幅改進,如Gmail可以批次刪除郵件
- 相機啟動速度加快,拍攝圖片可以直接上傳到Picasa
- 來電照片顯示[16]
|
1.6 (Donut) 基於Linux Kernel 2.6.29 |
2009年9月15日,1.6(Donut)版本軟體開發套件發佈。[17][18]主要的更新如下:
- 重新設計的Android Market
- 手勢支援
- 支援CDMA網路
- 文字轉語音系統(Text-to-Speech)
- 快速搜尋框
- 全新的拍照介面
- 檢視應用程式耗電
- 支援虛擬私人網路(VPN)
- 支援更多的螢幕解析度。
- 支援OpenCore2媒體引擎
- 新增面向視覺或聽覺困難人群的易用性外掛程式[19]
|
2.0/2.0.1/2.1 (Eclair) 基於Linux Kernel 2.6.29 |
2009年10月26日,2.0(Eclair)版本軟體開發套件發佈。[20]主要的更新如下:[21] |
2.2/2.2.1 (Froyo) 基於Linux Kernel 2.6.32 |
2010年5月20日,2.2(Froyo)版本軟體開發套件發佈。[22]主要的更新如下:
- 支援將軟體安裝至擴充功能內部記憶體[23]
- 整合Adobe Flash 10.1支援[24]
- 加強軟體即時編譯的速度[25]
- 新增軟體啟動"快速"至電話和瀏覽器[26]
- USB分享器和WiFi熱點功能[27]
- 支援在瀏覽器上傳檔案[28]
- 更新Market中的批次和自動更新[29]
- 增加對Microsoft Exchange的支援(安全政策, auto-discovery, GAL look-up)
- 整合Chrome的V8 JavaScript引擎到瀏覽器
- 加強快速搜尋小工具
- 更多軟體能透過Market更新,類似2.0/2.1中的Map更新
- 速度和效能最佳化[29]
註:部分標稱為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)版本軟體開發套件發佈。[30]主要的更新如下:
- 修補UI[31]
- 支援更大的螢幕尺寸和解像度(WXGA及更高)
- 系統級複製貼上
- 重新設計的多點觸控式螢幕幕鍵盤
- 原生支援多個鏡頭(用於視訊通話等)和更多感測器(陀螺儀、氣壓計等)
- 電話簿整合Internet Call功能
- 支援近場通訊(NFC)
- 強化電源、應用程式管理功能
- 新增下載管理員
- 最佳化遊戲開發支援
- 多媒體音效強化
- 從YAFFS轉換到ext4檔案系統
- 開放了螢幕快照功能
- 對黑色及白色的還原更加真實
|
3.0.1/3.1/3.2 (Honeycomb) |
* 2011年2月2日, 3.0(Honeycomb)版本主要更新如下:
- 僅供平板電腦使用
- Google eBooks上提供數百萬本書
- 支援平板電腦大螢幕、高解析度
- 新版Gmail
- Google Talk視訊功能
- 3D加速處理
- 網頁版Market(Web store)詳細分類顯示,依個人Android分別設定安裝應用程式
- 新的短訊息通知功能
- 專為平板電腦設計的使用者介面(重新設計的通知列與系統列)
- 加強多工處理的介面
- 重新設計適用大螢幕的鍵盤及複製貼上功能
- 多個標籤的瀏覽器以及私密瀏覽模式
- 快速切換各種功能的相機
- 增強的圖庫與快速捲動的聯絡人介面
- 更有效率的Email介面
- 支援多核心處理器
- 3.2優化7吋平板顯示
|
4.0 (Ice Cream Sandwich) |
(Jelly Bean) |
|
[編輯]系統架構
藍色區塊:應用程式、管理與服務元件。綠色區塊:資料庫元件。黃色區塊:作業系統的執行時期元件。紅色區塊:系統核心與驅動元件。 [編輯]應用程式
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所產生的,這樣做是為了保留常數、資料結構與巨集。