發新話題

[分享] Android百科全書

Android百科全書

Android(英音:['ændrɔid] 美音:['ændrɔɪd] )是一種以Linux為基礎的開放源碼操作系統,主要使用於便攜設備,目前尚未有統一中文名稱,華語地區較多人使用安卓或安致。

Android一詞最早出現於法國作家利爾亞當在1886年發表的科幻小說《未來夏娃》中。他將外表像人的機器起名為Android。Android操作系統最初由Andy Rubin創辦,最初只面向手機。2005年由Google收購注資,並拉攏多家製造商組成開放手機聯盟(Open Handset Alliance)開發改良,逐漸擴展到到平板電腦及其他領域上。

2010年末數據顯示,僅正式推出兩年的作業系統Android已經超越稱霸十年的諾基亞(Nokia)Symbian OS系統,躍居全球最受歡迎的智慧手機平台。採用Android系統手機廠商包括宏達電、三星電子、摩托羅拉、樂喜金星、索尼愛立信、華為等,Android也在平板電腦市場急速擴張,其對手有蘋果電腦的iOS及微軟的Windows Phone及RIM使用的BlackBerry OS系統。

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核心開發分道揚鑣。

其他作業系統如微軟的Windows Mobile,手機商要向微軟繳付相當於手機成本10%的牌照費,Android則以免費開源打破某些限制,此外,手機製造商和網絡商為保障收入,通常會限制用戶可以使用甚麼功能和服務。Android亦不設限制,可以像用電腦上網一樣,享用很多服務。

2009年2月,Google推出Android Market線上應用程式商店,用戶可在該平台網頁尋找、購買、下載及評級使用手機應用程序及其他內容。

版本:
Android系統差不多每半年一次的升級步伐,每代Android系統都以甜點命名,比如1.5版叫做Cupcake(紙杯蛋糕),1.6版為 Donut(甜甜圈),然後是2.1版的Éclair(閃電泡芙,一種法式奶油夾心甜點,此版本曾被叫做Flan「水果餡餅」),之後是2.2版的 Froyo(冷凍乳酪)和2.3版的Gingerbread(薑餅)。以C D E F G字頭順序排列。Donut將把社交網絡功能作為升級重點,在「手機的各種體驗中」都增加社交網絡元素。

應用程式:
Android以Linux為核心的Android行動平台,使用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的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格式的檔案。
[編輯] 硬體抽像層 (Hardware Abstraction Layer)

Android的HAL(硬體抽像層)是能以封閉源碼形式提供硬體驅動模組。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工作的一個工具。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。