原文: j2megame.org站长博客 

最近一直在寻找一种简单的方式来给J2ME程序打包,包括预处理,生成JAD,JAR的一系列自动化处理

Antenna就可以实现这一系列功能,个人觉得比polish相对要简单一些,也傻瓜一些,可以说是专门为j2me开发的一套ant的扩展

Antenna官方下载: http://sourceforge.net/project/showfiles.php?group_id=67420

Antenna文档首页: http://antenna.sourceforge.net/ 

写下本文时的,相关程序的版本:

Eclipse 3.3.2 + EclipseMe 1.7.7 + antenna 1.0.2 

下面就开始配置:

1. 下载:

去下载首页,下载 antenna-bin-1.0.2.jar (Antenna的执行包)

2. 安装:

Eclipse 3.3 本身就自带了Ant 1.7版本,所以Ant就不必下了,把那个JAR包,添加过来就可以了 

打开eclipse

菜单 Window ->  Preferences -> Ant -> Runtime -> Classpath -> Ant home Entries

随便选择一个JAR包,然后点击右边的 Add External JARs, 将下载的包,加入到Eclipse库中

这样就可以了,不必安装什么插件什么的

3. 添加 build.xml 

也不用在工程项目点击邮件,自动生成XML,这样我个人认为也不好用

OK,自己书写一个XML就可以了

我的一个示例(需要存储为UTF-8格式文件) (6月15日更新):

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <project name="brick" default="build">
  4.  
  5.         <taskdef resource="antenna.properties" />
  6.  
  7.         <target name="init" description="变量定义">
  8.                 <echo message="Define variable" />
  9.  
  10.                 <!-- 机型 -->
  11.                 <property name="mobile.vendor" value="Nokia/7610" />
  12.  
  13.                 <!-- JAD与JAR -->
  14.                 <property name="jad.filename" value="brick" />
  15.                 <property name="jad.midlet-name" value="brick" />
  16.                 <property name="jad.midlet-vender" value="wp" />
  17.                 <property name="jad.midlet-version" value="1.0.0" />
  18.                 <property name="jad.midlet-class" value="brick.BrickMidlet" />
  19.                 <property name="jad.midlet-icon" value="/icon.png" />
  20.  
  21.                 <!-- WTK参数 -->
  22.                 <property name="wtk.cldc.version" value="1.0" />
  23.                 <property name="wtk.midp.version" value="2.0" />
  24.                 <property name="wtk.obfuscate" value="true" />
  25.                 <property name="wtk.debug" value="false" />
  26.                 <property name="jad.manifast.version" value="1.0"/>
  27.  
  28.  
  29.                 <!-- 预处理信息显示 -->
  30.                 <property name="mobile.show" value="false" />
  31.                 <property name="dist.show" value="false" />
  32.  
  33.                 <!-- 系统参数 -->
  34.                 <property name="basedir" value="." />
  35.                 <property name="wtk.home" value="D:\WTK2.5.1" />
  36.                 <property name="wtk.proguard.home" value="D:\proguard4.2" />
  37.  
  38.                 <!-- 不被修改的参数 -->
  39.                 <property name="jar.filename" value="${jad.filename}" />
  40.  
  41.                 <!-- 目录定义 -->
  42.                 <property name="dir.src" value="${basedir}\src" />
  43.                 <property name="dir.res" value="${basedir}\res" />
  44.                 <property name="dir.output" value="${basedir}\build" />
  45.                
  46.                 <property name="dir.output.dist" value="${dir.output}\dist" />
  47.                 <property name="dir.output.classes" value="${dir.output}\classes" />
  48.                 <property name="dir.output.deployed" value="${dir.output}\deployed" />
  49.         </target>
  50.  
  51.         <target name="clean" depends="init" description="初始化环境">
  52.                 <echo message="Clean dir" />
  53.                
  54.                 <delete dir="${dir.output}" />
  55.         </target>
  56.  
  57.         <target name="preprocess" depends="init,clean" description="预处理">
  58.                 <echo message="preprocess" />
  59.                
  60.                 <mkdir dir="${dir.output.dist}" />
  61.  
  62.                 <wtkpreprocess srcdir="${dir.src}" destdir="${dir.output.dist}"
  63.                         device="${mobile.vendor}" verbose="${mobile.show}"  
  64.                         printsymbols="${dist.show}" />
  65.         </target>
  66.  
  67.         <target name="compile" depends="preprocess" description="编译">
  68.                 <echo message="Starting compile" />
  69.                
  70.                 <mkdir dir="${dir.output.classes}" />
  71.  
  72.                 <echo>build from all the ${dir.src} to ${dir.output.classes}</echo>
  73.  
  74.                 <wtkbuild srcdir="${dir.output.dist}" destdir="${dir.output.classes}"
  75.                         debug="${wtk.debug}" >
  76.                 </wtkbuild>
  77.         </target>
  78.  
  79.         <target name="build" depends="compile" description="生成">
  80.                 <echo message="Packaging library" />
  81.                
  82.                 <copy todir="${dir.output.classes}">
  83.                         <fileset dir="${dir.res}" />
  84.                 </copy>
  85.                
  86.                 <mkdir dir="${dir.output.deployed}" />
  87.  
  88.                 <!-- 执行自己修改的wtkjad -->
  89.                 <wtkjad jadfile="${dir.output.deployed}\${jad.filename}.jad"
  90.                         name="${jad.midlet-name}" vendor="${jad.midlet-vender}"
  91.                         version="${jad.midlet-version}" encoding="UTF-8">
  92.  
  93.                         <midlet name="${jad.midlet-class}" icon="${jad.midlet-icon}"
  94.                                 class="${jad.midlet-class}" />
  95.  
  96.                         <attribute name="MIDlet-Icon" value="${jad.midlet-icon}" />
  97.                         <attribute name="MicroEdition-Configuration" value="CLDC-${wtk.cldc.version}" />
  98.                         <attribute name="MicroEdition-Profile" value="MIDP-${wtk.midp.version}" />
  99.                         <attribute name="Manifest-Version" value="${jad.manifast.version}" />
  100.                 </wtkjad>
  101.                
  102.                 <!-- 执行自己修改的wtkpackage -->
  103.                 <wtkpackage jarfile="${dir.output.deployed}\${jar.filename}.jar"
  104.                         jadfile="${dir.output.deployed}\${jad.filename}.jad"
  105.                         obfuscate="${wtk.obfuscate}" preverify="true"
  106.                         keepManifestOrder="true">
  107.  
  108.                         <fileset dir="${dir.output.classes}" />
  109.                 </wtkpackage>
  110.                
  111.                 <!-- 用winrar 更新 MF 文件 本块已经无作用,请参考本博客关于Antenna乱码的文章
  112.                 <exec dir="${dir.output}" executable="cmd.exe" os="Windows XP" >

  113.                         <arg line="/c ${winrar.home}\WinRAR.exe A -apMETA-INF ${dir.output.deployed}\${jar.filename}.jar MANIFEST.MF"/>
  114.                 </exec>
  115.                 -->
  116.         </target>
  117.  
  118.         <!--下面可以根据需要,可以增加run task
  119.     <target name="run" depends="build">

  120.         <wtkrun jadfile="${dir.output}/${jad.filename}.jad"
  121.                 device="DefaultColorPhone" wait="true" >
  122.         </wtkrun>
  123.     </target>
  124.         -->
  125. </project>

说明:

  1. 直接把这个文件存为 Build.xml,放在工程的根目录上,eclipse的工程目录刷新一下,就OK了 
  2. 记得自己更改自己的WTK和Proguard路径,还有一些其他的JAD属性和Midlet属性 
  3. 还有就是当前这个版本,是不支持JAD和MANIFEST.MF中文名字的,也就是暂时不支持UTF-8格式,就会造成中文乱码,是因为Antenna包的问题, 我认为是BUG,但是看到官方说明上,也已经提醒了,以后会支持UTF-8格式,我个人已经发现这个问题的一个解决方法,可以看一下这篇文章 《Antenna生成JAD和MANIFEST.MF中文乱码一种解决方法(UTF-8)》

4. 添加预处理

  1. //#ifdef Nokia/7610
  2. //# System.out.println("如果是7610机型,会自动生成");
  3. //#else
  4.       System.out.println("不是7610机型,自动屏蔽");
  5. //#endif

预处理以后,会自动处理,很方便吧,以后移植起来就很方便了,而且还支持XML的参数,也可以控制J2ME程序不同版本,相当的强大!更多的预处理功能,参考官方文档就可以了

6. 运行

在左边的工程区,找到Build.xml,右键 Ant Build, OK, 运行完毕,生成

5. 我写的XML,生成目录结构

-工程目录
    -bin
    -src
    -res
    -build (Antenna打包路径)
        -classes (存放class文件和资源文件)
        -deployed (生成的jad和jar文件)
        -dest (预编译后,生成的java文件)
    -deployed

参考文章: 《Antenna与j2me打包》