Android贏家密碼(二):觀點與實踐之軟硬整合開發
本文將介紹《Android贏家密碼》的第二部分:觀點與實踐之軟硬整合開發。以軟硬整合開發為例,介紹《Android贏家密碼》的觀點與實踐。
觀點與機會
大家都知道觀點(又稱視角)本身是沒有對錯的,但是觀點會影響人們的決策,而決策又會影響行為,然后產生不同的結果。因之,基于“贏家密碼”觀點而實踐策略,會帶來贏的機會;反之,則可能會錯失大好機會。
Android的三層API
在軟硬整合開發里,最主要的議題就是,如何讓底層硬件的創新性能或功能與上層應用程序(簡稱AP)的多樣化相匯合,關于這項議題,我在《Android贏家密碼》一書里,已經詳細敘述了,就不再重述了。
在Android平臺上,規劃上述軟硬整合實踐策略時,會涉及三層軟件接口(泛稱API),包括:
- 上層的Framework API:這是位于Java層的AP與框架(Framework)之間。
- 中層的JNI API:這是位于Java框架與C++層Android核心程序庫(Library)之間。
- 底層的HAL API:這是位于Android核心程序庫與硬件驅動程序(Driver)之間。
俗語說:橫看成嶺側成峰。意味著,事物本體只有一個,因為人人觀點不同而有不同面貌的呈現。蘇東坡《前赤壁賦》也寫道:“蓋將自其變者而觀之,則天地曾不能一瞬;自其不變者而觀之,則物與我皆無盡也,而又何羨乎?”即使同一個人,基于不同角度,觀察到的現象也不同,因為會影響到人生或其它事物的態度、策略、行為和結果。
古典IT的觀點
這個觀點是基于“平臺(Platform)”的概念,平臺概念讓人們聯想到房屋的地基,AP就是房屋,而平臺就是地基。其地位尊卑順序是:主人->AP->平臺,如下圖1所示:
圖1 古典IT觀點下的Android三層API
在這觀點下,其焦點在于:
- 底層都是提供服務給上層調用,一切以User好用為目標,也就是追求優質的用戶體驗(User or Client Experience)。
- API成為Façade的角色(可參考Façade Pattern),提供單一接口是實現優質用戶體驗的重要手段。
- User希望AP穩定不變,AP希望Java框架不變,Java框架期待C/C++模塊不變,C/C++模塊期待底層的硬件驅動穩定不變。人人都期待腳底下的“平臺”是不變的。
中國傳統的觀點
如果將Android里的三層API對應到中國清朝時期的三層城墻:萬里長城、北京城和紫禁城。將可以讓我們擺脫古老的IT觀點,而得到新潮的觀點:中國永恒的智慧 + Android平臺->贏家的軟硬整合策略。這非常接近清代大臣張之洞所提倡的“中學為體,西學為用”觀點。于是,得到下圖:
圖2 Android平臺里的三層API
茲比較圖1與圖2:
- 地位尊卑順序相反。在圖1里,愈上層的地位愈高。反之,在圖2里,愈底層的地位愈高(例如皇帝居住于紫禁城內)。
- 行為決策相反。采取圖1觀點的國度,人人爭先恐后去做 AP,因為(誤認為)AP的地位最高。反之,采取圖2觀點的國度,人人爭先恐后去做框架和API,因為(真正)地位最高,必須建造API(城墻)避免敵人來爭奪。
- 建API成為最大贏家。Google、微軟等公司采取圖2觀點,微軟于2001年推出.NET框架;Google于2007年推出Android框架;兩者都成為IT業武林盟主。
- API讓底層先獲利。基于圖2的觀點,愈底層的地位愈高,萬里長城讓觀內居民先獲利(不是塞外先獲利)。所以臺灣宏達電(HTC)公司專注于開發Android底層硬件和驅動軟件(關內部分),成為全球獲利最大的Android手機廠商。
以POS系統開發為例——現實的POS情境和需求
POS軟硬整合產品必須賣給業主(如大賣場的商家)。由于商家是做生意的人,不會設計賣場專用的POS應用程序(例如,將POS結帳款項送往ERP系統)。所以,POS產品廠商就委托各地區或城市的當地應用軟件開發商去幫助業主開發其專用的應用軟件(簡稱AP)。于是,POS產品廠商就成為強龍,而全球各地區的AP開發者成為地頭蛇,這<強龍/地頭蛇> 合作模式能提供給業主最佳的服務。例如,筆者就曾經擔任NCR公司在臺灣的地頭蛇,服務臺灣當地的銀行POS應用軟件系統。
過去,都是洋人企業扮演強龍角色,國內本地企業扮演地頭蛇角色。如今,隨著本地內需市場的急速成長,提供給本地企業躍居強龍地位的大好機會。所以,本文不是敘述如何解決業主的需求,而是說明除了解決業主需求之外,又如何替POS產品(或手機)廠商設計出強龍系統架構,以即規劃出其實現步驟。
第一步:從古典IT觀點出發
在上一篇文章里,已經說明了古典IT觀點的基本架構。現在,就來厘清它的兩項基本流程:請求流程(Request Flow)和服務流程(Service Flow)。如下圖1 所示:
圖3 古典IT觀點下的兩項基本流程
在這觀點下,并不太重視另一項流程,就是命令流程(Command Flow)。甚至很多人認為圖里的請求流程就是命令流程。由于命令的來源是業主或AP(如古代的員外),讓底層POS產品廠商成為長工,就無法實現其強龍的夢想了。
第二步:加上命令流程(Command Flow)
這是基于上一篇文章里的新潮觀點,基于這個觀點,就能凸顯出命令流程的重要性,以及其流動方向。如下圖2所示:
圖4 新潮觀點所凸顯的命令流程
大家都知道命令的來源是紫禁城內,流向北京城外,再流到長城之外。于是,將上圖1和圖2整合起來就是新潮觀點下的三項主要流程。
第三步:設立關口傳達命令
為了確保紫禁城內清朝皇帝的強龍主導地位,必然會最第一道防線(即萬里長城)設立關口,并重兵駐守,成為具有高度主導性的接口,例如山海關、居庸關等。這種主導性關口,就是筆者在《Android贏家密碼》一書所說的“主動型API”。唯有主動型的API(或稱接口,或稱關口)才能確保命令的傳遞和執行。如下圖3所示:
圖5 山海關、居庸關就是主動型API
在這觀點下,業主(或用戶)和AP是在塞外,是要服從命令的,在直覺上對用戶體驗并不會有所貢獻。然而,因為硬件(如宏達電HTC手機或聯迪POS)產品廠商位居紫禁城內,擁有強龍地位,其“強龍體驗”的滋味是美好的。過去,軟件開發人員一味地追求提升用戶(地頭蛇)體驗,未能提升軟件人員本身的地位。如今,軟件開發人員除了提升用戶體驗之外,也關注于提升底層硬件廠商的強龍體驗。基于這種新觀點,讓臺灣的宏達電公司成為最賺錢的公司,其HTC手機也創造極佳的用戶體驗,至今(2011年)銷售量全球第一,同樣地臺灣Android相關軟件人員也因而獲利。這說明了這個新潮觀點,的確能創造“硬件廠商、手機用戶、軟件人員”三贏的局勢。其將業主和 AP視為塞外,并將用戶體驗降到第二順位;反而大幅提升了用戶體驗。這就是筆者在《Android贏家密碼》一書所說的“神秘力量之一”。
第四步:實現軟件關口(即框架API)
具有主導性(或防御性)的關口,就是主動型(即主導性)的API。在軟件上,其實現機制是極為簡單的概念:基類(Base Class),又稱為父類(Super Class)。如下圖3所示:
圖6 軟硬整合系統的山海關等關口
軟件關口就是Java或C++語言的基類,是每一位軟件開發人員都具備的基本技能。
結語
俗語說:不為也;非不能也。如今,為何洋人喜歡撰寫框架基類、掌握框架API,位居強龍;而我們身邊的大多數軟件開發人員,還是擁抱著古典IT觀點、孜孜不倦撰寫AP子類,一未追求用戶體驗呢? 換個觀點而已,做法非常簡單;只是不去做,并非不會做。由于底層硬件功能是整體系統服務的源頭,也是提升用戶體驗的源頭;唯有采取中國固有的新潮觀點,讓底層硬件服務視為九五至尊的強龍地位,才能真正實現好的用戶體驗,并帶給軟件開發人員極佳的獲利機會。
關于作者
高煥堂,臺灣軟件架構設計大師,從事IT行業近30年,被稱為“臺灣OO技術教父級代表人物”。現任MISOO軟件開發與管理顧問公司首席架構師,編著過十余本軟件技術相關書籍。
【編輯推薦】