使用J2mePolish的build功能

本文探讨如何使用J2MEPolish进行构建,重点介绍其在Eclipse中的应用、build.xml配置及利用预处理机制实现设备适配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要探讨如何使用j2mepolish进行build,至于j2mepolish的其他强大功能,本文不涉及。本人接触j2mepolish时间不长,若有漏洞或出错,请路过的朋友指正,同时欢迎大家拍砖。

对于J2mepolish的主要功能,不用再多讲,其大名在j2me已经如雷贯耳。若还有朋友了解或希望加深“感情”,请访问www.j2mepolish.org

虽然目前很多公司或个人已经熟练使用其开发J2me软件,但遗憾的是,国内对J2mepolish的交流太少。其中j2medev favoyang翻译了“j2mepolish用户手册”部分章节,感兴趣的朋友,可以到j2medev论坛进行下载:

http://www.j2medev.com/bbs/dispbbs.asp?boardID=32&ID=3800&page=2

 

J2mepolish安装

安装过程其实很简单,在此主要探讨关于eclipse的插件“mepose”。在javaeye上,有文章探讨j2mepolish的安装过程,其中,mepose是在另外独立安装的插件,而在2.0-RC4版本中,自带了mepose插件,只要在安装过程中填入eclipse.home和选择Eclipse Integration(Mepose),就可以安装mepose插件。

 

Eclipse中使用j2mepolish

如果在Eclipsefile->new->project出现j2mepolish工程,则说明mepose插件已经成功安装,至此,就可以新建j2mepolish工程。新建的j2mepolish工程中,包含了自动创建的build.xml文件,以及srcresource等默认目录。运行只需右键选中build.xml,点击run as->ant build

当然,不使用mepose插件也可以,因为Eclipse默认支持ant。所以,只需要按照sample中的目录结构存放资源和源码,并是用语法正确的build.xml文件就可正常使用j2mepolish,毕竟,j2mepolishbuild功能,只是ant的扩展。

Eclipseplugins目录中,自带有anteclipse3.2中的ant版本为 1.6.5 。如果希望使用自己的ant,可以在Eclipse中的Windows->preference->ant中设置Ant Home,将路径指向自己的ant目录,这样可以保持与Eclipse外的ant版本一致。

 

build.xml

sample中的build.xml,个人觉得写得太过于繁琐,中间夹杂太多注释。这对于不初学者,特别是不熟悉ant脚本的朋友,会比较“郁闷”。由于本文重点探讨antbuild功能,所以,只讨论build.xml中的“j2mepolishtarget,其他部分,请参考相关文档。

<info>主要用于描述midlet相关信息,帮助设置JADMANIFEST。但<build>部分中,可以通过<jad>子元素设置jad其他属性。有关<info>相关属性的定义,请参考favoyang翻译《创建》或《Pro J2ME Polish Open Source Wireless Java Tools Suite

<deviceRequirements>虽然是可选,但却与device数据库紧密相关。如果需要使用device相关数据,特别是对多版本的j2me程序打包,这部分的设置尤为重要。

<build>实际的build操作部分,在此设置midlet类名,以及第三方库包的导入等。在<build>属性中,usePolishGui用于标示是否适用polishGUI功能,注意该属性缺省是true。所以,如果没有用到polish的该功能,最好将其设置为false,否则打包时,将会加入polish自带一些类库,因此,会增加jar包的大小。

<build>部分也是j2mepolish创建的重要部分,但并非本文讨论重要,具体内容请参考favoyang翻译《创建》或《Pro J2ME Polish Open Source Wireless Java Tools Suite》。

 

Device数据库

J2mepolish存储了超过 230 J2ME 设备和相应的J2ME 参数,如 Canvas的大小, APIs, 支持格式等。其中,所有的数据都定义在device.xml文件中(安装过程,需选中External Device Database)。当然,可以随时更新device.xml数据库。

事实上,device数据库对于j2me开发非常重要。在本人的开发经历中,很多次都无奈难于获得某类机型的具体信息,如:堆栈大小,是否支持特定的扩展包等。即使有的公司拥有这样一套数据集合,也多半是以excel的形式保存,却无法与程序结合起来使用。这点,也为j2me程序的机型适配工作带来了繁重的工作量。J2mepolish在这方面对j2me开发做出重大贡献,以至于想antenna这样的开源项目已经支持j2mepolish提供的device数据库。

在开发过程中,结合j2mepolish的预处理机制,我们可以很便捷的使用该数据库。

  废话了大半天,先来看看具体device是如何定义的,以nokia/6600为例:

     < device >
        
< identifier > Nokia/6600 </ identifier >
        
< groups > Series60 </ groups >
        
< features > hasCamera </ features >
        
< capability  name ="OS"  value ="Symbian OS 7.0s" />
        
< capability  name ="ScreenSize"  value ="176x208" />
        
< capability  name ="BitsPerPixel"  value ="16" />
        
< capability  name ="JavaPackage"  value ="mmapi, wmapi, btapi, jtwi" />
        
< capability  name ="JavaPlatform"  value ="MIDP/2.0" />
        
< capability  name ="VideoFormat"  value ="3gpp, mpeg-4, realvideo" />
        
< capability  name ="SoundFormat"  value ="midi, midi24, true tones, amr, wb-amr" />
        
< capability  name ="HeapSize"  value ="3mb" />
        
< capability  name ="MaxJarSize"  value ="dynamic" />
        
< capability  name ="CameraResolution"  value ="640x480" />
        
< capability  name ="CameraZoom"  value ="2" />
        
< capability  name ="Font.small"  value ="15" />
        
< capability  name ="Font.medium"  value ="16" />
        
< capability  name ="Font.large"  value ="21" />
        
< capability  name ="Bugs"  value ="BluetoothRfcommInputStream" />         
< capability  name ="wap.userAgent"  value ="Nokia6600/*" />
</ device >

 

<inentifer>用于标示该设备,由厂商和设备名组成。

<groups>用于标示该设备属于哪个Group,设备本身的记号(symbol)继承于group的。例如,6600属于Series60组,所以6600就拥有nokia-ui记号。J2mepolish在预处理//#if nokia-ui时,就处理为true。而Group本身也存在着继承关系,例如,Series60又继承于Nokia-UI组。

<features>用于标示该设备具有的功能,如,摄像头、触摸屏等。

<capability>用于设备各项重要属性,如堆栈大小,屏幕大小等。在本例中,没有左右软键值定义,是因为其已经被定义在Series60组中。

 

使用device数据库和预处理

本节重点讨论如何使用指定设备的相关数据。首先,在build.xml<deviceRequirements>指定设备,在此我们以Nokia/6600Motorola/E680为例,<deviceRequirements>定义如下:

         < deviceRequirements >
                
< requirement  name ="Identifier"  value ="Nokia/6600,Motorola/E680"   />
        
</ deviceRequirements >

下面按照以下几点目标来设计代码:

16600版本使用FullCanvasE680版本使用SetFullScreenMode

26600版本使用Nokia的翻转方法,E680版本使用Midp2.0

3、获取设备自身的堆栈大小,屏幕大小等信息

 

源代码片段如下:

public class MyCanvas
// #if polish.api.nokia-ui
        // # extends com.nokia.mid.ui.FullCanvas
        // #else
        extends Canvas
// #endif
{

    public MyCanvas()
    {
        // #ifndef polish.api.nokia-ui
        // # setFullScreenMode(true);
        // #endif

        // #ifdef polish.ScreenSize:defined
        // #= String screensize = "${ polish.ScreenSize }";
        // #else
        String screensize = "128*128";
        // #endif

        // #ifdef polish.HeapSize:defined
        // #= int heapSize = ${ bytes(polish.HeapSize) };
        // #else
        int heapSize = 1000;
        // #endif
    }

    protected void paint (Graphics g)
    {
    }

    public void drawClip (Graphics g, int x, int y, Image image, int clipX,
            int clipY, int clipWidth, int clipHeight, int mode)
    {
        // #if polish.api.nokia-ui
        // # ...
        // # nokia的切片绘制方法,具体代码省略
        // # ...
        // #else
             ...
             midp2.0的切片绘制方法,具体代码省略
             ...
        // #endif
    }

}

运行build.xml之后,可以在build/real目录下,找到预处理以后的6600版和E680版代码。J2mepolish的预处理结果就体现在此,预处理后代码请感兴趣的朋友动手实践,在此就不贴出来了。

 

思考

本人对于J2mepolish的了解还需深入,但在使用之后,对j2mepolish有以下几点思考,欢迎大家交流。

1、  j2mepolishbuild功能上面,其实就是ant扩展。当然,其本身也是支持其他ant扩展,如,打包完成后,自动将jar文件上传到服务器上。但是功能强大的同时,却带来的是自由度的下降。例如,在存在以下需求时,用j2mepolish来实现打包,可能就比较繁琐了:在一份源码的基础上,对不同的资源目录进行打包。如,A版本使用的资源目录为res1B版本使用的资源目录为res2;不同版本,jad属性不同。本人认为,j2mepolish中,选择不同的设备是在<deviceRequirements>处指定,这样一来,不同版本之间区别就很难在一个build.xml文件中或者一次build过程中定义清楚。当然,并非说j2mepolish不能实现以上需求,这就是仁者见仁,智者见智了。

2、  j2mepolish编译使用的库,如: midp2.0.jarcldc1.0.jar等,都是来自于polish_home/import目录下,这样不方便相关库的升级和使用。

 

相关项目介绍

Antenna:应用于j2meant扩展,最新版本支持预处理,也支持j2mepolishdevice数据库。地址:http://antenna.sourceforge.net/

J2me Device DB:类似于Antenna的一个项目,拥有自己的设备数据库,也支持预处理。地址:http://j2me-device-db.sourceforge.net/pmwiki/index.php?n=Main.HomePage

 

软件版本

j2mepolish-2.0-RC4

jdk1.5

eclipse3.2

 

参考资料

漫游j2mepolish    访问地址:http://www.j2mepolish.org/docs/tour-cn.html

Pro J2ME Polish Open Source Wireless Java Tools Suite 作者:Robert Virkus

《创建》 翻译:favoyang

J2mepolish doc      安装自带

J2mePolish集成到eclipse32 访问地址:http://www.javaeye.com/topic/38138

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值