本文重要探討如何應用j2mepolish進行build,至於j2mepolish的其他強盛功效,本文不涉及。本人接觸J2MEpolish時間不長,若有漏洞或出錯,請途經的朋友指正,同時歡迎大家拍磚。
對於J2mepolish的重要功效,不用再多講,其大名在j2me已經如雷貫耳。若還有朋友懂得或希看加深“情感”,請拜訪www.J2MEpolish.org。
J2MEpolish安裝安裝過程實在很簡略,在此重要探討關於eclipse的插件“mepose”。在Javaeye上,有文章探討J2MEpolish的安裝過程,其中,mepose是在另外獨立安裝的插件,而在2.0-RC4版本中,自帶了mepose插件,只要在安裝過程中填進eclipse.home和選擇Eclipse Integration(Mepose),就可以安裝mepose插件。
在Eclipse中應用J2MEpolish假如在Eclipse的file->new->project呈現j2mepolish工程,則闡明mepose插件已經成功安裝,至此,就可以新建j2mepolish工程。新建的J2MEpolish工程中,包含了主動創立的build.xml文件,以及src、resource等默認目錄。運行只需右鍵選中build.XML,點擊run as->ant build。
當然,不應用mepose插件也可以,由於Eclipse默認支撐ant。所以,只需要按照sample中的目錄結構存放資源和源碼,並是用語法准確的build.XML文件就可正常應用j2mepolish,畢竟,J2MEpolish的build功效,只是ant的擴大。
Eclipse的plugins目錄中,自帶有ant,eclipse3.2中的ant版本為1.6.5。假如希看應用自己的ant,可以在Eclipse中的Windows->preference->ant中設置Ant Home,將路徑指向自己的ant目錄,這樣可以保持與Eclipse外的ant版本一致。
build.XMLsample中的build.xml,個人感到寫得太過於繁瑣,中間攙雜太多注釋。這對於不初學者,特別是不熟悉ant腳本的朋友,會比擬“愁悶”。由於本文重點探討ant的build功效,所以,只討論build.XML中的“J2MEpolish”target,其他部分,請參考相干文檔。
重要用於描寫midlet相干信息,幫助設置JAD和MANIFEST。但部分中,可以通過子元素設置jad其他屬性。有關相干屬性的定義,請參考favoyang翻譯《創立》或《Pro J2ME Polish Open Source Wireless Java Tools Suite》
固然是可選,但卻與device數據庫緊密相干。假如需要應用device相干數據,特別是對多版本的J2ME程序打包,這部分的設置尤為重要。
實際的build把持部分,在此設置midlet類名,以及第三方庫包的導進等。在屬性中,usePolishGui用於標示是否實用polish的GUI功效,留心該屬性缺省是true。所以,假如沒有用到polish的該功效,最好將其設置為false,否則打包時,將會加進polish自帶一些類庫,因此,會增加jar包的大小。
部分也是j2mepolish創立的重要部分,但並非本文討論重要,具體內容請參考favoyang翻譯《創立》或《Pro J2ME Polish Open Source Wireless Java Tools Suite》。
Device數據庫
J2mepolish存儲了超過 230種 J2ME 設備和相應的J2ME 參數,如 Canvas的大小, APIs, 支撐格局等。其中,所有的數據都定義在device.xml文件中(安裝過程,需選中External Device Database)。當然,可以隨時更新device.XML數據庫。
事實上,device數據庫對於j2me開發非常重要。在本人的開發經歷中,許多次都無奈難於獲得某類機型的具體信息,如:堆棧大小,是否支撐特定的擴大包等。即使有的公司擁有這樣一套數據聚集,也多半是以Excel的情勢保留,卻無法與程序聯合起來應用。這點,也為j2me程序的機型適配工作帶來了沉重的工作量。J2mepolish在這方面對j2me開發做出重大貢獻,以至於想antenna這樣的開源項目已經支撐J2MEpolish供給的device數據庫。
在開發過程中,聯合J2MEpolish的預處理機制,我們可以很便捷的應用該數據庫。
空話了大半天,先來看看具體device是如何定義的,以nokia/6600為例:
XML 代碼
<device>
<identifier>諾基亞/6600identifIEr>
<groups>SerIEs60groups>
<features>hasCamerafeatures>
<capability name="OS" value="SymBian OS 7.0s"/>
<capability name="ScreenSize" value="176x208"/>
<capability name="BitsPerPixel" value="16"/>
<capability name="JavaPackage" value="mmapi, wmapi, btapi, jtwi"/>
<capability name="JavaPlatform" value="MIDP/2.0"/>
<capability name="VideoFormat" value="3gpp, mpeg-4, realvideo"/>
<capability name="SoundFormat" value="midi, midi24, true tones, amr, wb-amr"/>
<capability name="HeapSize" value="3mb"/>
<capability name="MaxJarSize" value="dynamic"/>
<capability name="CameraResolution" value="640x480"/>
<capability name="CameraZoom" value="2"/>
<capability name="Font.small" value="15"/>
<capability name="Font.medium" value="16"/>
<capability name="Font.large" value="21"/>
<capability name="Bugs" value="BluetoothRfcommInputStream"/>
<capability name="wap.userAgent" value="諾基亞6600/*"/>
</device>
用於標示該設備,由廠商和設備名組成。
用於標示該設備屬於哪個Group,設備本身的記號(symbol)持續於group的。例如,6600屬於SerIEs60組,所以6600就擁有nokia-ui記號。J2MEpolish在預處理//#if nokia-ui時,就處理為true。而Group本身也存在著持續關系,例如,SerIEs60又持續於諾基亞-UI組。
用於標示該設備具有的功效,如,攝像頭、觸摸屏等。
用於設備各項重要屬性,如堆棧大小,屏幕大小等。在本例中,沒有左右軟鍵值定義,是由於其已經被定義在SerIEs60組中。
應用device數據庫和預處理
本節重點討論如何應用指定設備的相干數據。首先,在build.XML中指定設備,在此我們以諾基亞/6600和Motorola/E680為例,定義如下:
XML 代碼
<deviceRequirements>
<requirement name="IdentifIEr" value="諾基亞/6600,Motorola/E680" />
</deviceRequirements>
下面按照以下幾點目標來設計代碼:
1、6600版本應用FullCanvas,E680版本應用SetFullScreenMode
2、6600版本應用諾基亞的翻轉方法,E680版本應用Midp2.0的
3、獲取設備自身的堆棧大小,屏幕大小等信息
源代碼片段如下:Java 代碼
} public void drawClip(Graphics g, int x, int y, Image image, int clipX, int clipY, int clipWidth, int clipHeight, int mode) { // #if polish.api.nokia-ui // # ... // # nokia的切片繪制方法,具體代碼省略 // # ... // #else //... //midp2.0的切片繪制方法,具體代碼省略 //... // #endif } }運行build.XML之後,可以在build/real目錄下,找到預處理以後的6600版和E680版代碼。J2MEpolish的預處理成果就體現在此,預處理後代碼請感愛好的朋友動手實踐,在此就不貼出來了。
思考本人對於J2mepolish的懂得還需深進,但在應用之後,對J2MEpolish有以下幾點思考,歡迎大家交換。
Antenna:利用於j2me的ant擴大,最新版本支撐預處理,也支撐J2MEpolish的device數據庫。地址:http://antenna.sourceforge.Net/
J2ME Device DB:類似於Antenna的一個項目,擁有自己的設備數據庫,也支撐預處理。地址:http://J2ME-device-db.sourceforge.Net/pmwiki/index.PHP?n=Main.HomePage
軟件版本
J2MEpolish-2.0-RC4
jdk1.5
eclipse3.2
參考材料周游j2mepolish 拜訪地址:http://www.J2MEpolish.org/docs/tour-cn.Html
《Pro J2ME Polish Open Source Wireless Java Tools Suite》 作者:Robert Virkus
《創立》 翻譯:favoyang
J2MEpolish doc 安裝自帶
J2MEPolish集成到eclipse32 拜訪地址:http://www.Javaeye.com/topic/38138