【IT168 技术文档】Debug 技术在开发J2ME程序中占有很重要的地方,一个好的Debug调试技巧跟工具对软件的开发质量,产品的质量保证,产品开发的效率上来说都是极其重要的,我想大家不会一出现问题就是瞪着屏幕看Log吧,有时候忘记在关键点上打log了,这样是很痛苦的,往往调试一个问题需要反复的打log,安装,运行-look(查看log信息)。当然对于真机debug来说,也是无可奈何的。此篇文章尽量的展示怎么进行手机调试,分享给经验,调试工具给大家。
预期读者
本文主要适合那些有经验的J2ME程序员在优化软件,或者是需要补充调试方面信息的程序员。
关于作者
饶荣庆 从事J2ME,Android开发工作多年,现在就职于UCWEB。从事浏览器相关的开发工作。IT168移动开发频道特约作者。
说实话,在调试的过程中,没有很好的技巧进行调试,只是尽量的单步跳入,跳出方法,查看变量值,直到找出问题,不过这里我想让大家了解的时候各个平台,厂家的开发SDK,没有人会比厂家更了解自己的产品。
Eclipse 平台
安装与配置
Eclipse 是当今最流行的IDE之一,它本身来说是不支持J2ME开发的,不过加一个EclipseME插件就可以支持了,而且这套组合也是笔者开发过程中使用最多的组合。
Eclipse 下载地址 http://www.eclipse.org/
EclipseME 下载地址 http://eclipseme.org/
关于怎么样在Eclipse安装插件 请看这篇文章。
http://www.mobpub.net/viewthread.php?tid=214&extra=page=1
EclipseMe的 debug 配置。
这里有篇文章是怎么安装EclipseMe 以及怎么样加载各个厂家SDK的文章
http://www.sf.org.cn/j2me/base/19523.html
由于无线开发包的一些问题和Sun的特殊性,如果你想要Eclipse环境中调试你的MIDlet程序,你必须修改Eclipse中调试的几个默认参数。步骤如下:
2.1 选择Eclipse的Window->Preferences 菜单;
2.2 在打开的界面中,展开Java节点,并选择Debug项目;
2.3 确保在对话框顶部的Suspend execution on uncaught exceptions 和Suspend execution on compilation errors 两项均没有被选中;
2.4 在对话框中底部的调试超时时间增大,最少要操作15000毫秒。
贴图
调试技巧
Eclipse 在debug的时候经常会出现这个,那个问题。比如,一启动,然后一闪程序就关闭了,查看控制台,一堆看不懂的代码。没有提示,也不知道啥回事。
其实调试技巧就是不断的F5,查看变量值,F6,F7,F8这些不停的轮换着用。直到找出问题位置。查看变量值比较方便,鼠标移到变量相关的值啊就会出来。不过可惜不能修改变量值来获取对于的结果。
优缺点
Eclipse Debug J2ME相对来说比较慢。也就是初始化虚拟机比较慢,这个也是我由Eclipse 转向JBuider的理由之一。
JBuilder 是老牌的Java 开发平台了,集成了J2ME的开发工具,相对新兴的开发工具来说,JBuilder是最稳定的,最成熟的平台了。
下面是JBuilder 平台的一些用法介绍。
JBuilder MobileSet
JBuilder是Java程序员常用工具之一,在于它强大的可视化编程工具,集成的编译、运 行和调试环境。要为JBuilder提供J2ME无线应用开发支持,需要在JBuilder基础之上安装MobileSet,建议安装2.0版,当前支持 CLDC/MIDP的1.0.3版本,而JBuilder的版本应该是6。JBuilder MobileSet 2可从下面网址免费下载: http://www.borland.com/jbuilder/mobileset/
同时还要下载相应的MobileSet序列号和许可密钥(免费),根据提示安装MobileSet并注册后,运行JBuilder会找到"Help|MobileSet Guilde"菜单项。使用菜单"File->New..."打开"Object Gallery"对话框,会出现一个新的页面标签"Micro",此时图标"MIDlet"和"MIDP Displayable"是灰色的,只有生成一个MIDP项目后才能使用这两个图标。
JBuilder MobileSet的特征
JBuilder MobileSet是一个开放工具,能够与其它供应商提供的J2ME开发工具包集成在一起,当前提供了对下列厂商工具包的支持:
Sun提供的J2ME无线开发工具包1.0.3版(J2MEWTK)
诺基亚的J2ME开发套件(http://forum.nokia.com)
西门子的SMTK开发工具包(http://www.siemens-mobile.de)
其中J2MEWTK已经包含在MobileSet 2的安装文件中,如果要使用J2MEWTK提供的开发类库,并且还没有安装J2MEWTK,可以在安装MobileSet 2时选择完全安装。MobileSet 2提供了下列辅助开发的工具:
用于CLDC/MIDP类的CodeInsight工具类/包浏览器
JDK转换工具
动态适配到任何J2ME简表,包括MIDP
和开发其它Java应用程序一样,JBuilder通过MobileSet提供了快速开发模板,包括MIDP项目模板,MIDP Displayable模板,MIDlet模板。它提供了RAD(快速应用开发)的可视设计器,支持MIDP UI元素。通过MobileSet还支持MIDP应用程序打包和OTA配置(Over the Air,上载和下载文件和MIDlet套件,用来配置应用程序到设备上)。
MobileSet能够用在JBuilder的个人版、专家版和企业版,但是一些功能不能用在个人版如JDK设置切换,打包器等。
配置JDK
前面已提到编译MIDP应用程序时需要设置特定的CLDC/MIDP类库,以避免使用默认的J2SE类库,在JBuilder中同样要进行类似设置。这 是通过JDK配置选项实现的,JBuilder的设计独立于JDK,尽管每个JBuilder版本发布时会默认安装一个当时较新的JDK(类库),但还可以通过它的配置机制设置其它JDK,包括旧版本、更新版本或者OEM版的JDK,从而实现了JBulder的扩展性。
专家版和企业版的JBuilder可同时配置多个JDK,根据需要设置其中一个为默认即可,而个人版的却要在需要时重新配置每个JDK。安装MobileSet后可选择 安装J2MEWTK、诺基亚和西门子的JDK,然后为设置的每个JDK自定义一个名称,并把其主目录指向这个JDK中\bin的父目录,需要注意的是 JDK目录中不能有空格如c:\Program Files\ J2mewtk。
MIDP项目
JBuilder开发都以项目概念为中心,项目文件包含一个(属于这个项目的)文件列表以及项目属性,其中项目属性包括项目模板、缺省路径、类库和连接配 置等,JBuilder使用这些信息加载、保存、编译和运行项目。使用Jbuilder开发环境添加、移除文件,或者设置、更改项目属性都会更改项目文件。可以在项目面板中看到项目文件作为主节点显示。
生成项目的便捷方式是使用项目模板工具,可用来设置项目名称、类型和模板,以及JDK、工作目录、备份路径和编译输出路径等。其中项目类型可选择.jpx或者.jpr,二者内容一样,区别是前者使用XML格式文件,因此适合于共享的项目。
而JDK则是前面所设置中的一个,并且只有选择CLDC/MIDP的JDK才能使用Object Gallery中的Micro选项。每个项目至少一个MIDlet主类,所以首先应使用MIDlet模板生成一个MIDlet主类。通过模板可以设置这个 主类的类名、标题、屏幕类型和命令处理方式,其中屏幕类型有4个选择:(javax.microedition.lcdui.)Canvas、Form、List、TextBox,只有Form的扩展类才能添加其它的组件(Item的子类)。命令处理方式也有4个选择:
Ⅰ. -- 通过其它的类设置commandListener,比如MIDlet类。
Ⅱ. Interface implementation -- 生成一个类并在类中实现commandListener接口,这种方式生成的类的大小会比适配器方式生成的小。
Ⅲ. Standard adapter -- 这种方式生成的代码采用标准适配器的形式:
Ⅳ. Anonymous adapter -- 这种方式生成的代码采用匿名适配器的形式:
后两种适配器形式可以通过项目属性"Code Style"设置。如果要在这个MIDP应用程序中添加更多的屏幕,可以使用Displayable模板添加,或者通过MIDlet模板添加更多的MIDP应用程序到项目中。
生成应用程序框架后,就可根据本文第2部分要求添加所需代码,并使用JBuilder提供的便捷方式进行编译(预验证)、打包、模拟运行和发布,JBuilder提供有内置web服务器和ftp服务器,以方便开发者测试应用程序的发布。
如果使用MIDlet或Displayable模板生成一个Form类型的Displayable对象,则可以使用JBuilder的"MIDP设计器"定制用户界面,即从组件板上以拖拉方式生成UI元素,可用鼠标调整这些元素的位置或者进行复制、删除等操作,这就是JBuilder强大功能之所在。
如果是使用模板生成Displayable类,会自动生成jbInit()方法,当在Form中添加UI元素时,设计器会把代码添加进jbInit() 方法。如果希望打开一个现有Displayable类到设计器,它已经有UI元素,但是没有jbInit()方法,首先需要生成一个jbInit()方 法,然后把所有的UI元素转移进去。
NetBeans平台笔者相对用的时间很少,只是去体验下,发现NetBeans对J2ME的支持也很完美,不过由于速度,易用性,习惯等原因就放弃使用了。下面介绍下简单的用法。
J2ME是有JCP组织定义的一组JSR规范,因为规范的内容太多,而且有些是非必选的,因此各个厂家的实现也可能有有些差异的,而且各个厂家也定义了一组自己平台特性的APIs,因此选择各个厂家的开发工具是必须的。
Nokia
S40平台下载地址:
http://www.forum.nokia.com/Resources_and_Information/Tools/Platforms/Series_40_Platform_SDKs/
下面我们下载一个SDK进行演示:
这个页面选择S40 6nd版本,下载到本地磁盘中。在下载的过程中,nokia会检查你是否登录,如果没有登录,有用户的就直接登录,无则注册再登录。在你下载的目录下面有一个创建序列号的地方,记得一定要创建一个序列号哦,否则是安装不了的。
下载后,直接点击安装文件即可。下面来看下安装截图:
耐心等待几分钟就可以按照完成了。
下面来看看JBuilder是怎么配置这些SDK的。打开Jbuilder-> Tools -> Configure -> JDKs 。 弹出下面的对话框:
按照上面的步骤,搞定。然后再你的项目中选择JDK就可以使用S40的模拟器了。看看运行结果:
又一个SDK被搞定,其他的Nokia S40,S60的SDK基本上都是上面的操作就可以了。注意的地方,S40 SDK 6nd需要的jdk是1.6版本的。
Moto的SDK很多是基于JBlend的。
Moto 下载地址:http://www.j2medev.com/Soft/ShowSoft.asp?SoftID=894
这里整合了几篇关注Moto SDK 使用,安装集成的文章。有兴趣可以看看:使用Netbeans IDE集成Motorola J2ME SDK 5.4.2
http://www.cqzol.com/programming/J2EEJ2ME/200712/92860.html
下面来简单的介绍下Moto SDK 的用法,本人采用的Moto SDK是6.1.1 版本的,笔者认为此版本最接近Moto 的真机了。启动界面如下:
Handset 是目标模拟器。Application是你开发的应用程序JAD。然后点 Launch 就可以启动了。
你可以从控制台中查看Log, 非常方便。
注意:
1.Moto 的SDK 是基于JBlend的。
2.Moto 没有使用过CMWAP蓝牙代理上网。
JBlend 是日本的一家虚拟机公司,它开发的JBlend使用在很多山寨机器上。下面是debug的截图:
SDK是基于Eclipse的插件的,下载是安装地址:
http://www.aplixcorp.com/cgi-bin/en/contact/eclipse/eclipse.cgi
上面的地址如不能显示,请从主页进去。http://www.aplixcorp.com 主页地址
[Name]
J2ME Application Project
[URL]
http://csdownload.aplix.co.jp/microJBlend-plugin/
笔者在Eclipse 3.4 上安装,发现不能运行。因此建议采用Eclipse 3.1 干净版本安装。我在Eclipse 3.1 上可以安装插件,但是工作起来起来却是很麻烦,只能运行,没能Debug,有时间得好好研究。直接启动JBlend,到$Eclipse$eclipse\plugins\com.jblend.micro.eclipse.plugin_1.3.22\bin\midp20。可以查看到JBlend.exe 的执行文件。启动它就Ok了。
众所周知,开发J2ME网络程序大部分工作都是需要与中国运营上的网关打交道,有时候在PC模拟器跑的好好的,怎么跑到手机上就完全不行了,不是连不上网就是,说respone code error有错误,是啥原因了,丈二金刚摸不着头脑很是郁闷。
基于蓝牙Debug程序那是很爽的,完全可以模拟CMWAP啊,CTWAP, UNWAP等环境下的网络开发,下面用法。
步骤一。你得买一个蓝牙,安装蓝牙驱动,并且适配一台手机,我用6300等经典S40.
步骤二。打开蓝牙装置,
点击第2个图标,选择连接,提示连接的时候,下一步,下一步就搞定了。
注意事项
JBlend的安装
Nokia S40的下载,安装,运行
蓝牙模拟CMWAP 上网。
调式的技巧,JBuilder(F7, F8, F9). Eclipse(F5,F6,F7,F8).
参考资料
ITPUT的移动开发技术 频道 http://publish.itpub.net/lists/7826/0/7826.shtml
Nokia 开发者论坛 http://forum.nokia.com.cn/sch/index.html
Eclipse ME 中文文档 PDF格式 http://www.52zy.com/down/42371.html
Motorola J2ME 开发资源索引 http://www.cnjm.net/bbs/redirect.php?tid=35413&goto=lastpost