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