1.引言?
??? 無線Java技術(shù)是在移動通信領(lǐng)域內(nèi)的J2ME技術(shù),最近兩年內(nèi)迅速發(fā)展,截止到2003年2月,已經(jīng)有21個生產(chǎn)廠家推出了100多種支持JAVA的手持設(shè)備。今年3月,CDMA領(lǐng)導(dǎo)廠商高通公司宣布,將在其CDMA的芯片中提供對J2ME的支持,其實現(xiàn)主要基于MIDP 2.0和CLDC1.0.4。今年6月,Sun和Intel達成協(xié)議,將聯(lián)合開發(fā)支持英特爾XScale處理器的Java應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序運行環(huán)境。在硬件中集成Java,將進一步促進Java在市場中的普及。根據(jù)ARC Group2002年六月的《無線JAVA報告》,“到 2007年, 幾乎所有的手持設(shè)備都將提供對JAVA的支持”。?
??? 目前無線Java設(shè)備主要以手機為主,當(dāng)前的實現(xiàn)主要基于CLDC1.0和MIDP1.0規(guī)范。MIDP2.0規(guī)范在去年11月推出,是未來無線Java技術(shù)的核心。今年6月,Sun與世界知名的手機廠商諾基亞、摩托羅拉、西門子和索尼—愛立信共同合作,開發(fā)適用于MIDP2.0技術(shù)標(biāo)準(zhǔn)的J2ME技術(shù)。預(yù)計合作的時間將為兩個月,相信支持MIDP2.0的設(shè)備不久將推向市場。MIDP2.0作為下一代移動設(shè)備開發(fā)規(guī)范,增強了對音頻、游戲、安全和Push注冊的支持,并且對用戶界面、網(wǎng)絡(luò)連接" title="網(wǎng)絡(luò)連接">網(wǎng)絡(luò)連接的功能做了增強,同時將OTA應(yīng)用程序下載包括到規(guī)范中來。本文對MIDP2.0的新增特性做了較詳細(xì)的介紹。?
2.MIDP2.0的安全框架?
??? MIDP運行在Java虛擬機之上,這使它可以解決一部分安全問題。然而對于移動信息設(shè)備,還有特定的安全問題,比如程序在用戶不知道的情況下連接網(wǎng)絡(luò),會耗費用戶的通信費用,還有程序可能會修改用戶的本地資料,或把用戶資料通過無線網(wǎng)絡(luò)泄漏出去。為了解決這種情況MIDP2.0增加了安全框架。?
1)?有安全隱患的操作 ?
??? 對于有安全隱患的操作,MIDP2.0按功能把它們分為以下幾組:?
??? 撥打電話:向外撥打電話的操作。?
??? 網(wǎng)絡(luò)訪問:與網(wǎng)絡(luò)發(fā)生連接、訪問網(wǎng)絡(luò)數(shù)據(jù)的操作(例如 GSM、 GPRS等網(wǎng)絡(luò)訪問)。?
??? 收發(fā)消息:接受和發(fā)送消息的操作。(如短信服務(wù))?
??? 程序自動激活:導(dǎo)致MIDlet suite自動激活的操作(如push技術(shù)、定時MIDlet等)。?
??? 本地連接:訪問本地端口的操作(如COMM端口、紅外口、藍(lán)牙等)。?
??? 多媒體紀(jì)錄:捕獲靜止圖像、紀(jì)錄視頻或音頻的操作。?
??? 讀取用戶數(shù)據(jù):讀取用戶電話簿或其他文件中數(shù)據(jù)的操作。?
??? 修改用戶數(shù)據(jù):增加、刪除或修改用戶的電話簿和其他文件的操作。?
?
?
??? 當(dāng)這些操作執(zhí)行時,應(yīng)由用戶指定是否允許這些操作運行。比如用戶通過http連接訪問http://wireless.java.sun.com 網(wǎng)站時,在J2ME Wireless Toolkit2.0模擬器中運行時會出現(xiàn)左圖所示的畫面,提示用戶該程序即將連接網(wǎng)站,詢問用戶是否進行該操作,如果用戶同意,則繼續(xù)進行連接網(wǎng)站的操作,如果用戶不同意,則拋出安全異常,指出該程序不具備http網(wǎng)絡(luò)訪問的權(quán)利.如右圖所示。
2)?權(quán)限許可證(Permission)。
??? 對于每一個有安全隱患的操作,都應(yīng)有一個與之對應(yīng)的權(quán)限許可證,當(dāng)程序要進行這些操作時,AMS(應(yīng)用程序管理軟件)應(yīng)根據(jù)許可證的類型做出反應(yīng)。
??? 許可證主要分為以下兩類:allowed 許可證 和 user 許可證。
??? Allowed表示一直允許該操作。
??? User需征求用戶的許可,依據(jù)用戶決定的持續(xù)時間分為三類。
??? oneshot,用戶決定只對本次有效,下次需要該功能許可時,繼續(xù)提問用戶。
??? session,用戶決定在此次程序運行期間內(nèi)有效,程序重新啟動后繼續(xù)提問用戶。
??? blanket,用戶的決定一直有效,直到該程序被卸載。
??? 當(dāng)某項操作沒有任何許可證時,必須拒絕該操作。
3)?保護域(Protection Domain)。
??? 程序中使用有安全隱患的操作時,應(yīng)根據(jù)該操作的許可證做出反應(yīng),而一個操作有什么樣的許可證,與程序的來源有很大關(guān)系,來自可信賴的開發(fā)者的程序自然會獲得較多得許可證。這就涉及到保護域的問題。
??? 保護域?qū)嶋H上是一些許可證的集合,比如一個只允許http連接的保護域:
allow: javax.microedition.io.Connector.http
??? 在這個保護域中,所有其他的有安全隱患的操作都會被拒絕。
??? 下面是一個更為靈活的保護域,允許http連接,對于https和socket連接要征得用戶同意,拒絕其他有安全隱患的操作
allow: javax.microedition.io.Connector.http
blanket: javax.microedition.io.Connector.https
blanket: javax.microedition.io.Connector.socket
??? 每個程序都會進入一個保護域,同一個保護域中的所有程序都有相同的安全策略。
對于保護域的實現(xiàn)問題,比如要定義多少保護域,每個保護域的內(nèi)容如何,MIDP2.0規(guī)范并沒有做強制性的規(guī)定,只是給了一個建議,具體如何實現(xiàn)由各個廠商自行決定。一個應(yīng)用程序能夠進入什么樣的保護域,要看他來自何處,一個不明來歷的程序肯定不會獲得較多的權(quán)限。MIDP2.0安全框架提供了代碼簽名機制,開發(fā)者可以從權(quán)威認(rèn)證機構(gòu)獲得密鑰,然后對程序進行數(shù)字簽名,設(shè)備下載之后可以對該簽名進行驗證,以確定該程序確實來自它所聲稱的地方,通過驗證的程序會進入一些受信任的保護域。
3.MIDP2.0音頻開發(fā)技術(shù)
??? MIDP規(guī)范的目標(biāo)是使開發(fā)出來的程序能在廣泛的移動信息設(shè)備上" title="設(shè)備上">設(shè)備上運行,但MIDP1.0規(guī)范并不支持音頻,如果開發(fā)有聲音功能的程序,則必須使用設(shè)備廠商自己提供的API,這使得開發(fā)出來的程序失去了廣泛的可移植性。MIDP2.0規(guī)范增加了對聲音的支持,這使以后開發(fā)音頻程序有了統(tǒng)一的規(guī)范。
??? 移動信息設(shè)備涉及的范圍很廣,這些設(shè)備的多" title="的多">的多媒體能力也有很大的差別,有些設(shè)備只能播放簡單的曲調(diào),有些設(shè)備卻有很強的音頻和視頻渲染能力。由諾基亞領(lǐng)導(dǎo)的移動媒體API(MMAPI)專家組致力于為移動設(shè)備制定一組統(tǒng)一的多媒體API,以便開發(fā)出的多媒體程序能在各種設(shè)備上運行。MMAPI專家組的工作有以下兩個成果:
??制定出MMAPI規(guī)范(JSR—135),該規(guī)范包含了對音頻和視頻的支持,能夠完全實現(xiàn)該規(guī)范的設(shè)備是一些高性能的設(shè)備,有較強的多媒體功能。諾基亞在2003年3月推出的3300手機就增加了對MMAPI的支持。
??制定出MIDP2.0媒體API,鑒于MIDP規(guī)范面向大多數(shù)設(shè)備,MIDP2.0的媒體API實現(xiàn)了MMAPI的一個子集,只支持音頻功能,并與MMAPI保持兼容。
??? MIDP2.0媒體API與MMAPI有相同的體系結(jié)構(gòu)。其中主要涉及三個基本概念:
??Manager
??Player
??Control
??? Manager是獲得系統(tǒng)音頻功能的入口,它只包含一些靜態(tài)方法,使用它來創(chuàng)建Player,查詢系統(tǒng)支持那些協(xié)議和媒體類型,Manager還提供了一個播放簡單曲調(diào)的方法。
??? Player負(fù)責(zé)播放媒體內(nèi)容,它由Manager創(chuàng)建,可以管理自己的生命周期,控制播放進度,提供可用的Control。
??? Control是用于實現(xiàn)一個Player可能有的各種控制,如音量Control可以控制音量的大小。
??? 右圖說明了Manager 、Player 和Control之間的關(guān)系:Manager創(chuàng)建Player,Player提供Control,Control用來控制Player。
??? 下面以我們PC機上的多媒體系統(tǒng)為例說明這種關(guān)系。
??? Manager相當(dāng)于PC機操作系統(tǒng)的一部分,用來管理各種播放軟件,而Player就相當(dāng)于這些播放軟件,比如音頻播放器" title="播放器">播放器用來播放音頻,視頻播放器用來播放視頻,在這些播放器上有各種各樣的控制按鈕,這些按鈕與Control相當(dāng),用來控制播放器,比如音量按鈕控制播放器音量的大小。
??? 在PC機上,我們一般選擇一個播放器播放媒體文件,然后用播放器上的控制按鈕來控制播放過程。與之相對應(yīng),在移動設(shè)備上開發(fā)有音頻功能的程序時,首先用Manager創(chuàng)建一個Player,然后從Player中得到相應(yīng)的Control,用Control對Player進行控制。
4.MIDP2.0的游戲開發(fā)技術(shù)
??? 對J2ME游戲開發(fā)的支持可能是開發(fā)者企盼已久的, MIDP2.0新增了一個游戲包javax.microedition.lcdui.game,該包由以下五個類組成:GameCanvas、Layer 、LayerManager、Sprite、TiledLayer。MIDP2.0提供的游戲API使得游戲本身可以更充分的利用設(shè)備自身的圖形處理功能。它的出現(xiàn)無疑大大簡化了J2ME游戲的開發(fā)工作,同時也使得開發(fā)者可以更多地控制程序的圖形處理性能。
1)?MIDP2.0的游戲運行機制
??? GameCanvas提供了基本的游戲運行機制,除了繼承其父類Canvas的特性,它還提供了特定于游戲的下列功能:
查詢鍵盤狀態(tài):
??? 在MIDP1.0中,為了獲得用戶的鍵盤輸入,一般要使用系統(tǒng)的消息處理機制來處理鍵盤事件,但鍵盤事件的產(chǎn)生受系統(tǒng)線程調(diào)度的影響,因此不一定能反映用戶當(dāng)前的按鍵狀態(tài)。GameCanvas提供了getKeyStates函數(shù)來查詢鍵盤狀態(tài),該函數(shù)返回一個整數(shù),這個整數(shù)的每一位代表一個健是否被按下,例如要查詢LEFT鍵是否被按下,可用如下語句:
?int keyState = getKeyStates();
????? ?if ((keyState & LEFT_KEY) != 0) {
????????? //do something
????? ?}
??? getKeyStates返回自上一次調(diào)用該函數(shù)以來有沒有鍵被按下,并且清除按鍵狀態(tài),因此如果連續(xù)兩次調(diào)用該函數(shù),第二次會很好地反映當(dāng)前鍵盤的狀態(tài)。
??? 另外,為了提高性能,GameCanvas還可以阻止鍵盤事件的產(chǎn)生。用戶玩游戲時,經(jīng)常會頻繁的按鍵,如果不阻止鍵盤事件的產(chǎn)生,系統(tǒng)會花費很多時間來發(fā)送鍵盤事件。
??? GameCanvas構(gòu)造函數(shù)為:GameCanvas(boolean suppressKeyEvents)
其中參數(shù)suppressKeyEvents表示是否要阻止鍵盤事件的產(chǎn)生,當(dāng)該參數(shù)為true時,keyPressed, keyRepeated 和 keyReleased 事件將會受到阻止,這時可以通過查詢鍵盤狀態(tài)來確定用戶的按健。
要注意的是,只有當(dāng)GameCanvas正處于顯示狀態(tài)時,鍵盤事件才會受到阻止,并且受阻止的鍵僅限于與游戲有關(guān)的鍵,如UP、DOWN、FIRE等。其它鍵所產(chǎn)生的事件不會受到阻止。
??? 圖像的繪制與顯示:
??? 對每一個GameCanvas對象,系統(tǒng)都會為它開辟一個離屏圖像緩沖區(qū),要顯示的圖像先在該緩沖區(qū)內(nèi)繪制,繪制完成后再復(fù)制到實際顯示屏幕。這樣做既提高效率,又可以避免頻繁在實際屏幕繪圖產(chǎn)生的閃爍現(xiàn)象。
??? 實際操作時,先用getGraphics返回一個操作離屏圖像緩沖區(qū)的Graphics對象,使用該對象可緩沖區(qū)進行繪制。對緩沖區(qū)繪制完畢后使用flushGraphics函數(shù)將緩沖區(qū)復(fù)制到實際屏幕。
??? 有了上述功能,GameCanvas為游戲開發(fā)者提供了一個重要的機制:把整個游戲邏輯(包括圖像顯示和處理用戶輸入)封裝在一個單線程的單循環(huán)內(nèi),這解決了在MIDP1.0中依賴系統(tǒng)的輸入和顯示線程來控制游戲問題,有利于提高游戲的穩(wěn)定性和性能。
??? 典型的游戲循環(huán)如下:
Graphics g = getGraphics();//獲得操作圖像緩沖區(qū)的Graphics對象
while (true) {
??// 更新游戲狀態(tài)?
?int keyState = getKeyStates();//查詢鍵盤狀態(tài)
? // 處理用戶輸入
? // 繪制圖像緩沖區(qū)
? flushGraphics();//將緩沖區(qū)復(fù)制到實際屏幕
? //延時.
}
2)?創(chuàng)建游戲場景。
??? GameCanvas提供了基本的游戲運行機制,游戲包的其它類方便了創(chuàng)建游戲場景。
??? 在一個游戲場景中,可能有各種角色和背景,MIDP2.0把每一個這樣的角色或背景作為一個層(Layer)的概念,抽象類Layer定義了層的基本屬性,如位置、大小、是否可見等。有兩個類繼承了Layer,分別是Sprite和TiledLayer。Sprite用來表示游戲中的動畫角色,TiledLayer用于創(chuàng)建大的背景。當(dāng)游戲中的Layer很多時,有必要對這些Layer進行統(tǒng)一管理。LayerManager類可以集中管理這些Layer。
5.MIDP2.0其它新增特性
??? 除了上面所述之外,MIDP2.0還在以下方面做了增強:
1)?Push注冊
??? 用戶在Internet上瀏覽信息時,一般使用c/s(客戶/服務(wù)器)架構(gòu),由客戶機發(fā)出請求,服務(wù)器做出相應(yīng)的相應(yīng),這種方式稱為pull方式。與之相對應(yīng)的是push方式,即服務(wù)器主動的向客戶機發(fā)出信息。push技術(shù)非常適合無線網(wǎng)絡(luò)的特點,無線網(wǎng)絡(luò)的帶寬比較低,無線傳輸?shù)男畔⒎?wù)費也比較高,使用push使用戶不必花費大量時間進行搜索,既有利于提高網(wǎng)絡(luò)的利用效率,又可以減少用戶的通信費用。push技術(shù)在無線商業(yè)上也有很大的應(yīng)用價值,例如服務(wù)器可以根據(jù)用戶的設(shè)定,將各種實時信息發(fā)送到用戶的手機上,這些實時信息可以包括各種新聞、生活信息、廣告等。
??? MIDP2.0增加了對push注冊的支持,push注冊機制可以使MIDlet自動運行。運行方式有兩種,一種基于定時技術(shù),當(dāng)?shù)竭_特定時間時,程序就會運行;另一種基于網(wǎng)絡(luò),當(dāng)設(shè)備收到網(wǎng)絡(luò)推送的信息時,可以啟動程序運行。設(shè)備的AMS維護著已注冊的push列表,這些列表包括注冊的網(wǎng)絡(luò)連接和定時器以及與它們對應(yīng)的MIDlet。當(dāng)這些列表中的某個網(wǎng)絡(luò)連接到來或是到達某個定時時間,AMS將根據(jù)列表激活相應(yīng)的MIDlet。
2)?OTA應(yīng)用程序傳輸
??? 在PC機上開發(fā)者通常使用光盤發(fā)布軟件, 移動設(shè)備沒有軟驅(qū)、光驅(qū)等數(shù)據(jù)交換設(shè)備,它主要通過無線網(wǎng)絡(luò)進行數(shù)據(jù)傳輸,因此軟件的發(fā)布也通過無線網(wǎng)絡(luò)進行。網(wǎng)絡(luò)運營商提供無線數(shù)據(jù)服務(wù),開發(fā)者將自己開發(fā)的軟件提交到服務(wù)器上,用戶連接到服務(wù)器把軟件下載到自己的設(shè)備上運行。為了規(guī)范這一過程,MIDP規(guī)范推出時同時推出了OTA (over-the-air??? provisioning,無線服務(wù)提供方式)規(guī)范,MIDP1.0時,OTA作為一個推薦的行為,MIDP2.0對OTA做了增強,并把它作為規(guī)范的一部分,以后支持MIDP2.0的設(shè)備必須支持OTA,使得軟件的發(fā)布有了統(tǒng)一的規(guī)范。
??? OTA使移動信息設(shè)備上應(yīng)用軟件的下載、安裝和刪除能夠通過無線網(wǎng)絡(luò)自動進行,用戶在這個過程中只需做很少的干預(yù)。一個OTA系統(tǒng)通常由用戶設(shè)備、無線傳輸網(wǎng)絡(luò)和提供服務(wù)的Web服務(wù)器組成。
??? 服務(wù)器的功能通常包括內(nèi)容發(fā)布和管理、訪問控制、程序安裝、收費管理。一方面服務(wù)器使第三方軟件開發(fā)者能將他們開發(fā)的軟件發(fā)布到服務(wù)器上,另一方面使終端用戶可以下載、安裝這些軟件,一旦軟件安裝成功,可以通過收費系統(tǒng)收取用戶的費用,并根據(jù)下載數(shù)量來支付開發(fā)者的費用。在整個過程中,都有安全管理,這既包括對用戶身份信息的認(rèn)證,也包括對程序的鑒別,以確保該程序不用于非法目的。除了這些基本功能,有些服務(wù)器還為用戶提供個性化服務(wù),比如根據(jù)用戶的設(shè)備特點和用戶的設(shè)定為用戶提供可用程序列表,確保這些程序都能在用戶的設(shè)備上運行,當(dāng)某一程序有新版本推出時通知用戶等。
3)?網(wǎng)絡(luò)連接增強
??? 在MIDP1.0中,只包含了對HTTP網(wǎng)絡(luò)連接的支持,MIDP2.0增加了支持的連接類型,包括HTTPS、Socket、Datagram等。
4)?用戶界面增強
??? MIDP2.0對用戶界面做了較多的增強,更方便開發(fā)者使用,例如對Form的布局管理,以字節(jié)數(shù)組的形式直接操縱Image圖像等。
參考文獻:
1.?JSR-118 Mobile Information Device Profile 2.0(Final Release), http://jcp.org/aboutJava/communityprocess/final/jsr118/index.html,2002年11月
2.?Jonathan Knudsen,What's New in MIDP 2.0,? http://wireless.java.sun.com/midp/articles ,2002年11月
3.?Jonathan Knudsen,Understanding MIDP 2.0's Security Architecture,http://wireless.java.sun.com/midp/articles ,2003年2月
4.?Enrique Ortiz,Introduction to OTA Application Provisioning,http://wireless.java.sun.com/midp/articles ,2002年11月
5.?Enrique Ortiz,The MIDP 2.0 Push Registry,http://wireless.java.sun.com/midp/articles ,2003年1月
6.?Jonathan Knudsen,Mobile Media API Overview http://wireless.java.sun.com/midp/articles ,2002年6月