Android

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

Android係一個公開源碼嘅Linux作業系統，主要用喺手提電子產品，好似有電腦功能嘅智能電話或平板電腦。家陣未有劃一唐名，粵語用者，多數用番英文名Android叫佢，少數人亦會叫佢做安撞，其它華語地區一般叫安卓。

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

二零一零年末，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內核「狀態樹」上面剷咗，Android同Linux核心開發分道揚鑣。

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

Google Play 

2009年2月，Google推出Android Market，用戶可以喺嗰度下載手機應用程式同幫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            
 5.0 版叫做 Lollipop          
 5.1 版叫做 Lollipop          
 6.0 版叫做 Marshmallow       
 7.0 版叫做 Nougat            
 8.0 版叫做 Oreo              
 9.0 版叫做 Pie              
 10 版              
 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同法國嘅愛可視推出咗10寸嘅Android 2.2嘅平板電腦。呢兩部平板電腦當時被譽為蘋果iPad嘅殺手，因為佢哋都有USB同Flash瀏覽網頁。

系統架構

應用程式 
Android 用 Linux 做核心嘅 Andr​​oid 行動平台，用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嘅Andr​​oid Hero手機就含有大量嘅widget。至於ViewGroup係各種layout嘅基礎抽像類別，ViewGroup之內重可以有ViewGroup。View嘅構造函數唔需要喺Activity中調用，但是Displayable係必須嘅，喺Activity之中，要通過findViewById來從XML中取得View，Android嘅View類嘅顯示好大程度上係喺XML中讀取。View同事件息息相​​關，兩者之間透過Listener結合埋一齊，每一個View都可中介軟件 
作業系統同埋應用程式嘅溝通橋樑，並用分為兩層：函式層同埋虛擬機器。

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、Operating System Compatibility Library、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係能夠以封閉源碼形式提供硬體驅動模組。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裝置一覽：搭載Android系統嘅裝置產品

虛擬機器