1 引言
隨著手機(jī)功能的迅速發(fā)展,越來(lái)越多手機(jī)上的軟件功能已經(jīng)和個(gè)人計(jì)算機(jī)上的軟件功能非常相近,。因此,,手機(jī)也需要功能更加強(qiáng)大的操作系統(tǒng)作為支持。
基于Linux 操作系統(tǒng)的手機(jī)軟件平臺(tái),,已經(jīng)被認(rèn)為是下一代手機(jī)軟件平臺(tái),。
當(dāng)前,已經(jīng)有很多手機(jī)開(kāi)發(fā)商開(kāi)始采用手機(jī)軟件平臺(tái),。但是,,手機(jī)軟件平臺(tái)在提供可靠的手機(jī)操作系統(tǒng)和優(yōu)質(zhì)軟件的同時(shí),需要花費(fèi)大量的時(shí)間,、人力,、財(cái)力進(jìn)行創(chuàng)建。原始的手機(jī)軟件平臺(tái)開(kāi)發(fā)方式不僅效率低,,而且對(duì)開(kāi)發(fā)人員的技術(shù)水平的要求較高,,需要經(jīng)過(guò)大量的培訓(xùn)才能勝任,這必然會(huì)增加產(chǎn)品的開(kāi)發(fā)成本,。手機(jī)開(kāi)發(fā)商們正在為創(chuàng)建屬于自己的下一代手機(jī)軟件平臺(tái)尋找更加方便,、高效的方法。
2 基于Linux的手機(jī)軟件平臺(tái)
個(gè)人計(jì)算機(jī)因?yàn)閾碛胁僮飨到y(tǒng)以及運(yùn)行于操作系統(tǒng)之上的軟件,,而具有豐富的功能,。同樣,手機(jī)也在提供不斷豐富的功能,,需要強(qiáng)大的操作系統(tǒng)和軟件作為支持,。與其它操作系統(tǒng)相比,采用開(kāi)放源代碼的Linux 操作系統(tǒng)作為手機(jī)操作系統(tǒng)能夠大大降低手機(jī)開(kāi)發(fā)成本,。開(kāi)放源代碼的另一個(gè)好處是允許手機(jī)生產(chǎn)商根據(jù)實(shí)際情況,,有針對(duì)性地開(kāi)發(fā)適合自己手機(jī)的Linux 操作系統(tǒng),這樣既能讓自己的產(chǎn)品有特色,,又能避免受制于人,,還能夠滿(mǎn)足用戶(hù)多方面的應(yīng)用需求。
手機(jī)軟件平臺(tái)的概念可概括為:
(1) 手機(jī)軟件平臺(tái)基于一定的硬件架構(gòu)之上,,特定的軟件平臺(tái)一般只能用于特定廠(chǎng)商的硬件體系,;
(2) 手機(jī)軟件平臺(tái)提供對(duì)應(yīng)用程序的基礎(chǔ)支持;
(3) 手機(jī)軟件平臺(tái)自帶一些應(yīng)用,;
(4) 手機(jī)軟件平臺(tái)能夠方便的進(jìn)行擴(kuò)展,,手機(jī)軟件開(kāi)發(fā)者能夠在平臺(tái)上方便的建立新的功能,這也是最重要的功能之一,。
手機(jī)軟件平臺(tái)架構(gòu)在手機(jī)操作系統(tǒng)之上,,通過(guò)抽象層與不同操作系統(tǒng)進(jìn)行集成,。一個(gè)完整的軟件平臺(tái)主要包括中間件、系統(tǒng)抽象層,、關(guān)鍵應(yīng)用軟件和SDK(Software Developers Kit)開(kāi)發(fā)環(huán)境,。軟件平臺(tái)不能取代操作系統(tǒng)。但是就應(yīng)用軟件來(lái)說(shuō),,可以在軟件平臺(tái)上直接開(kāi)發(fā),,這也是手機(jī)軟件平臺(tái)的一個(gè)重要應(yīng)用。
手機(jī)生產(chǎn)商之間的競(jìng)爭(zhēng)越來(lái)越激烈,,新產(chǎn)品層出不窮,,面對(duì)新的市場(chǎng)要求,只要在已有平臺(tái)上加以擴(kuò)展,,就能很快推出新的手機(jī)產(chǎn)品,,在競(jìng)爭(zhēng)中取得優(yōu)勢(shì)。
3 平臺(tái)創(chuàng)建工具開(kāi)發(fā)背景
3.1 手機(jī)軟件平臺(tái)開(kāi)發(fā)現(xiàn)狀
手機(jī)的整個(gè)開(kāi)發(fā)流程如圖1 所示,,其中手機(jī)軟件的開(kāi)發(fā)包括創(chuàng)建平臺(tái)和產(chǎn)品開(kāi)發(fā)兩部分。
圖1 手機(jī)開(kāi)發(fā)流程
創(chuàng)建手機(jī)軟件平臺(tái)是一個(gè)龐大的工程,,需要構(gòu)建很多功能部件,,每一個(gè)功能部件都獨(dú)立存在,但又相輔相成,,需要多方的協(xié)同合作共同完成,,整套流程需要很長(zhǎng)時(shí)間。
目前做完全構(gòu)建的實(shí)際情況是,,對(duì)一個(gè)功能部件做一次完全構(gòu)建一般需要3 個(gè)小時(shí)以上,,開(kāi)發(fā)人員只有等待構(gòu)建完成才能進(jìn)行下一步的工作。在理想情況下,,3 小時(shí)后構(gòu)建成功,,并且測(cè)試通過(guò)。但一般情況下,,由于源代碼的問(wèn)題,,構(gòu)建經(jīng)常在進(jìn)行過(guò)程中半途失敗,需要修改源代碼重新進(jìn)行構(gòu)建,。即使構(gòu)建成功,,如果在測(cè)試過(guò)程中發(fā)現(xiàn)問(wèn)題,又要進(jìn)行代碼修改,,然后重新進(jìn)行構(gòu)建,,如此反復(fù)數(shù)遍。對(duì)于經(jīng)驗(yàn)不足的開(kāi)發(fā)人員,,或者處在一個(gè)功能部件開(kāi)發(fā)的初期,,這種重新構(gòu)建的出現(xiàn)頻率會(huì)大大提高,,這將浪費(fèi)大量的精力,工作效率也會(huì)大幅下降,。任何一個(gè)功能部件的修改對(duì)整個(gè)平臺(tái)都會(huì)造成影響,,需要對(duì)整個(gè)平臺(tái)重新進(jìn)行建構(gòu),面對(duì)競(jìng)爭(zhēng)越發(fā)激烈的市場(chǎng),,這將增加產(chǎn)品的開(kāi)發(fā)成本,、增長(zhǎng)開(kāi)發(fā)周期。
未來(lái)手機(jī)產(chǎn)品競(jìng)爭(zhēng)最核心的是軟件平臺(tái),,并將成為一些大的手機(jī)品牌的最后競(jìng)爭(zhēng)領(lǐng)域,。Linux 操作系統(tǒng)作為一個(gè)免費(fèi)開(kāi)源系統(tǒng),Linux 手機(jī)軟件平臺(tái)在降低手機(jī)生產(chǎn)商研發(fā)成本,、提高新品上市響應(yīng)時(shí)間,、實(shí)現(xiàn)產(chǎn)品個(gè)性化設(shè)計(jì)三個(gè)方面表現(xiàn)尤為突出。Linux 手機(jī)軟件平臺(tái)已成為眾多資深專(zhuān)家和手機(jī)生產(chǎn)商認(rèn)定的下一代手機(jī)軟件平臺(tái),,有著廣闊的發(fā)展前景,。
3.2 RPM 軟件包管理。
一個(gè)解決現(xiàn)狀的方法是使用軟件包管理方式,。包管理系統(tǒng)由包括程序,、數(shù)據(jù)、文檔,、配置信息的眾多文件組成,,它們存儲(chǔ)在一個(gè)特殊的格式文件--包文件中?;诎南到y(tǒng)集成和發(fā)行,,已經(jīng)廣泛應(yīng)用于當(dāng)代的Linux 發(fā)行商。目前兩個(gè)最流行的包管理方法是Red Hat 的RPM (Red Hat Package Manager)和Debian 的dpkg.
RPM 軟件包管理是開(kāi)發(fā)打包系統(tǒng),,任何人都可以使用,。對(duì)于終端用戶(hù),RPM 提供了很多功能,,使得軟件的維護(hù)遠(yuǎn)比以前容易,。通過(guò)簡(jiǎn)短的命令就可完成RPM 包的安裝、卸載和升級(jí),,所有雜亂的細(xì)節(jié)都經(jīng)過(guò)了處理,。 RPM 對(duì)已經(jīng)安裝的包及文件形成的數(shù)據(jù)庫(kù)進(jìn)行維護(hù),可以在系統(tǒng)上使用功能強(qiáng)大的查詢(xún)和校驗(yàn)功能[1].一個(gè)RPM 包中的應(yīng)用程序,,有時(shí)除了自身所帶的附加文件保證其正常運(yùn)行以外,,還需要其它特定版本的文件作為支持,這就是軟件包的依賴(lài)關(guān)系[2].
使用RPM 管理軟件后,,軟件的安裝流程如圖2 所示,。
圖2 使用RPM 的軟件安裝流程圖。
4 平臺(tái)創(chuàng)建工具開(kāi)發(fā)背景
經(jīng)過(guò)十多年的發(fā)展,,基于Linux 的開(kāi)發(fā)已經(jīng)不再是最開(kāi)始對(duì)所有內(nèi)容進(jìn)行構(gòu)建的時(shí)代,。在桌面領(lǐng)域,Linux 已經(jīng)成為一個(gè)擁有成熟的軟件構(gòu)建區(qū)塊和綜合工具的開(kāi)發(fā)系統(tǒng),。然而,,在嵌入式領(lǐng)域,在將傳統(tǒng)的原始數(shù)據(jù)驅(qū)動(dòng)開(kāi)發(fā)模式轉(zhuǎn)換為新的基于包的開(kāi)發(fā)模式方面,,Linux 操作系統(tǒng)還存在一些差距,。
原始數(shù)據(jù)驅(qū)動(dòng)開(kāi)發(fā)模式的主要問(wèn)題在于,它沒(méi)有一個(gè)有效的方法去控制功能部件之間的分界,,這會(huì)導(dǎo)致功能部件代碼之間的依賴(lài)超過(guò)了API (ApplicationProgramming Interface),,最終會(huì)使整個(gè)平臺(tái)功能部件間的關(guān)系變得更加復(fù)雜。這些復(fù)雜的功能部件將堆積在平臺(tái)源代碼中,,使以后的識(shí)別和修改更困難,。經(jīng)過(guò)多年的發(fā)展,整個(gè)軟件平臺(tái)都將難以進(jìn)行擴(kuò)展,、剪裁和定制,,以適應(yīng)產(chǎn)品改變的需要。
由于手機(jī)生產(chǎn)商已經(jīng)確認(rèn)將Linux 作為下一代手機(jī)軟件平臺(tái),,基于Linux 的手機(jī)產(chǎn)品功能開(kāi)發(fā)將成為一個(gè)主流。為了讓開(kāi)發(fā)得以實(shí)現(xiàn),,需要建立一個(gè)合理的綜合開(kāi)發(fā)環(huán)境,,其中包括整套的開(kāi)發(fā)流程和開(kāi)發(fā)工具,其關(guān)鍵在于如何定制和發(fā)行一個(gè)完整的軟件平臺(tái),。
盡管傳統(tǒng)的基于源代碼的系統(tǒng)集成依然可以滿(mǎn)足需求,,但是積累的工程經(jīng)驗(yàn)傾向于基于軟件包的系統(tǒng)集成和部署方案,因?yàn)榛谲浖姆桨敢呀?jīng)被證明更加可靠,、靈活,、安全??梢灶A(yù)見(jiàn),,基于軟件包的系統(tǒng)集成方案將在平臺(tái)集成和發(fā)行上占據(jù)優(yōu)勢(shì)。
Linux 企業(yè)解決方案提供商試圖縮小Linux 操作系統(tǒng)在嵌入式領(lǐng)域的差距,。但是,,只有先建立適合開(kāi)發(fā)的基礎(chǔ)結(jié)構(gòu),Linux 企業(yè)解決方案提交的包格式才能充分發(fā)揮作用,。手機(jī)軟件平臺(tái)創(chuàng)建工具,,就是一個(gè)基于RPM 的平臺(tái)構(gòu)建,、管理、部署系統(tǒng)工具,,還對(duì)嵌入式系統(tǒng)的發(fā)行提供強(qiáng)大的支持,。圖3 舉例說(shuō)明了平臺(tái)創(chuàng)建工具基于RPM 軟件包的工作模式。
圖3 基于RPM 的軟件構(gòu)建和發(fā)行,。
在基于RPM 的解決方案中,開(kāi)發(fā)人員只需要留心自己軟件包的源代碼VOB.VOB 是一個(gè)以版本的形式存儲(chǔ)項(xiàng)目產(chǎn)品和數(shù)據(jù)的資源庫(kù),。所有依賴(lài)的包都存儲(chǔ)在與RPM VOB 結(jié)合的RPM 發(fā)行服務(wù)器上,,該服務(wù)器由軟件配置管理員維護(hù)。功能部件開(kāi)發(fā)人員從發(fā)行服務(wù)器中獲得二進(jìn)制RPM 包,,并且在平臺(tái)創(chuàng)建工具的幫助下安裝構(gòu)建環(huán)境,。當(dāng)開(kāi)發(fā)進(jìn)行到一定程度需要交付時(shí),開(kāi)發(fā)人員將提出構(gòu)建請(qǐng)求,。配置管理員將處理構(gòu)建請(qǐng)求,,并將請(qǐng)求構(gòu)建的軟件包與其依賴(lài)的軟件包一同進(jìn)行構(gòu)建。之后,,使用平臺(tái)創(chuàng)建工具通過(guò)RPM VOB和發(fā)行服務(wù)器發(fā)布版本,。這樣,開(kāi)發(fā)人員就可以使用新的版本進(jìn)行增強(qiáng)開(kāi)發(fā),。經(jīng)理和其他項(xiàng)目股東可以使用網(wǎng)絡(luò)瀏覽器查看發(fā)行進(jìn)程和平臺(tái)變化,。
當(dāng)配置管理員所發(fā)布的RPM 包不可用時(shí),開(kāi)發(fā)人員還可以使用平臺(tái)創(chuàng)建工具調(diào)整這些包來(lái)解決相互依賴(lài),。
以上對(duì)于基礎(chǔ)結(jié)構(gòu)的開(kāi)發(fā),,通過(guò)使用功能部件的發(fā)行包,增強(qiáng)了功能部件間的邊界和API 的訪(fǎng)問(wèn),。所以,,不會(huì)通過(guò)功能部件間的依賴(lài)看到它們的復(fù)雜性,確保手機(jī)軟件平臺(tái)擁有擴(kuò)展性和適應(yīng)性,。
平臺(tái)創(chuàng)建工具就是要成為一個(gè)基于RPM 的平臺(tái)構(gòu)建,、管理、部署的系統(tǒng)工具,,并對(duì)嵌入式系統(tǒng)的發(fā)行提供強(qiáng)大的支持,。
5 平臺(tái)創(chuàng)建工具的設(shè)計(jì)目標(biāo)
手機(jī)軟件平臺(tái)創(chuàng)建工具需要關(guān)注兩方面的問(wèn)題:
其一是保證使用工具構(gòu)建出的結(jié)果正確。使用工具能夠提高開(kāi)發(fā)效率,,縮短對(duì)開(kāi)發(fā)人員的培訓(xùn)時(shí)間,,但最為重要的是保證最終生成鏡像的正確;其二是充分利用已經(jīng)生成的手機(jī)RootFS 和鏡像。在手機(jī)的開(kāi)發(fā)過(guò)程中,,會(huì)經(jīng)歷無(wú)數(shù)次的構(gòu)建,、測(cè)試、生成鏡像,。每次發(fā)現(xiàn)問(wèn)題,、修改源代碼后,都需要再進(jìn)行一次,,但實(shí)際上每次改動(dòng)往往并不多,,如果充分利用過(guò)去的基礎(chǔ),就可以節(jié)省大量的時(shí)間,。
平臺(tái)創(chuàng)建工具應(yīng)該維護(hù)一個(gè)工作區(qū),,供使用者進(jìn)行基于包的平臺(tái)建設(shè)、架構(gòu)和發(fā)行,。這個(gè)工作區(qū)應(yīng)該是一個(gè)為唯一用戶(hù)維護(hù)當(dāng)前工程數(shù)據(jù)和結(jié)構(gòu)的獨(dú)立空間,。基于這個(gè)工作區(qū),,平臺(tái)創(chuàng)建工具主要應(yīng)該支持以下功能:
(1) 支持包管理操作,,例如:安裝、卸載,、升級(jí),、降級(jí)、信息查詢(xún)等,;(2) 支持將源代碼RPM 包,、源代碼目錄和二進(jìn)制RPM 混合在一起的平臺(tái)構(gòu)建;(3) 支持根據(jù)用戶(hù)指定的RPM 包生成手機(jī)RootFS;(4) 支持根據(jù)特定的系統(tǒng)分割,、RootFS 內(nèi)容和RootFS 類(lèi)型生成鏡像文件,;(5) 調(diào)用鏡像燒制工具,將鏡像燒制到目標(biāo)設(shè)備上,;(6) 支持平臺(tái)定制,并能導(dǎo)出備份文件供今后使用,;(7) 支持基于指定的RPM 包和RPM 開(kāi)發(fā)包生成軟件開(kāi)發(fā)工具包,。運(yùn)行庫(kù)、工具鏈,、頭文件和軟件開(kāi)發(fā)工具包的文件由用戶(hù)的RPM 開(kāi)發(fā)包提供,;(8) 提供插件機(jī)制,使新的目標(biāo)和工具鏈可用,。
6 平臺(tái)創(chuàng)建工具的作用
平臺(tái)創(chuàng)建工具的定位是一個(gè)圖形用戶(hù)界面系統(tǒng)集成和分配工具,,用來(lái)幫助開(kāi)發(fā)人員開(kāi)發(fā)嵌入式程序,使基于Linux 的嵌入式軟件平臺(tái)的建立、集成和分配更容易,。其亮點(diǎn)在于靈活的包管理機(jī)制,、方便的平臺(tái)構(gòu)造和部署、對(duì)不同生產(chǎn)線(xiàn)的支持,、快速生成軟件開(kāi)發(fā)工具包等,,具有使用方便、工作效率高,、資源重用性強(qiáng)等特點(diǎn),。最重要的是能夠大幅度的提高開(kāi)發(fā)效率,并使開(kāi)發(fā)人員和平臺(tái)配置管理人員擺脫復(fù)雜的命令行操作方式,,通過(guò)清晰明了的GUI 完成工作,,工作流如圖4 所示。
圖4 平臺(tái)創(chuàng)建工具工作流,。
具體而言是針對(duì)Linux-Java 手機(jī)軟件平臺(tái)的集成和分配,以軟件包管理方式,,替代繁雜的整體構(gòu)建方式,;以自動(dòng)執(zhí)行的方式,替代人工的命令行操作方式,,提高創(chuàng)建手機(jī)軟件平臺(tái)的效率,,并使所創(chuàng)建的手機(jī)軟件平臺(tái)擁有更高的質(zhì)量和更好的維護(hù)性。
手機(jī)軟件平臺(tái)的開(kāi)發(fā)可具體分為:成分部件開(kāi)發(fā),、平臺(tái)創(chuàng)建,、系統(tǒng)集成和系統(tǒng)部署四部分,如圖5 所示,。
圖5 Linux/Java 平臺(tái)構(gòu)造模型。
可見(jiàn),,平臺(tái)創(chuàng)建工具的使用幾乎貫傳了整個(gè)平臺(tái)構(gòu)造全過(guò)程,。在成分部件開(kāi)發(fā)階段,使用RPM 對(duì)開(kāi)發(fā)好的各個(gè)成分部件進(jìn)行分別打包后,,交由平臺(tái)創(chuàng)建工具集中管理,。在平臺(tái)創(chuàng)建階段,使用平臺(tái)創(chuàng)建工具對(duì)軟件包進(jìn)行分塊處理,,按照不同的分類(lèi)成為一個(gè)個(gè)資源庫(kù),,并構(gòu)建可運(yùn)行平臺(tái),建立軟件開(kāi)發(fā)工具包,。這時(shí),,對(duì)于指定生產(chǎn)線(xiàn)的手機(jī)軟件產(chǎn)品所需的軟件平臺(tái)就已經(jīng)成功建立,,平臺(tái)擁有所有需要的軟件配置,并可生成出鏡像文件,。最后使用鏡像燒制工具,,將生成的鏡像燒到手機(jī)上,就可以進(jìn)行系統(tǒng)測(cè)試了,。
7 結(jié)語(yǔ)
使用基于包管理方式的平臺(tái)創(chuàng)建工具,,不僅可以彌補(bǔ)原始開(kāi)發(fā)方法的不足,還可自動(dòng)為產(chǎn)品提供正確的配置,,使得跟蹤包間的依賴(lài)關(guān)和進(jìn)行軟件發(fā)布,、安裝、卸載,、升降級(jí)都更加容易,,同時(shí)它還是最被廣泛接受的向開(kāi)源軟件組織發(fā)布源碼的方法,便于確認(rèn)開(kāi)源軟件的靈活性,。
手機(jī)軟件平臺(tái)創(chuàng)建工具作為一個(gè)圖形用戶(hù)界面系統(tǒng)集成和分配工具,,用來(lái)幫助開(kāi)發(fā)人員開(kāi)發(fā)嵌入式程序,使基于Linux 的嵌入式軟件平臺(tái)的建立,、集成和分配更容易,。平臺(tái)創(chuàng)建工具的使用,將使手機(jī)開(kāi)發(fā)商在降低開(kāi)發(fā)成本的同時(shí),,開(kāi)發(fā)出功能更加完善的手機(jī)軟件平臺(tái),,最終為用戶(hù)提供功能更加豐富的手機(jī)產(chǎn)品。