Android

::Android 嘅其他意思，睇 Android (搞清楚)

**Android**（讀音：['ændrɔid]）係一個公開源碼嘅Linux作業系統，主要用喺手提電子產品，好似有電腦功能嘅智能電話或平板電腦。家陣未有劃一唐名，粵語用者，多數用番英文名**Android**叫佢，少數人亦會叫佢做**安撞**，其它華語地區（大陸同臺灣）一般叫**安卓**。

Android呢個名，最早見於科幻小說《未來夏娃》，係法國作家利爾亞當寫嘅，一八八六年發表。佢將外表似人咁樣，就叫**Android**。Android操作系統，最初由Andy Rubin創辦，最初只係支援手機。二零零五年，由Google收購注資，並同啲手機大廠，一齊搞開放手機聯盟（Open Handset Alliance），開發改良，逐漸擴展到平板電腦同埋其他用途上面。

二零一零年末，Andr​​oid正式推出咗兩年，就贏咗十年霸主嘅諾基亞Symbian系統，成爲全球最受歡迎嘅智能手機平台。用Android系統嘅手機廠商，包括HTC、Samsung、Motorola、Lenovo、LG、Sony Ericsson、華為等。Android另一對手，iOS係得一個樣，由蘋果公司控制，Android就同佢相反，各廠商可以有唔同設計，可以遷就唔同習慣，算係針對iOS嘅弱點。

## 歷史
Android早期由「Android之父」Andy Rubin創辦，Google響2005年收購成立咗只有22個月嘅高科技企業Android，展開咗短訊、搵電話、定位等業務，基於Linux嘅通用平台進入咗開發。Google公司響2007年11月5號正式公佈呢個操作系統，2008年，Patrick Brady 喺 Google I/O演講《Anatomy & Physiology of an Android》，重搞咗Andr​​oid HAL架構圖。HAL用*.so檔嘅形式存在，搞到Android framework同Linux kernel隔開。

2010年2月3號，Linux內核開發者Greg Kroah-Hartman將An​​droid嘅驅動由Linux內核「狀態樹」（staging tree）上面剷咗，Android同Linux核心開發分道揚鑣。

## 市場衝擊
其他作業系統好似微軟嘅Windows Mobile，手機商要同微軟畀相當於手機成本10%嘅牌照費，Android就免費開源打​，此外，手機製造商同網絡商為咗要保障收入，通常會限制用戶可以用啲咩功能同服務。Android就唔設限制，可以好似用電腦上網咁，用到好多服務。Android對手有蘋果電腦嘅iOS、微軟嘅Windows Phone同RIM用嘅BlackBerry OS系統等。

## Google Play

2009年2月，Google推出Android Market，用戶可以喺嗰度下載手機應用程式（apps）同幫apps評分。

2012年3月，Android Market改名做Google Play。

## 版本
 
Android系統差唔多每半年升級一次，喺版本10之前每代Android系統都用甜品命名：

* 1.5 版叫做 Cup Cake          （紙杯蛋糕）
* 1.6 版叫做 Donut             （冬甩）
* 2.0 版叫做 Eclair            （閃電泡芙）
* 2.1 版叫做 Eclair            （閃電泡芙）
* 2.2 版叫做 Froyo             （冰凍乳酪）
* 2.3 版叫做 Gingerbread       （薑餅）
* 3.0 版叫做 Honeycomb         （蜂巢）
* 4.0 版叫做 Ice Cream Sandwich（雪糕三文治）
* 4.1 版叫做 Jelly Bean        （啫喱豆）
* 4.2 版叫做 Jelly Bean        （啫喱豆）
* 4.3 版叫做 Jelly Bean        （啫喱豆）
* 4.4 版叫做 KitKat            （KitKat朱古力）
* 5.0 版叫做 Lollipop          （波板糖）
* 5.1 版叫做 Lollipop          （波板糖）
* 6.0 版叫做 Marshmallow       （棉花糖）
* 7.0 版叫做 Nougat            （鳥結糖）
* 8.0 版叫做 Oreo              （奧利奧）
* 9.0 版叫做 Pie              （批）
* 10 版              （開發代號為Q）
* 11 版

以C D E F G H I J K L M N O P Q字頭順序排列。

### 應用
中國移動基於Android系統開發咗OPhone平台，並於OPhone2.0或以上兼容Android Market。2010年9月，華為推出咗全世界第一部Android2.2嘅手機IDEOS。同年10月，韓國嘅三星電子推出咗7寸嘅Samsung Galaxy Tab同法國嘅愛可視（Archos）推出咗10寸嘅Android 2.2嘅平板電腦。呢兩部平板電腦當時被譽為蘋果iPad嘅殺手，因為佢哋都有USB同Flash瀏覽網頁。

## 系統架構

### 應用程式
Android 用 Linux 做核心嘅 Andr​​oid 行動平台，用Java作為編程語言，令介面到功能、都有層出不窮嘅變化。其中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嘅Andr​​oid 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（硬體抽象層，Hardware Abstraction Layer）係能夠以封閉源碼形式提供硬體驅動模組。HAL嘅目的係為咗將Android framework同Linux kernel隔開，令Android唔至於過度依賴Linux kernel，以達成kernel independent嘅概念，亦令Android framework嘅開發能喺唔考量驅動程式實作嘅前提下進行發展。

HAL stub係一種代理人（proxy）嘅概念，stub係以*.so檔嘅形式存在。Stub向HAL「提供」操作函數（operations），並由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控制包括安全（Security）、記憶體管理（Memory Managemeat）、程序管理（Process Management）、網絡堆疊（Network Stack）、驅動程式模型（Driver Model）等。下載Android源碼之前，要先安裝咗佢嘅構建工具Repo嚟初始化源碼。Repo係Android用來輔助Git工作嘅一個工具。

## 參考


## 睇埋

* Android裝置一覽：搭載Android系統嘅裝置產品