概述
目前,移動開發已經成為開發者社區最為引人注目的新技術。移 動互聯網蘊藏的巨大商機以及嵌入式開發的神秘色彩使得越來越多的程序員開始學習和研究移動開發技術。J2ME、SymBian、Windows Mobile、BREW是目前主流的技術平台,其中J2ME憑借其開放的特性占據了絕對的市場,成為了移動開發領域的標准。相比其他平台,J2ME的參考 資料也更豐富,更適合初次涉足此領域的開發者入門。
所謂工欲善其事,必先利其器。本文主要講述目前主流的用於開發J2ME應用程序的 開發工具,包括SUN Wireless Toolkit 2.2、Netbeans IDE 4.1、Eclipse 3.1和JBuilder。通常,開發應用程序的時候都會針對具體的目標平台,比如Nokia SerIEs60系列。如果可以把第三方的SDK集成到我們熟悉的開發工具中,必將方便調試和測試,縮短軟件開發周期。文章最後講解如何將第三方SDK集 成到開發工具中。本文使用Windows XP操作系統並假設讀者已經正確的安裝了J2SDK 1.4.2或者更高版本。
SUN Wireless Toolkit 2.2
WTK是一系列工具的集合,包括Ktoolbar、模擬器和輔助工具,使用它們可以為移動電話或者其他嵌入式設備開發MIDP應用程序。從2.3 Beta版本之後,SUN將WTK的名稱修改為SUN Java Wireless Toolkit,本文使用WTK 2.2正式版。首先從http://Java.sun.com 下載軟件,並安裝到C:WTK22目錄。Ktoolbar是整個WTK 2.2的核心組件,選擇“開始”——“所有程序”——“J2ME Wireless Toolkit 2.2”——Ktoolbar。Ktoolbar的界面如圖1-1所示:
圖1-1 Ktoolbar運行界面
使用“打開項目”功能可以方便地運行WTK 2.2自帶的Demo項目,讀者可以訪問C:WTK 22aPPS目錄研究項目代碼,對初學者來說,這是不錯的學習途徑。Ktoolbar也提供了“新建項目”的功能,可以新建MIDP應用程序。遺憾的是 沒有提供代碼編輯的功能,因此很少開發者會直接使用WTK作為開發工具。本節我們不講述如何使用WTK 2.2一步步開發MIDlet,而是介紹如何使用命令行方式開發MIDlet。之所以選擇這種方式,是為了讓讀者清楚MIDP應用程序的開發流程,避免在 下一節介紹集成開發環境的時候,只能知其然,不知其所以然。
為了能夠在命令行下完成編譯、預校驗和打包工作,首先把J2SDK和WTK安裝目錄下的bin目錄加入到環境變量中。
C:> SET PATH=%PATH%;C:WTK22in
C:> SET PATH=%PATH%;C:j2sdk1.4.2_03in
開發MIDP應用程序與Java應用程序存在一些差異,為了方便。我們首先設置一些環境變量,如下所示:
C:> SET WTK_HOME=C:WTK22
C:> SET MIDPAPI=%WTK_HOME%libmidpapi20.jar
C:> SET MIDPCP=%WTK_HOME%wtklibkenv.zip;
%WTK_HOME%wtklibkvem.jar;%WTK_HOME%wtkliblime.jar;
%WTK_HOME%libcldcapi10.jar
在WTK_HOMEaPPS目錄下面新建一個目錄命名為cmdProject。cmdProject將作為我們的項目目錄。在cmdProject中新建如下四個子目錄:
·src——存放Java源文件
·tmpclasses——編譯後的class文件
·classes——經過預校驗的class文件
·bin——存放JAD和jar文件
做好所有准備工作後,開始新建MIDlet。首先在src目錄下創建HelloWorld.Java文件。源文件內容如下所示:
import Javax.microedition.midlet.*;
import Javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet implements CommandListener {
private Display display;
public static final Command exitCommand = new Command("退出",Command.EXIT,1);
public HelloWorld(){}
public void startApp(){
if(display == null){
display = Display.getDisplay(this);
}
TextBox t = new TextBox("Netbeans", "出色的Java開發工具", 256, 0);
t.addCommand(exitCommand);
t.setCommandListener(this);
display.setCurrent(t);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}
public void commandAction(Command cmd,Displayable displayable){
if(cmd == exitCommand){
destroyApp(false);
notifyDestroyed();
}
}
}
下面的命令用來編譯src目錄下的所有源文件並且把他們輸出到預先創建好的目錄tmpclasses。注意我們已經指定了MIDP API的類路徑,確保編譯器使用CLDC和MIDP的類庫進行編譯,否則會使用J2SE SDK的類來編譯。
C:WTK22aPPScmdProject>javac –d tmpclasses -bootclasspath %MIDPAPI% -classpath %MIDPCP% src/*.Java
執行上面的操作後可以在tmpclasses目錄下看到HelloWorld.clas文件,現在應該對class文件進行預校驗。
C:WTK22aPPScmdProject>preverify –classpath %MIDPAPI%;%MIDPCP%;tmplasses -d classes tmpclasses
經過預校驗的class文件已經存放在了classes目錄,下面可以使用jar命令把這些文件打包。在此之前使用記事本編寫一個 MANIFEST.MF文件存放在cmdProject/classes目錄中,MANIFEST.MF是jar包內的描述文件。內容如下:
Manifest-Version: 1.0
MIDlet-1: HelloWorld,,HelloWorld
MIDlet-Jar-URL: HelloWorld.jar
MIDlet-Name: HelloWorld
MIDlet-Vendor: J2MEdev,RT Inc.
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
使用jar命令進行打包操作:
C:WTK22aPPScmdProjectclasses>jar cvfm HelloWorld.jar MANIFEST.MF *.class
這樣將在classes目錄下生成HelloWorld.jar文件,文件大小為1277字節(在不同電腦上可能不同)。使用記事本編寫一個 HelloWorld.JAD文件,注意一定要在JAD文件中添加MIDlet-Jar-Size屬性,通過察看HelloWorld.jar的文件大小 可以得到。HelloWorld.JAD文件內容如下:
MIDlet-1: HelloWorld,,HelloWorld
MIDlet-Jar-URL: HelloWorld.jar
MIDlet-Jar-Size: 1277
MIDlet-Name: HelloWorld
MIDlet-Vendor: J2MEdev,RT Inc.
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
最後使用emulator命令來運行HelloWorld應用程序,運行界面如圖1-2所示:
C:WTK22aPPScmdProjectclasses>c:/wtk22/bin/emulator -Xdescriptor HelloWorld.JAD
圖1-2
使用命令行方式讓我們更容易理解MIDP應用程序的開發流程。總結如下:
1. 編寫Java源文件
2. 編譯Java源文件為class文件
3. 對class文件進行預校驗,這一點與J2SE環境有區別。由於移動設備的內存和處理器能力有限,如果像J2SE那樣在虛擬機內進行校驗處理那麼會給設備帶來很大的負擔。因此預校驗選擇在開發平台中完成。目標設備上的虛擬機只進行少量的校驗工作。
4. 編寫MANIFEST.MF文件,打包項目文件包括class文件和資源文件,例如文本和圖片。
5. 編寫JAD文件
WTK 2.2還提供了很多有用的輔助工具用於開發J2ME應用程序,例如網絡監視器可以方便的監視客戶端與服務器端的通信;內存監視器可以監視程序運行過程中內 存的消耗情況,可以以此為根據對程序進行適當的優化;短消息控制台和藍牙控制中心可以在開發基於WMA和藍牙的應用程序時協助調試。
盡管WTK2.2已經提供了如此多的功能,還是很難掩飾其不能編輯代碼,對項目管理不夠強大的不足。下面介紹幾款非常出色的集成開發環境。
Netbeans IDE和Mobility Pack
Netbeans是一個開源項目,致力於為開發者提供穩定、出色的開發工具。Netbeans IDE和Netbeans平台是netbeans.org的兩個著名產品。目前Netbeans IDE的下載次數已經超過了500萬次,可見這一集成開發環境受歡迎的程度。現在最為穩定的版本是Netbeans IDE 4.1,雖然官方已經發布了功能更為強大的Netbeans IDE 5.0 beta2版,這裡還是推薦開發者使用Netbeans IDE 4.1,同時期待Netbeans IDE 5.0正式版的發布。
Mobility Pack用於開發、測試和調試MIDP應用程序。Mobility Pack 4.1可以和Netbeans IDE 4.1無縫集成,支持CLDC 1.1和MIDP 2.0開發環境。Mobility Pack還可以很容易地與第三方模擬器集成為開發者提供所需的運行環境。
首先 從http://www.Netbeans.org下載 Netbeans IDE 4.1和Mobility Pack 4.1,可以根據愛 好選擇英文版或者中文版本。和其他的Windows軟件的安裝方式一樣,依次安裝Netbeans IDE 4.1和Mobility Pack 4.1。這樣我們就已經搭建好了J2ME的開發環境,比下一節將要介紹的eclipse要容易一些。
Netbeans IDE把項目按照類別分為:常規、Web、企業和移動。開發MIDP應用程序的時候,應該選擇移動分類。在此分類中可以新建Mobile Application、Mobile Library,還可以直接導入WTK自帶的Demo項目。
Netbeans IDE和Mobility Pack提供的項目管理功能非常出色,將目標平台、應用程序描述符、編譯運行、混淆、簽名等功能集成在了一起。開發者只需要選中項目,右鍵選擇屬性即可配 置上述選項。值得注意的一點是,當項目中使用了圖片或者媒體文件等資源的時候,應該在“庫和資源”選項中講資源文件所在的文件夾添加到“捆綁的庫和資源” 中。避免在Java程序中訪問資源的時候拋出空指針異常。Mobility Pack 4.1還直接集成了Proguard混淆器,可以設置混淆的級別,混淆的級別越高,混淆的力度就越大。
Mobility Pack 4.1提供了可視化用戶界面設計器,開發者可以使用鼠標通過拖拽的方式設計應用程序的用戶界面,通過流程控制器實現界面之間的跳轉,而不用編寫任何代碼。 無線連接向導是Mobility Pack 4.1另一新特性,可以方便快速的開發出端到端的企業級應用程序,服務器端只提供需要導出的服務類,Netbeans IDE會自動生成服務器端的servlet以及客戶端用於連接網絡的代碼。雖然上述兩個功能使用起來非常方便,但是缺乏靈活性,你很難再更改開發工具為你 自動生成的代碼。開發者使用的時候應該謹慎選擇。同時希望Mobility Pack 5.0進一步完善和增強上述兩個令開發者心動的特性。
Eclipse和eclipseME
Eclipse是IBM開發的開源工具,恐怕已經成為了Java開發者最為欣賞的開發工具。圍繞Eclipse的插件更是層出不窮。eclipseME就是一個非常出色的用於開發MIDP應用程序的第三方插件。上述軟件可以分別從http://www.eclipse.org和http://www.eclipseme.org下 載,推薦使用Eclipse 3.1和eclipseME 1.2.1版本。直接解壓縮eclipse 的壓縮文件到D:eclipse即可完成安裝,接下來需要安裝eclipseME插件。運行eclipse,選擇“help”——“Software Updates”——“Find and Install”——“search for new features to install”,然後選擇“new Archived Site”,找到eclipseME1.2.1發布包的目錄。按照系統提示最後完成eclipseME插件的安裝。
成功安裝了 elcipseME插件後,還需要在“Preferences”——“J2ME”——“Platform Components”中添加Wireless Toolkit,按照系統提示將前面安裝的WTk 2.2加入,這樣就徹底搭建了eclipse開發J2ME程序的環境。可見使用eclipse搭建J2ME的開發環境比Netbeans IDE稍顯復雜。事實上,管理eclipse的各種插件已經讓很多開發者頭疼不已,有些插件的更新還很難保證。這也是為什麼筆者放棄了長期使用的 eclipse,選擇了Netbeans IDE 4.1。
JBuilder
JBuilder是開發MIDP應用程序的另一選擇,與前面介紹的工具不同的是,JBuilder並非免費軟件,開發者需要購買才可以使用正式版本。從 JBuilder 9版本開始,Borland將WTK直接集成到了開發工具內。如果使用以前版本的JBuilder,那麼需要首先安裝MoblIESet插件。其實,各種 開發工具只是以自己的方式對MIDP應用程序的開發進行了封裝,原理還是前面介紹的MIDP應用程序的開發流程。因此這裡不對如何使用JBuilder開 發J2ME程序做過多介紹,讀者可以參考開發工具的幫助文檔。
開發工具集成第三方SDK
設備制造商的SDK各式各樣,很難全面講解如何將它們集成到一種或者多種開發工具中,本節的目標在於介紹一種整合的思路。對於不符合統一模擬器接口 (UEI)的SDK,例如Motorola的J2ME SDK,開發者應該參考廠商發布的文檔,按照說明將其整合到適當的開發工具中;對於符合UEI接口的第三方SDK,例如Nokia和 SonyEriCSSon提供的J2ME SDK,我們只需要把第三方SDK的根目錄作為目標平台添加到開發工具的SDK(或者稱為Java平台)中。這樣在新建MIDP項目的時候,就可以方便的 選擇這些SDK和提供的模擬器了,如果需要它們自帶的類庫,也可以把相關的jar文件添加到項目中。
以Netbeans IDE 4.1整合Nokia Developer Suite 3.0為例,假設NDS 3.0安裝在C:Nokia目錄。運行Netbeans IDE 4.1,選擇工具——Java平台管理器——添加平台,選擇平台文件夾為C:NokiaDevices Nokia_Prototype_SDK_2_0。然後按照系統提示進行操作,NDS 3.0就可以正常集成到Netbeans IDE開發環境中了。
總結
開發工具固然重要,它可以提高軟件開發效率,縮短周期。甚至可以方便的進行單元測試和團隊協作。但是,掌握MIDP應用程序模型,熟悉開發流程比單純地 掌握開發工具更加重要。因此本文的重點放在了介紹如何使用命令行開發MIDP應用程序,為後面介紹開發工具奠定了基礎。J2ME技術發展非常迅速,新技術 層出不窮。趕快選擇一款適合你的開發工具,趕上這趟飛速行進的列車吧。