郄小明 閆江華
(中國電子科技集團公司第五十四研究所 河北省石家莊市 050081)
近年來,隨著移動互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,智能終端已經(jīng)成為生活和工作中不可或缺的重要工具,向用戶提供針對不同應(yīng)用場景需求的高效應(yīng)用[1]。同時,智能終端的操作系統(tǒng)種類也越來越多,主要包括IOS、Android、Windows Phone 等,國產(chǎn)移動操作系統(tǒng)如TDOS、元心、麒麟等。一款移動應(yīng)用需要同時覆蓋以上幾種平臺,則必須要針對不同的平臺分別進行研發(fā)[2],這就帶來了移動應(yīng)用開發(fā)復(fù)雜、開發(fā)周期長、開發(fā)效率低、風(fēng)格統(tǒng)一困難和運維成本大等諸多問題。針對這種情況,滿足“一次開發(fā),多個平臺使用”的應(yīng)用跨平臺開發(fā)技術(shù)成為開發(fā)者的理想選擇。
本文通過移動應(yīng)用的對比分析,提出了一種跨平臺應(yīng)用開發(fā)架構(gòu),以滿足通用及特定場景下應(yīng)用需求,并對未來移動應(yīng)用的發(fā)展提出自己的看法。
目前應(yīng)用程序主要分為三類:原生應(yīng)用(Native App)、網(wǎng)頁應(yīng)用(Web APP)和混合模式移動應(yīng)用(Hybrid App)。原生應(yīng)用即開發(fā)者采用操作系統(tǒng)所提供的一套標(biāo)準(zhǔn)接口,不同的操作系統(tǒng)會提供不同的開發(fā)語言與標(biāo)準(zhǔn)接口,原生應(yīng)用有很強的交互性和可拓展性;網(wǎng)頁應(yīng)用指采用Html5 語言寫出的生存在瀏覽器中的應(yīng)用;混合應(yīng)用指半原生半Web 的混合類應(yīng)用,由原生提供統(tǒng)一的API給JavaScript 調(diào)用,實際的主要邏輯有Html 和JavaScript 來完成,最終是放在Webview 中呈現(xiàn),只需要寫一套代碼即可達到跨平臺效果[3]。三類應(yīng)用對比如表1所示。
綜合分析,混合應(yīng)用兼具原生應(yīng)用擁有良好交互體驗的優(yōu)勢和網(wǎng)頁應(yīng)用跨平臺的優(yōu)勢[4],一方面,開發(fā)者可以充分利用現(xiàn)代移動設(shè)備所提供的全部不同的特性和功能;另一方面,使用 Web 語言編寫的所有代碼都可以在不同的移動平臺之間共享,使得開發(fā)和日常維護過程變得集中式、更簡短、更經(jīng)濟高效。
借鑒混合應(yīng)用開發(fā)的思想和優(yōu)勢,本文提出一種支持跨平臺的應(yīng)用架構(gòu),如下圖所示。應(yīng)用采用分層設(shè)計思想,每層負責(zé)不同的職能,自底向上分為系統(tǒng)層、中間層和呈現(xiàn)層。移動終端跨平臺應(yīng)用開發(fā)方向主要分為網(wǎng)絡(luò)應(yīng)用開發(fā)和本地應(yīng)用開發(fā),針對方向的差別使用不同的編程語言[5]。從開發(fā)人員角度分析,開發(fā)語言可分為“美工”、“前端編程語言”和“后臺編程語言”三大類。 呈現(xiàn)層對應(yīng)“美工”和“前端編程語言”,處理本地應(yīng)用部分,重點關(guān)注應(yīng)用界面的美觀性和用戶體驗。中間層對應(yīng)“后臺編程語言”,處理網(wǎng)絡(luò)應(yīng)用和本地應(yīng)用部分,重點設(shè)計應(yīng)用整體結(jié)構(gòu),使應(yīng)用可以運行在操作系統(tǒng)之上。開發(fā)人員可以根據(jù)每層需求,選擇專用語言開發(fā),從而解決開發(fā)手段復(fù)雜多樣的問題。如圖1。
表1
圖1
圖2
系統(tǒng)層具備原生系統(tǒng)的功能調(diào)用,主要包括了手機相冊、通訊錄、攝像頭、地理位置、網(wǎng)絡(luò)狀態(tài)等一些手機本地調(diào)用處理等,原生系統(tǒng)如Android、IOS、元心和TDOS 等操作系統(tǒng)。
中間層包括技術(shù)框架和開放服務(wù)兩部分。技術(shù)框架是開發(fā)者根據(jù)應(yīng)用場景選擇的技術(shù)平臺,如VUE,對呈現(xiàn)層提供豐富的UI組件,同時把系統(tǒng)層一些原生功能進行二次封裝,對上提供統(tǒng)一JavaScript 調(diào)用。開放服務(wù)指開發(fā)者根據(jù)業(yè)務(wù)需求構(gòu)建的具備特定功能的SDK。
主流的跨移動平臺方式包含跨平臺引擎驅(qū)動和跨平臺應(yīng)用編譯。開放服務(wù)重點采用C/C++語言實現(xiàn),目前各移動操作系統(tǒng)均支持C/C++語言開發(fā)的第三方庫,開發(fā)者重點解決不同操作系統(tǒng)下開放服務(wù)的編譯問題,以此滿足跨平臺要求。
下面提出一種面向C/C++的通用SDK 服務(wù)架構(gòu)。如下圖所示,自底向上分為支撐層、組件層、邏輯處理層和接口抽象層。如圖2所示。
(1)支撐層支持多種操作系統(tǒng)環(huán)境下的統(tǒng)一抽象接口操作,屏蔽操作系統(tǒng)在C/C++層差異,使組件層軟件與底層的操作系統(tǒng)實現(xiàn)分離,降低操作系統(tǒng)對軟件開發(fā)和維護的影響。
(2)組件層包含如JSON 組解、日志、存儲等通用組件,ZMQ、SIP、HTTP 等通信組件,媒體處理等擴展組件,也可以支持其他C/C++組件。這些組件屏蔽內(nèi)部實現(xiàn)細節(jié),對邏輯處理層提供便捷的開發(fā)API。
(3)邏輯處理層根據(jù)具體業(yè)務(wù)需求,調(diào)用組件層API 接口進行相關(guān)業(yè)務(wù)組合處理,并對接口抽象層提供統(tǒng)一API,如通過組合SIP、HTTP 協(xié)議組件,實現(xiàn)如即時消息、狀態(tài)呈現(xiàn)、和文件傳輸?shù)冉y(tǒng)一通信業(yè)務(wù)。
(4)接口抽象層突破傳統(tǒng)API 調(diào)用方式,實現(xiàn)前臺呈現(xiàn)與開放服務(wù)的解耦,將邏輯處理層提供API 封裝,對前臺呈現(xiàn)提供統(tǒng)一編程可擴展的JSON 格式的JavaScript 調(diào)用接口;同時將前臺呈現(xiàn)調(diào)用的JSON 接口解析,調(diào)用邏輯處理層API 實現(xiàn)相應(yīng)功能。JSON 數(shù)據(jù)格式具有相對簡單、易封裝解析、擴展性強、讀寫效率高、解析庫多等諸多優(yōu)點,為呈現(xiàn)層與開放服務(wù)之間提供高效的交互方式。
基于C/C++的第三方組件豐富多樣,開發(fā)者也可根據(jù)功能需求不斷調(diào)整,選擇并開發(fā)所需組件及業(yè)務(wù)處理邏輯,使得開放服務(wù)具備良好的復(fù)用性和擴展性。
混合應(yīng)用按照混合模式可分為重架構(gòu)混合模式和輕架構(gòu)混合模式?!爸鼗臁奔軜?gòu)依賴Native UI 的混合框架,按照“Web 不夠,就Native 來湊”的核心思路,提升交互體驗,但也帶來了顯著缺點:Web 和Native 技術(shù)的交叉混雜讓開發(fā)者的編程和調(diào)試都很不方便,也無法滿足跨平臺要求。“輕混”架構(gòu)堅持UI 部分必須用純Web技術(shù),完全采用H5 技術(shù);在底層的設(shè)備接口上,JavaScript 無法完成的原生部分,可以采用Native 技術(shù)來彌補,也必須堅持Native技術(shù)不去侵入UI?!拜p混”架構(gòu)才是真正的HTML5 應(yīng)用架構(gòu),在技術(shù)上更輕量、成本更低、也更容易推廣,真正做到只需一次開發(fā)跨平臺發(fā)布,是混合應(yīng)用技術(shù)發(fā)展的必然方向。
按照“輕混”架構(gòu)設(shè)計理念,呈現(xiàn)層采用純Web 技術(shù)實現(xiàn),呈現(xiàn)邏輯由Html 和JavaScript 完成,最終在WebView 中顯示。通過調(diào)用開放服務(wù)提供的接口實現(xiàn)與后臺服務(wù)器、與其他應(yīng)用之間的交互,并完成相關(guān)數(shù)據(jù)的本地存儲。從開發(fā)層面實現(xiàn)“一次開發(fā),多處運行”的機制,成為真正適合跨平臺的開發(fā)。
大多數(shù)的移動應(yīng)用會依賴于后臺的Web 服務(wù)來實現(xiàn)大部分的業(yè)務(wù)邏輯,對網(wǎng)絡(luò)依賴嚴重。該架構(gòu)可以將功能相關(guān)業(yè)務(wù)邏輯在本地開放服務(wù)中實現(xiàn),呈現(xiàn)業(yè)務(wù)所需媒體文件封裝到App 代碼中,存儲在設(shè)備本地。從而避免對網(wǎng)絡(luò)環(huán)境的依賴,實現(xiàn)特定場景無網(wǎng)絡(luò)環(huán)境下混合應(yīng)用的使用。采用該架構(gòu)呈現(xiàn)層開發(fā)者只需掌握Web相關(guān)技術(shù)即可,中間層開發(fā)者只需掌握開放服務(wù)相關(guān)技術(shù),降低了同一款應(yīng)用開發(fā)者需針對多個平臺掌握多種開發(fā)技術(shù)的復(fù)雜度。
混合模式開發(fā)的移動應(yīng)用相對原生應(yīng)用而言依然存在不足,HTML5 在調(diào)用終端硬件方面的能力還不是很強,同時受限于WebView的渲染效率,體驗稍有欠缺,同時在應(yīng)用調(diào)試、視頻編解碼、跨平臺兼容性等方面還存在問題。開發(fā)者必須充分利用HTML、CSS 和JavaScript 三個技術(shù),做好相應(yīng)優(yōu)化,才可構(gòu)建具有良好用戶體驗的應(yīng)用,這也對開發(fā)者也提出相應(yīng)的技術(shù)要求。
隨著移動終端的不斷發(fā)展,移動終端跨平臺應(yīng)用開發(fā)逐漸成為開發(fā)者的設(shè)計目標(biāo)。伴隨終端硬件處理能力、Web 技術(shù)、系統(tǒng)開放性等不斷發(fā)展,以Web 為主的混合應(yīng)用終將成為移動終端應(yīng)用發(fā)展的主流模式,使用戶可以以更快捷、更低成本的方式來享受各類應(yīng)用提供的服務(wù)。