`
pandonix
  • 浏览: 399387 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用Ant对J2me程序打包

    博客分类:
  • J2ME
阅读更多
 

 

其实,Matrixcleverpig早已完成了这个工作,并形成了文档。本人也是根据这篇文章进行试验的,但是在实践的过程中,遇到了不少的困难。故在此通过文字记录下自己的经历,一来是总结,二来是希望对Ant感兴趣的朋友们有所帮助或启发。

版本

Ant1.7.0 ,Wtk2.5,JDK1.5

参考文章

http://www.matrix.org.cn/resource/article/43/43770_Ant_J2me.html 作者:cleverpig

http://dev.yesky.com/251/2264751.shtml 作者 mingjava

http://blog.csdn.net/Mailbomb/archive/2006/05/07/711332.aspx 作者 陈跃峰

Ant简介

Antapache发布的构建(Build)工具,用于控制程序的编译和打包。目前,最新版本为1.7.0。关于ant的相关配置,请仔细阅读Apache Ant 1.7.0 Manual 

Wtk打包的步骤

J2me开发,都离不开wtk,虽然在开发过程中,可以与JBuilderEclipseIDE合成,但在最终发布时,通常都很使用wtk来打包。首先,分析一下wtk打包的过程,值得注意的是,这也是编写ant脚本的重要参照。

1:编译src目录下的.java源代码

2:调用java工具preverify.execlass文件进行验证

3:将验证后的class以及res目录下的资源文件打成jar

4:调用混淆工具,如:progardjar包进行混淆,并解压缩

5:将经过混淆、解压缩后的class、资源文件生成jar包,并根据jad模版生成相应的jad文件,按成J2me程序的部署。

 

Ant脚本build.xml注:这个脚本是在cleverpig提供的脚本基础进行略为改动。重点描述我在实现过程中,遇到问题的部分。

具体antTask命令说明,请参考Apache Ant 1.7.0 Manual

编译:

  1. <target name="complie" depends="init" description="编译">                   
  2. <echo message="编译程序"/>                   
  3. <javac srcdir="${src.dir}" destdir="${build.dir}">                           
  4.     <bootclasspath path="${ midp.lib.dir }"/>                           
  5.     <classpath>                                   
  6.         <fileset dir="${midp.lib.dir}" includes="*.jar"/>                                    
  7.     classpath>                   
  8. javac>           
  9. target>  
xml 代码

我在实践的过程中,由于实验的源代码中用到Midp2.0的方式,脚本在执行到编译这步时,始终抱错,无法编译像setScreenModeplatFormRequest等方法。Wtk相关的路径设置如下:

wtk.home.dir=E:\\Develpment\\SDK\\WTK25

programName=U2Browser

midp.lib.dir=${wtk.home.dir}\\lib

midp.lib.path=${midp.lib.dir}\\cldcapi11.jar;${midp.lib.dir}\\midpapi20.jar 

 

 

指定的库包是midpapi20.jar就是MIDP2.0的呀,为何一直通不过呢?为此,我仔细阅读了相关文档,设置将JDKjavac命令再次温习一边。最终,发现问题出在bootclasspathclasspath的设置上面。以上脚本,bootclasspath设置在midp.lib.dir下,然后,classpathmidp.lib.dir中的所有*.jar文件导入。由于,javac在编译时,只会自动搜索bootclasspath下面的classjava文件,所以,无法将midpapi20.jarcldcapi11.jar两个库包导入。此外,classpath是将midp.lib.dir目录下的所有jar导入作为库包。我的wtk\lib目录下,同时拥有midpapi10.jarmidpapi20.jar,以及cldcapi10.jarcldcapi11.jar,所以在导入的时候,造成了库包的冲突,故无法编译midp2.0的方法。当然,这是本人之愚见,倘若哪天cleverpig大侠路过此处,可以解释一下这个问题。

正值高兴之余,以为能顺利编译通过时,编译又抱错,提示找不到StringBuilder类。Google之后,了解到StringBuilder属于JDK1.5的包,在”a”+b+”c”时,Java内部不再使用StringBuffer来重载String’+’操作,而使用StringBuilder来代替。然而在J2me中,没有StringBuilder这个类,所以就问题就出现。解决办法,在编译时,指定JDK版本为1.4

编译部分的脚步修改如下:Target都运行正常

xml 代码
  1. <target name="complie" depends="init" description="编译">                   
  2.   
  3. <echo message="编译程序"/>                   
  4.   
  5. <javac srcdir="${src.dir}" destdir="${build.dir}" source="1.4>                           
  6.   
  7.        <bootclasspath path="${ midp.lib.path}"/>                                         
  8.   
  9. javac>           
  10.   
  11. target>  

 

剩余各Target都运行正常

源码下载

其他的配置文件请到http://www.matrix.org.cn/resource/article/43/43770_Ant_J2me.html下载

思考

从我个人的使用感受而言,使用Ant打包J2meWtk更自动化一些。当然,如果只是打一个包,体现不出什么优势,如果在发布J2me程序时,要求同时打多个版本的包,那Ant的优势就体现出来了。相信有过J2me开发的朋友都有这方面的经验,发布时,由于版本太多,而各版本之间的差异可能就是键值或屏幕大小等比较细小的地方,如果使用Wtk打包,慌乱之中难免出错。使用Ant在配合一些配置文件,这样打包的过程就方便多了。

当然,使用antJ2me打包,脚本显得臃肿,很多配置需要设定。不过,没有关系,已经有人更进一步了,这就是antenna,一个基于antj2me专用打包工具。除此之外,大名鼎鼎的J2mepolish也是使用ant来打包,这也是其标榜的重要优势之一。

分享到:
评论
3 楼 Samanoseky 2012-02-23  
感谢~~~! 折腾了2天,看到你的帖子才发现确实是因为包冲突.midpapi10.jar和midpapi20.jar,以及cldcapi10.jar和cldcapi11.jar 哈哈... 
2 楼 freedomray 2011-03-26  
Ant打包的确方便。我使用ant编译j2me工程时,能够正常编译,做出来的jar也可以在电脑上使用模拟器正常运行。但放到手机上却无法安装,提示“程序与手机不兼容”,简直让人抓狂。。。。
1 楼 pandonix 2007-08-10  
在javaeye的第一篇文章,帖上费了好大的劲啊,不容易,Mark一下:)

相关推荐

Global site tag (gtag.js) - Google Analytics