2012年10月25日 星期四

把玩"魔術師"

把玩"魔術師"

This document is provided as is. You are welcomed to use it for non-commercial purpose.
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu

請勿轉貼


目錄

  1. 編譯 AOSP 2.1 (Eclair) 原始碼
  2. 編譯 AOSP 2.2 (Froyo) 原始碼

大概是在 2009 年的 7 月買了人生第一部 Android 手機 -- HTC Magic,買它的原因 不外乎當初玩 Unix/Linux 的情形類似,因為畢竟 Android 的核心還是 Linux, 而且開發應用程式的程式語言是 Java(看的懂得人,不要暗笑,會內傷 ;-) )。 買了之後,玩了一陣子,也試著開發 一些小程式,算是滿意的;可是隨著 Google 不斷的推出,不到一年的時間,Android 的版本快速的從 1.5,發展到 2.2,甚至有傳言 2010 年的 10 月 Google 會推出 3.0 。 (其實這樣快速的大變動,是好的嗎?如果從企業經營的資訊策略 來看,會有什麼影響?要不要慢一點?) 這樣的發展,有什麼影響,目前還不能一探全貌,但是對我來說有下列幾點感想:

  1. 手機這種消費性電子產品的變化,居然比電腦還快。不論是作業系統(應該沒看 過在個人電腦的作業系統能有四次重大改變:在一年內版本從 1.5、1.6、2.1、到 2.2 都已經是穩定版,況且我還故意漏掉不常被討論的 2.0),應用程式(看看報導 Android 的軟體量已經快要超過 iPhone),還是價格(唉,當初買的時候超過 2 萬, 現在已經在市面上看不到了);

  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 逐漸投入服務平台了。
  3. 雖然 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。

Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu







沒有留言:

張貼留言