把玩"魔術師"
This document is provided as is. You are welcomed to use it for non-commercial purpose.
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
請勿轉貼
目錄
- 編譯 AOSP 2.1 (Eclair) 原始碼
- 編譯 AOSP 2.2 (Froyo) 原始碼
- 製作自創的 ROM
- 自製第一個開機畫面
- 製作自創的開機動畫
大概是在 2009 年的 7 月買了人生第一部 Android 手機 -- HTC Magic,買它的原因
不外乎當初玩 Unix/Linux 的情形類似,因為畢竟 Android 的核心還是 Linux,
而且開發應用程式的程式語言是 Java(看的懂得人,不要暗笑,會內傷 ;-) )。
買了之後,玩了一陣子,也試著開發
一些小程式,算是滿意的;可是隨著 Google 不斷的推出,不到一年的時間,Android
的版本快速的從 1.5,發展到 2.2,甚至有傳言 2010 年的 10 月 Google 會推出 3.0 。
(其實這樣快速的大變動,是好的嗎?如果從企業經營的資訊策略
來看,會有什麼影響?要不要慢一點?)
這樣的發展,有什麼影響,目前還不能一探全貌,但是對我來說有下列幾點感想:
- 手機這種消費性電子產品的變化,居然比電腦還快。不論是作業系統(應該沒看
過在個人電腦的作業系統能有四次重大改變:在一年內版本從 1.5、1.6、2.1、到 2.2
都已經是穩定版,況且我還故意漏掉不常被討論的 2.0),應用程式(看看報導
Android 的軟體量已經快要超過 iPhone),還是價格(唉,當初買的時候超過 2 萬,
現在已經在市面上看不到了);
- 這個變化,連 HTC 也沒辦法(或者不願意)跟上,所以到目前為止 Magic 的
官方版還是 1.5,感覺上 Magic 已經是一個石器時代的產物,可是 HTC 該為它不斷
更新升級嗎?大家都知道網路對消費行為的改變很大,但是這個
改變已經結束了嗎?我不認為結束了。以前手機就是手機,可是它現在已經慢慢變成
一個行動運算裝置〔電腦?〕,這個思維的改變 HTC 能坐視不管,仍然認為自己是
"手機製造商"嗎?HTC 創造了 Sense UI 並利用它成為"產品區隔"的利器,可是 Google
造成的快速變化,Sense UI 對於 HTC 來說,它還是利器嗎?還是絆腳石?HTC 的
資訊策略該怎麼做?
- (09/16/2010 Update) 根據 Engadget 的報導,
HTC 在推出新手機 Desire HD 和 Desire Z 的同時,也宣佈成立 HTCSense.com,似乎
HTC 逐漸投入服務平台了。
- 雖然 HTC 目前沒有幫 Magic 升級的計畫,可是因為 Android 是屬於開放原始碼
的產品,許多專家(應該稱之為 hackers)已經幫它準備好了"越獄"方式(出自 iPhone
相關報導的用詞),並提供各式各樣的 ROMs 讓有興趣的網友自行享用。在一些網路論壇
上還可以看到不少網友把才剛剛買來的 HTC Desire 越獄並安裝 2.2 版的 ROM(目前
官方給 Desire 的版本是 2.1,雖然歐洲版已經可以升級 2.2 了)。有了這些越獄法
以及各式好用的 ROMs,我不會心動嗎?買新手機之前,消費者
會不會把這種"可能性"列入選購的標準之一?如果我能夠不斷的升級更新,我還願意掏錢
購買新機嗎?
- (09/06/2010 Update) 一個令人吐血不止的消息:Rogers Magic+
公開升級 Android 2.1!啊?什麼?Rogers 是加拿大的電信商,類似台灣的中華電信,
而 Magic+ 其實也就是台灣版的 Magic,也就是本文探討的主角;也就是說,加拿大的
使用者已經可以將 Magic 免費更新為 2.1 版了;那台灣哩?根據官方回覆:目前
沒有升級計劃。這個消息讓我非常的不滿意 HTC 的營運策略,才一年多,而且是
高價購買的手機,一年多一點點就被遺棄了,比電腦的耗損還快,況且"為什麼加拿大
使用者可以升級,台灣使用者卻不行?","不平則鳴"。一邊不爽,一邊等著,讓我們
在持續觀察明年 Desire 的使用者會不會也出現這種情形?其他廠商是否也是如此
對待它的客戶?策略、策略!
我大概是 2010 年 5、6 月間幫我的魔術師越獄的,並刷了新 ROMs,那種新鮮感,簡直
衝昏頭了,見了一個新 ROM 就刷一個。可是慢慢的,新鮮感退燒了,我總不能一天到晚
刷機,然後擔心會不會某個功能不穩定(我常碰到的是相機功能不穩定,有些版本會
收不到簡訊),所以最近又把手機刷回官方版的 ROM,雖不滿意,但是常用的功能穩定。
刷機的狂熱逐漸退燒之際,心理又冒出了一個念頭:以後換機之後,我還能拿 Magic
作什麼?逛了逛網站之後,決定想到自己編譯 Android 核心;一旦成功,下一步就是
作自己要的 ROM(xda 常用的名詞為 cook)。
在一邊學習編譯,一邊試圖釐清每一個步驟之間的關係,Android 的架構圖突然
就在我的腦海浮現了。Android 的架構圖已經看過了數次,但是就是這個時候
才突然真正了解了,以下的架構圖取自於 http://developer.android.com/guide/basics/what-is-android.html,幾個我們會解釋的部分利用顏色框起來:
編譯的過程,主要分成兩個大步驟,一個步驟是編譯 Android 的 kernel,也就是
藍色框框包起來的部分,最後產生的檔案是 boot.img;另一個步驟是
編譯 Android 的平台,也就是土黃色框框包起來的部分,最後產生的檔案是
system.img。圖中除了深藍色的部分
是以 Java 開發的之外,其他都是在 Linux 環境下,以手機的 CPU 結構(魔術師
是 Qualcom MSM7200a 的 CPU)去編譯出來的程式。
從另一個角度來看,Java 的程式是跨平台的,所以理論上來說,不論是編譯給
HTC Desire 的、SonyErricson XT70x 的、還是 Motorolla 的 X10 的,都可以
使用。其它綠色、黃色、以及紅色的部分也可以這樣嗎?理論上來說,在編譯
過程中,我們必須指定 ARCH=arm 來編譯出屬於該 CPU 架構的程式碼,
所以說,理論上只要這些元件當初是編譯給 arm 來使用的,這些元件應該可以使用,
比較需要注意的是紅色的部分,那裡大多數是
硬體的驅動程式,而每一部手機的硬體規格都略有不同,因此我大膽的推測
(很可能是錯的):未來手機製造商開發上比較麻煩的是 Linux Kernel 的
部分,只要這個部分解決,其他的部分應該相對簡單。那麼未來 Android 手機的
競爭點究竟在哪裡呢?第一個是傳統競爭點 -- 硬體規格;第二個,我個人
認為就是最上層的 Applications。這個可以從 HTC 導入 Sense UI,以及最近
成立 Htcsense.com 可以看出,HTC 的思維模式跟我的想法類似。
Android 架構中,每一個層次之間的關係大概如下:手機執行 Application 的時候,
該 application 會呼叫(或稱之為利用) Application Framework 的元件,而
這些元件是利用 Libraries 來跟包在 Linux Kernel 的驅動程式溝通並請求其
完成要求。以 HTC 的中文手寫輸入 HTC_CIME 為例,它是一個 Application,
它必須藉助 Application Framework 以及 Libraries 中的元件,請觸控面板
把使用者寫進去的字顯示在螢幕上。這樣的設計有一個好處,那就是只要我們
有一個支援硬體的 Kernel,上層的東西就可以不斷的更新;例如,我在編譯過程,
曾經使用 HTC 給 1.5 版用的 2.26.27 的 kernel 加上 Android 2.2 的平台
可以在 Magic 上執行基本的工作;因此,我相信使用更新的 kernel(2.26.29)
更能正確的使用 Android 2.2 的平台。
最後一個我觀察到的有趣現象是:在學校教書,我們總是提醒學生在設計系統時
要記得元件和元件之間要 decoupling,以便於維護。但是,在我把玩魔術師的這一段
時間,我發現 HTC 的實際作法卻不是這樣,元件與元件之間總是"藏"有一定的
關聯,讓你在修改的過程中,老是遇到一些奇奇怪怪的現象。這個或許是 HTC
的策略之一,不讓競爭對手能夠很快速的模仿!等到我把 cook 相關的教材完成
後,我會再次投入 apk 的開發,這可能是改機的 last mile。
Last Updated: Monday, 25-Oct-2010 18:19:36 CST
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu