使用Antenna打包J2me程序

 使用Antenna打包J2me程序

 

一、概述

Antenna: [ æn'tenə ]  
n. 觸角,天線

       由於手中的項目需要爲多個合作商提供版本,並且要求服務器端能夠通過這些版本區分出來自不現合作商的用戶,因此需要爲每個合作商打包一個客戶端;假設有100個合作商,每個合作商要打包7個機型,則共需打包7*100=700個包;假設打好每個包並做簡要測試需要時間5分鐘,則700個包共需用時:700*5=3500分鐘=3500/60=58小時;顯然,使用人工進行打包是一個不現實的做法,即耗費人力、資源,又效率低下、出錯率高;

 

二、學習過程

2.1 初識Antenna

Antenna 1.0.2 released (30/5/2008)

修正了在WTK打包時空指針錯誤;

當使用WtkPackage->exclude_from_manifest打包時,如果在mainfest中沒有指定被排除的jad屬性,會導至wtk在打包時拋空指針錯誤;

Overview

 

概述:

Antenna爲開發基於MIDP的無線Java應用提供了一套Ant任務工具;使用Antenna,你可以編譯、預驗證、打包、混淆、運行MIDP應用、處理Jad描述文件、將Jar文件轉換爲Sun和IBM啓用的運行於PalmOs+MIDP運行環境中的PRC文件、通過定義發佈任務或Http Servlet通信實現的OTA 發佈;Antenna提供了一個很小的預處理程序用於通過一份源代碼打包出不同版本的MIDLet應用;

當然,你可以使用J2me WTK或其它的JavaIDE工具實現大部份類似的工作,但是使用Ant腳本方式的好處是可以使得定義和重建Build處理等操作獨立於特定的編程環境;

Antenna任務大都圍繞WTK提供的功能展開,因此Antenna需要WTK環境;如果你想在打包時進行混淆,你到少需要在硬盤中安裝有以下兩種工具之一:RetroGuard and ProGuard;同時,Ant本身也是必須的,據用戶反映v1.5.0應當是最低的版本要求;Antenna在類似Eclipse or JEdit這樣的提供Ant支持的集成開發環境中運行時表現良好;

 

下表是Antenna中包括的功能清單:

 

Task

Purpose

WtkJad

生成或更新Jad描述文件

WtkBuild

編譯j2me項目

Ant標準Javac任務的擴展,爲預驗證設置適當的bootclasspath

WtkPackage

 

通過對Jad文件的正確操作擴充Ant’s的標準Jar任務,並能夠在最終的Jar文件中包含完整的類庫.WtkPackage還能對生成的文件進行預驗證及混淆;

WtkMakePrc

 

Jar/Jad轉換爲PalmOs PRC文件,以便使其能夠在Palm OsMIDP環境中使用;

WtkRun

 

WTK模擬器中運行MIDlet;

WtkRapc

執行BlackBerry rapc編譯器,生成BlackBerry下使用的.con文件;

WtkPreverify

獨立驗證一套類庫.這個操作通常是不需要的,因爲打包工作包含了相同的功能;

WtkObfuscate

獨立的混淆一個Jar文件.這個操作通常是不需要的, 因爲打包工作包含了相同的功能;

WtkSmartLink

Jar文件中刪除不需要的類;

WtkPreprocess

簡單的Java預處理器,類似於C及其它編程語言,它允許條件編譯及選擇性的包含源文件;

WtkDeploy

 

佈署任務,允許將MIDlet佈署到遠端的服務器當中,以便用戶通過WebServer進行下載;

WtkSign

MIDlet進行簽名

 

Samples

 

例子

Antenna的安裝源目錄的”samples”文件夾下提供了幾個Build.xml文件這些文件顯示瞭如果在WTK中建立默認的Demo MIDlet及一些其它的內容;運行這些例子是測試自己的安裝及build.xml文件的最好的起點;

Antenna項目存放在SourceForge網站,並遵循LGPL協定.

 

Mailing List

郵件列表:

以下是一個關於Antenna討論的郵件列表.

http://sourceforge.net/mailarchive/forum.php?forum_name=antenna-discussion

 

Contact

If you find Antenna useful, you might want to send a picture postcard of your hometown or country telling me so. My surface mail address is: Jrg Pleumann, Amselstrasse 41, D-45472 M錕絣heim, Germany. E-mails are also fine, but don't underestimate the productivity (and ego) boost that a wall full of postcards next to my desk will cause.

 

Setup

安裝Antenna的過程很直接.

第一步,你需要將Antenna Jar文件放入Ant’s Lib 文件夾或你的classpath.

然後你需要跟據需要調整一些參數,這些參數位於你所使用的build.xml文件或在build.xml文件中指定的全局文件當中;

<taskdef resource="antenna.properties"/>

如果你不想將Antenna置入你的classpath,下面的變量仍然能夠工作:

<taskdef resource="antenna.properties" classpath="full name of Antenna jar file"/>

Selecting a WTK and APIs for a project

爲項目選擇一個WTKAPI

 

 

所有的Antenna任務均依賴一個用於表明WTK安裝目錄的屬性”wtk.home”.例如,如果你的WTK位於”c:/Java/wtk-1.0.4”,那麼你就需要在build腳本中加入下面的行:

<property name="wtk.home" value="c:/Java/wtk-1.0.4"/>

根據你所使用的WTK的版本,在你的MIDlet中將使用不同的基礎API及擴展API;Antenna會自動驗測WTK的版本,並通過幾下規則選擇API. 默認的BOOTCLASSPATHCLDC-1.0MIDP1.0 構成,不包括擴展APIs. 如果你想改變設置,你可以使用以下屬性(“WTK”列爲這個屬性批定WTK的版本)

 

Property

Default

Purpose

WTK

wtk.cldc.version

1.0

Specifies the version of CLDC to use.

2.1+

wtk.midp.version

2.0 for WTK 2.x, 1.0 otherwise.

Specifies the version of MIDP to use.

2.0+

wtk.mmapi.enabled

false

Enables or disables the Multimedia API (MMAPI).

2.0+

wtk.wma.enabled

false

Enables or disables the Wireless Messaging API (WMA).

2.0+

wtk.wma.version

1.0

Selects the supported version of the Wireless Messaging API (WMA). Currently either 1.0 (JSR-120) or 2.0 (JSR-205) is allowed.

2.3+

wtk.j2mews.enabled

false

Enables or disables the J2ME Web Services API (J2MEWS).

2.1+

wtk.bluetooth.enabled

false

Enables or disables the J2ME Bluetooth API (JSR-82).

2.2+

wtk.java3d.enabled

false

Enables or disables the J2ME 3D API (JSR-184).

2.2+

wtk.optionalpda.enabled

false

Enables or disables the J2ME optional PDA packages (JSR-75).

2.2+

wtk.locationservices.enabled

false

Enables or disables the J2ME location services API (JSR-179).

2.3+

wtk.contenthandler.enabled

false

Enables or disables the J2ME content handler API (JSR-211).

2.3+

wtk.satsa.enabled

false

Enables or disables the J2ME Security and Trust Services API (JSR-177).

2.3+

wtk.miapi.enabled

false

Enables or disables the J2ME Mobile Internationalization API (JSR-238).

2.5+

wtk.ams.enabled

false

Enables or disables the J2ME Advanced Multimedia Supplements API (JSR-234).

2.5+

wtk.papi.enabled

false

Enables or disables the J2ME Payment API (JSR-229).

2.5+

wtk.s2dvgapi.enabled

false

Enables or disables the J2ME Scalable 2D Vector Graphics API (JSR-226).

2.5+

wtk.sipapi.enabled

false

Enables or disables the J2ME Session Initiation Protocol API (JSR-180).

2.5+

wtk.midpapi

Varies

Sets a totally custom BOOTCLASSPATH. Use this property if the set of APIs you need is not covered by the above properties (for example because you are using the system libraries provided another vendor or you have some important additional libraries).

1.0+

 

WtkJadWtkPackage任務中使用的”config”“profile”屬性都可以被一個用於選擇CLDCMIDP版本的屬性指定默認值;當你在你的build.xml文件的開始之處設置了版本屬性,你通常就不必再關注這些屬性;

 

Using the Websphere Micro Environment Toolkit for PalmOS

 

使用PalmOs下的Websphere Micro Environment Toolkit工具包

V0.9.11版開始,Antenna同時也支持PRC轉換(WME). 這種轉換需要爲IBM J9 VM生成PRC文件,

                                                               

Using Over-the-Air provisioning

 

使用空中提取(OTA)

 

除多種ANT任務外,本項目還提供了一個OTA Servlet的例子.Servlet包含在任務的同一個ZIP文件當中;它允許通過WtkDeploy上傳MIDlet套件,上傳後MIDlet套件可以通過WWWWap方式下載.一個有效的MIDlet套件列表可以在HtmlWML中進行關聯,這個列表可以使用模板機制進行修改;

 

運行OTA servlet需要以下步驟:

1.     服務器端要安裝Tomcat

2.     添加新的Web項目,例如, "<tomcat>/webapps"目錄下新建 "antenna"文件夾,然後在該目錄下新建 "WEB-INF"  "WEB-INF/lib" 子文件夾;

3.     Antenna源目錄下的”etc”目錄拷貝 "web.xml" 文件到”WEB-INF”,並根據自身需要進行設置.將二進制發佈文件 "antenna-bin.jar"拷貝到 "WEB-INF/lib"目錄;

4.     你現在應當有一份工作配置了,打開Tomcat或通過Web browser+ServletOTA機制來進行測試;如果servlet URLhttp://localhost/antenna,則可用的Htmlwml地址爲:http://localhost/antenna/index.html http://localhost/antenna/index.wml;僅當指定了目錄,servlet會償試決定使用正確形式的Http請求的Header信息;

5.     運行"deploy"例子測試發佈;(先要修改"build.xml" 文件)

6.     Antenna安裝目錄中”res”目錄中的兩個文件拷貝到”WEB-INF”目錄中並進行修改以構建自己頁面佈局; "index.html"文件中有說明文檔來告訴你該如何去做.

 

如果你使用修改過的模板來進行OTA操作,希望你能在頁面的底部加一個"Powered by Antenna"的超鏈接並指向Antenna的主頁;

 

 

 

參考資料:

 

Antenna官方網站:

http://antenna.sourceforge.net/

Antenna官方下載:

http://sourceforge.net/projects/antenna

 

 

 

Google上找到一篇文章:


  1. 很多人喜歡用 ant 來編譯打包 java 應用程序,可以很方便的生成 war 包在 j2ee 容器中運行,我在 sun 的網站上也看到了一篇
  2. 用 ant 打包 j2me 程序的教程:http://wireless.java.sun.com/midp/articles/ant/
  3. 測試了一下,還不錯,但美中不足的是,需要自己事先寫好 manifest.mf 和 jad 文件,於是心有不甘,繼續在 google 上搜索,
  4. 終於找了一個很強大的 ant 擴充包,專門打包 j2me 程序,很實用:http://antenna.sourceforge.net/
  5. 一次性可以自動編譯,預編譯,生成 jar,jad,prc(palm 的運行程序),甚至包括攪亂代碼.你所需要做的只是改少少build.xml裏的參數.
  6. 下面以 uidemo 爲例子,給大家 share 一下打包的過程.(本文適用於有ant使用經驗的用戶)
  7. 首先,假定你已經使用過ant,ant_home環境變量已經設置好了,把上述網站下載的antenna-bin.jar加入classpath
  8. 我在d:/my folder/projects/j2me/下建立了一個 uidemo 目錄,把j2mewtk/apps/uidemo下的 res,src 兩個目錄 copy 到這裏來,
  9. 同級目錄下建立一個 build.xml 文件,build.xml 內容如下,只有做出了中文註釋的幾個地方需要修改:
  10. <?xml version="1.0"?>
  11. <project name="uidemo" default="build" basedir=".">
  12.     <!-- define the wireless toolkit home directory. needed by the tasks. -->
  13.     <!-- 設置 j2mewtk 路徑. -->
  14.     <property name="wtk.home" value="c:/j2mewtk"/>
  15.     <!-- define some additional properties for this project. not required. -->
  16.     <!-- 設置 midlet 名稱和根路徑. -->
  17.     <property name="midlet.name" value="uidemo"/>
  18.     <property name="midlet.home" value="."/>
  19.     <!-- define the tasks. -->
  20.     
  21.     <taskdef name="wtkjad" classname="de.pleumann.antenna.wtkjad"/>
  22.     <taskdef name="wtkbuild" classname="de.pleumann.antenna.wtkbuild"/>
  23.     <taskdef name="wtkpackage" classname="de.pleumann.antenna.wtkpackage"/>
  24.     <taskdef name="wtkmakeprc" classname="de.pleumann.antenna.wtkmakeprc"/>
  25.     <taskdef name="wtkrun" classname="de.pleumann.antenna.wtkrun"/>
  26.     <taskdef name="wtkpreverify" classname="de.pleumann.antenna.wtkpreverify"/>
  27.     <taskdef name="wtkobfuscate" classname="de.pleumann.antenna.wtkobfuscate"/>
  28.     
  29.     <target name="clean">
  30.       <delete failonerror="false" dir="classes"/>
  31.       <delete failonerror="false">
  32.         <fileset dir=".">
  33.             <exclude name="build.xml"/>
  34.         </fileset>
  35.       </delete>
  36.     </target>
  37.     <target name="build">
  38.      
  39.     <!-- creat a new jad -->
  40.         <!-- 指定midlet的類和圖標. -->
  41.     <wtkjad jadfile="${midlet.name}.jad"
  42.                 name="sun samples - demos"
  43.                 vendor="sun microsystems"
  44.                 version="1.0.3"
  45.           <midlet name="uidemo"
  46.                 icon="/res/midp/uidemo/icon.png" 
  47.                     class="midp.uidemo.uidemo"/>
  48.         </wtkjad>
  49.     <mkdir dir="classes"/>
  50.         <!-- compile everything, but don@#t preverify (yet). -->
  51.         <wtkbuild srcdir="${midlet.home}/src"
  52.                   destdir="classes"
  53.                   preverify="false"/>
  54.         <!-- package everything. most of the necessary information is
  55.              contained in the jad file. also preverify the result this
  56.              time. to obfuscate everything, set the corresponding
  57.              parameter to "true" (requires retroguard or proguard). the
  58.              version parameter increments the midlet-version by one. -->
  59.         <!-- 設置是否需要攪亂,是否要預編譯,是否自動識別版本 -->
  60.         <wtkpackage jarfile="${midlet.name}.jar"
  61.                     jadfile="${midlet.name}.jad"
  62.                     obfuscate="false"
  63.                     preverify="true"
  64.                     autoversion="true">
  65.             <!-- package our newly compiled classes and the
  66.                  resources from the wtk@#s demo application. -->
  67.             <fileset dir="classes"/>
  68.             <fileset dir="${midlet.home}/res"/>
  69.             
  70.                 
  71.         </wtkpackage>
  72.             
  73.         <!-- convert the jar file into a midp for palmos prc file. -->
  74.         <wtkmakeprc jadfile="${midlet.name}.jad"
  75.                     prcfile="${midlet.name}.prc"/>
  76.         <!-- start the midlet suite -->
  77.                 
  78.         <wtkrun jadfile="${midlet.name}.jad" device="defaultcolorphone"/>
  79.     </target>
  80. </project>
  81. 最後在命令行下運行ant,一切就是這麼簡單
  82. 最後附帶說一下ant的安裝,也非常簡單,下載回來後設置環境變量ant_home到安裝目錄,將%ant_home%/bin加入path就可以了



這篇文章需要有ant的使用經驗,不幸的是我從來沒有用過ant;於是繼續在antenna官網上查找更多的文檔:

 

http://antenna.sourceforge.net/

 

Antenna 打包 J2ME
http://blog.113e.com/335279.shtml 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章