首先要学习ant的基本知识,参考文章:
Apache_Ant——使_Java_项目生成易如反掌,作者Matt Chapman
实际上常用是 Antenna,它 是基于 ant 的 j2me 开发工具。可以参考文章:
Antenna与j2me打包http://www.iteye.com/topic/117568。
Antenna的官方文档http://antenna.sourceforge.net/index.php#synopsis
我在eclipse里面打开的Project是LWUITDemo,ant代码是基于网上一个build.xml文件修改的:
《 j2me build.xml 例子》 作者: Peter http://hi.baidu.com/wapeter/blog/item/3beb9f2268f571f2d6cae2d2.html
遇到的问题:
调用proguard混淆会出错,因为是wtkpackage里面的obfuscate设置为true,但是又没有在下面加上具体的混淆参数。解决办法为单独用wtkobfuscate进行混淆,代码如下:
<target name="obfuscation" depends="build">
<echo>Starting obfucate</echo>
<!--mkdir dir="${dir.output}/Obf"/-->
<copy file="${dir.output}/${jar.filename}.jar" todir="${dir.output}/Obf"/>
<copy file="${dir.output}/${jar.filename}.jad" todir="${dir.output}/Obf"/>
<wtkobfuscate jarfile="${dir.output}/Obf/${jar.filename}.jar"
jadfile="${dir.output}/Obf/${jar.filename}.jad"
>
<preserve class="${jad.midlet-class}"/>
<!--argument value="-injars C:\Java_ME_platform_SDK_3.0\lib\LWUIT.jar"/-->
<argument value="-libraryjars C:\Java_ME_platform_SDK_3.0\lib\LWUIT.jar;C:\WTK2.5.2\lib\midpapi21.jar;C:\WTK2.5.2\lib\cldcapi11.jar;C:\WTK2.5.2\lib\wma20.jar;C:\WTK2.5.2\lib\mmapi.jar;C:\WTK2.5.2\lib\j2me-ws.jar;C:\WTK2.5.2\lib\j2me-xmlrpc.jar;C:\WTK2.5.2\lib\jsr75.jar;C:\WTK2.5.2\lib\jsr082.jar;C:\WTK2.5.2\lib\jsr184.jar;C:\WTK2.5.2\lib\jsr179.jar;C:\WTK2.5.2\lib\satsa-apdu.jar;C:\WTK2.5.2\lib\satsa-jcrmi.jar;C:\WTK2.5.2\lib\satsa-pki.jar;C:\WTK2.5.2\lib\satsa-crypto.jar;C:\WTK2.5.2\lib\jsr211.jar;C:\WTK2.5.2\lib\jsr238.jar;C:\WTK2.5.2\lib\jsr229.jar;C:\WTK2.5.2\lib\jsr180.jar;C:\WTK2.5.2\lib\jsr234.jar;C:\WTK2.5.2\lib\jsr226.jar;C:\WTK2.5.2\lib\jsr239.jar"/>
<argument value="-dontusemixedcaseclassnames"/>
<argument value="-microedition "/>
<argument value="-dontnote"/>
<argument value="-defaultpackage ''"/>
</wtkobfuscate>
</target>
另外要注意的问题就是preverify。wtkbuild,wtkpackage,wtkobfuscate里面过程都要preverify。如果将wtkbuild的preverify设置为false,wtkpackage打包出来的jar是不能执行的。但将wtkpackage的preverify设置为false,打包出来还是可以运行的。wtkobfuscate需要加上="-microedition"参数,使其针对midp设备进行preverify,否则混淆后的jar也是不能运行的。