基本介紹
XDAndroid是XDA高手專門為Windows Mobile機型定製的Android,兼容Diamond,Diamond2, HD, HD2、Pro, Pro2,解決了GPRS和WIFI通信的問題,更是在系統速度上有了很大的提升,真正距離實用化又邁進了一大步。
關於Android,社會輿論褒貶不一,具體還得親自體驗一下。目前支持機型:Diamond、Diamond2、HD、HD2、Pro、Pro2。
XDAndroid通過使用HARET(一款在winCE環境下引導至Linux系統的引導程式),將手機引導進入android系統。在進入android系統後,手機上正在運行的Windows Mobile系統即被關閉,所以XDAndroid性能與所刷的系統ROM無關。XDAndroid已基本上已經能夠完美運行,但從兼容性方面,鑒於所以底層驅動皆為第三方編寫,對於某些windows mobile 手機依然不太兼容。有時可能會出現無法啟動或自動重啟的情況。而且由於對存儲卡依賴過高,使得系統的耗電量比原來的系統增加了許多。
系統架構
應用程式
Android以Java為程式語言,從接口到功能,都有層出不窮的變化,其中Activity等同於J2ME的MIDlet,一個 Activity 類(class)負責創建視窗(window),一個活動中的Activity就是在 foreground(前景)模式,背景運行的程式叫做Service。兩者之間通過由ServiceConnection和AIDL連結,達到複數程式同時運行的效果。如果運行中的 Activity 全部畫面被其他 Activity 取代時,該 Activity 便被停止(stopped),甚至被系統清除(kill)。View等同於J2ME的Displayable,程式人員可以通過 View 類與“XMLlayout”檔將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(硬體抽像層)是能以封閉源碼形式提供硬體驅動模組。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 Management),程式管理(Process Management),網路堆疊(Network Stack),驅動程式模型(Driver Model)等。下載Android源碼之前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。
安全與許可權
Android本身是一個許可權分立的作業系統。在這類作業系統中,每個套用都以唯一的一個系統識別身份運行(Linux用戶ID與群組ID)。系統的各部分也分別使用各自獨立的識別方式。Linux就是這樣將套用與套用,套用與系統隔離開。系統更多的安全功能通過許可權機制提供。許可權可以限制某個特定進程的特定操作,也可以限制每個URI許可權對特定數據段的訪問。
Android安全架構的核心設計思想是,在默認設定下,所有套用都沒有許可權對其他套用、系統或用戶進行較大影響的操作。這其中包括讀寫用戶隱私數據(聯繫人或電子郵件),讀寫其他套用檔案,訪問網路或阻止設備待機等。
安裝套用時,在檢查程式簽名提及的許可權,且經過用戶確認後,軟體包安裝器會給予套用許可權。從用戶角度看,一款Android套用通常會要求如下的許可權:
撥打電話、傳送簡訊或彩信、修改/刪除SD卡上的內容、讀取聯繫人信息、讀取日程信息,寫入日程數據、讀取電話狀態或識別碼、精確的(基於GPS)地理位置、模糊的(基於網路獲取)地理位置、創建藍牙連線、對網際網路的完全訪問、查看網路狀態,查看WiFi狀態、避免手機待機、修改系統全局設定、讀取同步設定、開機自啟動、重啟其他套用、終止運行中的套用、設定偏好套用、震動控制、拍攝圖片等。
一款套用應該根據自身提供的功能,要求合理的許可權。用戶也可以分析一款套用所需許可權,從而簡單判定這款套用是否安全。如一款套用是不帶廣告的單機版,也沒有任何附加內容需要下載,那么它要求訪問網路的許可權就比較可疑。