使用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工具包

V 0.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 

你可能感兴趣的:(api,ant,servlet,websphere,j2me)