C++在大規(guī)模、高性能計(jì)算,游戲開(kāi)發(fā)、嵌入式應(yīng)用開(kāi)發(fā),以及傳統(tǒng)的客戶(hù)端軟件和構(gòu)件開(kāi)發(fā)中是十分強(qiáng)大的。如今智能手機(jī)市場(chǎng)發(fā)展,一日千里,手機(jī)機(jī)能的提高,智能手機(jī)普及率的擴(kuò)大,3g時(shí)代的來(lái)臨,手機(jī)已經(jīng)成為微型移動(dòng)計(jì)算機(jī)了,各大移動(dòng)廠商已經(jīng)把手機(jī)系統(tǒng)平臺(tái)之爭(zhēng)看做手機(jī)的未來(lái)之爭(zhēng),占有移動(dòng)平臺(tái)的優(yōu)勢(shì),誰(shuí)就占有了未來(lái),在智能手機(jī)平臺(tái),各種中高級(jí)的應(yīng)用會(huì)層出不窮,C++的地位會(huì)更加鞏固,作用會(huì)大大的發(fā)展。
目前中國(guó)三大運(yùn)營(yíng)商為了搶占3G平臺(tái)的先機(jī),現(xiàn)在都加強(qiáng)與終端廠商和軟件廠商的深度合作,建設(shè)自己的手機(jī)系統(tǒng)平臺(tái)。
Google公司08年推出Android手機(jī)操作系統(tǒng),基于Linux2.6開(kāi)放平臺(tái)設(shè)計(jì),并不斷豐富完善。Android平臺(tái)的圖形渲染能力比其它幾家強(qiáng),同時(shí)還內(nèi)置了Google 的Gmail,Gtalk等原有業(yè)務(wù),能看出在國(guó)外市場(chǎng),用慣Google的用戶(hù),會(huì)感到設(shè)計(jì)很貼心。
隨后,中國(guó)移動(dòng)推出了Ophone OS開(kāi)放智能操作系統(tǒng)平臺(tái),也是基于Linux 2.6,兼容Android的所有應(yīng)用,這樣首先保證了一定數(shù)量的應(yīng)用軟件可提供用戶(hù)。同時(shí),還內(nèi)置了中國(guó)移動(dòng)的全部增值服務(wù),為用戶(hù)提供更豐富的應(yīng)用體驗(yàn)。這里還包括MMarket(網(wǎng)上軟件下載商店),專(zhuān)門(mén)向中國(guó)移動(dòng)將近5億的手機(jī)用戶(hù)銷(xiāo)售個(gè)人軟件作者的各類(lèi)手機(jī)應(yīng)用軟件,7:3分成,個(gè)人作者可以拿7成。這可以說(shuō)是我們工程師的福音,多了條子創(chuàng)業(yè)之路。中國(guó)移動(dòng)還有眾多的商業(yè)客戶(hù),行業(yè)OA辦公軟件系統(tǒng)的市場(chǎng)也不可小靚啊。所以,Ophone未來(lái)給大家?guī)?lái)的發(fā)展機(jī)會(huì),值得關(guān)注。
Android和Ophone OS的開(kāi)發(fā)語(yǔ)言C/C++,Java,這個(gè)正是他,他們架構(gòu)的絕妙之處,眾所周知,C/C++是老牌語(yǔ)言在中低層的應(yīng)用開(kāi)發(fā)中游不可替代的地位,但開(kāi)發(fā)效率的問(wèn)題一直是他天生的缺點(diǎn),Java可以說(shuō)天生就是來(lái)彌補(bǔ)C++的不足的,在高層的業(yè)務(wù)開(kāi)發(fā)中java是很強(qiáng)的力量,PC機(jī)的很多領(lǐng)域只能用C/C++來(lái)開(kāi)發(fā),這對(duì)于目前手機(jī)操作系統(tǒng)硬件低等原因來(lái)說(shuō),C/C++必定是不二的選擇,而Java來(lái)講,和硬件關(guān)系不密切,不過(guò)安全性很高,怎么樣才能把這兩種語(yǔ)言有機(jī)的結(jié)合在一起呢
JNI在平臺(tái)應(yīng)用情況和好處
我們首先介紹一下java的性能問(wèn)題,Java程序其本身的缺陷,那就是其效率問(wèn)題。由于Java是一種介于解釋型和編譯型之間的語(yǔ)言,其對(duì)內(nèi)存的管理是通過(guò)JVM虛擬機(jī)來(lái)實(shí)現(xiàn)的,同樣的程序,如果用編譯型語(yǔ)言C來(lái)實(shí)現(xiàn),其運(yùn)行速度一般要比Java快得多,這就迫使開(kāi)發(fā)者尋求一種java和C/C++相結(jié)合的模式來(lái)彌補(bǔ)彼此的不足,于是JNI(Java Native Interface,Java本地化方法)技術(shù)運(yùn)用而生, 目前JNI技術(shù)在很多平臺(tái)上如wince/mobile,linux,symbian都有了很大的應(yīng)用,不過(guò)在這些平臺(tái)上并沒(méi)有發(fā)揮JNI技術(shù)的絕對(duì)優(yōu)勢(shì),為了讓JNI技術(shù)能夠發(fā)揮出自身的絕對(duì)力量,于是Ophone OS系統(tǒng)制定出來(lái)完美的解決方案
下面我就通過(guò)在Ophone平臺(tái)上的多媒體實(shí)例來(lái)講一下C/C++與java是怎么結(jié)合工作的
Ophone OS的OpenCore模塊概述
OpenCore的另外一個(gè)常用的稱(chēng)呼是PacketVideo,它是Ophone OS的多媒體核心。OpenCore是這套多媒體框架的軟件層的名稱(chēng)。在Ophone OS的開(kāi)發(fā)者中間,二者的含義基本相同。對(duì)比Android的其它程序庫(kù),OpenCore的代碼非常龐大,它是一個(gè)基于C++的實(shí)現(xiàn),定義了全功能的操作系統(tǒng)移植層,各種基本的功能均被封裝成類(lèi)的形式,各層次之間的接口多使用繼承等方式。
多媒體框架在Ophone OS系統(tǒng)中的位置(紅包標(biāo)記)
從框架圖可以看出多媒體處理Libraries層,這說(shuō)明Ophone OS的媒體層是通過(guò)os方式供上層使用,實(shí)際上一般都是用c/c++來(lái)實(shí)現(xiàn),然后層過(guò)上層語(yǔ)言,比如Java的JNI方式去調(diào)用
媒體的編解碼庫(kù)使用了OpenMAX 1L interface接口進(jìn)行展,這使得和具體的硬件不相關(guān),為廠家的移植帶來(lái)了方便
OpenCore本身集成了目前流行的媒體格式,如本地文件3GP,MPEG-4等等,在線播放的http,rtsp/rtp流媒體協(xié)議
配套的Ophone OS源碼OpenCore模塊源碼下載
Ophone OS開(kāi)源項(xiàng)目是用Git進(jìn)行版本控制的,大家可以到
http://code.google.com/p/msysgit/downloads/list 上下載Git-1.6.4-preview20090730.exe,然后安裝,安裝完運(yùn)行開(kāi)始菜單->Git->Git Bash,會(huì)出現(xiàn)一個(gè)dos窗口,輸入git clone git://android.git.kernel.org/platform/external/opencore.git回車(chē),下載完成后的源碼在C:\Documents and Settings\Administrator\opencore目錄,當(dāng)然大家也可以自己創(chuàng)建一個(gè)空目錄,運(yùn)行Git,在Git提供的shell,切換路徑到你剛才創(chuàng)建的目錄下(cd命令)
下面我們對(duì)PVPlayer進(jìn)行簡(jiǎn)單的說(shuō)明
下面是通過(guò)JNI方式調(diào)用
MediaPlayer mp;
mp = MediaPlayer.create(this,xxx.mp3);
mp.prepare();
mp.start();
以上的簡(jiǎn)單的一個(gè)播放mp3格式的程序,他的巧妙之處在于,Ophone是基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng),提供了軟件開(kāi)發(fā),所以O(shè)phone手機(jī)的內(nèi)部核心依然是linux, 不過(guò)Ophone提供了比Linux更為安全的開(kāi)發(fā)模式,Linux支持c++上層開(kāi)發(fā),這樣就會(huì)使得一些不良開(kāi)發(fā)者,借助這一有利優(yōu)勢(shì),開(kāi)發(fā)一些惡性操作,不過(guò)Ophone系統(tǒng)屏蔽這一缺陷,有過(guò)C/C++開(kāi)發(fā)底層,java通過(guò)JNI的方式來(lái)調(diào)用,這樣即不失C/C++的高效率,又同時(shí)增加了系統(tǒng)的安全性,使得jni技術(shù)實(shí)現(xiàn)跨平臺(tái)開(kāi)發(fā)同時(shí)兼顧效率的有效方法