2 


开发 MIDlet 套件

本章介绍如何使用 Sun JavaTM Wireless Toolkit for CLDC 来创建应用程序。首先介绍工具包项目,然后逐步完成开发过程。

创建 MIDlet 套件应用程序时,可能需要遵循两个基本开发周期。第一个周期较短,并且较为简单。在开发初期会很有用。第二个周期历时较长,但它为进行更全面、更真实的测试留下了余地。

在本章结尾处包含有关如何将 Sun JavaTM Wireless Toolkit for CLDC 与混淆器和调试器这样的高级开发工具配合使用的信息。最后一节简单介绍如何配置 Web 服务器,以提供 MIDP 应用程序服务。


2.1 关于项目

在 Sun JavaTM Wireless Toolkit for CLDC 中,各 MIDlet 套件被组织成一个个项目,其中一个项目的最终结果就是一个 MIDlet 套件。项目包含将用于生成 MIDlet 套件的所有文件,包括 Java 源文件、资源文件,以及 MIDlet 描述符。

Sun JavaTM Wireless Toolkit for CLDC 每次只能执行一个项目。您可以新建一个项目,也可以打开一个现有项目。

本章使用了一个非常简单的示例项目。您可以一边阅读开发周期的每个步骤,一边在工具包中逐渐深入工作。

要新建一个项目,需要先启动用户界面。在 Microsoft Windows 中,选择“开始”>“程序”>“Sun Java Wireless Toolkit 2.5.2 for CLDC”>“Wireless Toolkit 2.5.2”。[1] 将显示用户界面,如图 2-1 中所示。

图 2-1 工具包的用户界面

启动时出现的默认工具包 UI。

单击“新建项目”。工具包会提示您输入项目的名称和您要编写的 MIDlet 类的名称。填写名称并单击“产生项目”。

图 2-2 新建一个项目

UI 窗口和“新建项目”对话框。 “项目名字”为 "Tiny",“MIDlet 类名”为 "TinyMIDlet"。

将显示“设置”窗口。您的选择会影响项目的生成环境。默认选项适用于本示例,因此单击“确定”关闭窗口即可。在控制台中将会显示一些消息,告诉您该项目的源代码和资源文件确切的存储位置。

图 2-3 控制台中的文件位置

KToolbar 控制台显示项目文件的位置。


2.2 简单开发周期

简单开发周期类似于:

编辑源代码 > 生成 > 运行

1. 编辑源代码

在此步骤中,创建您的应用程序将使用的 Java 源文件和资源文件。

2. 生成

该工具包将对您的 Java 源文件进行编译和预校验。

3. 运行

在仿真器上运行已编译的 Java 类文件。

如果在工具包尝试编译您的源文件时发生错误,请返回并再次对其进行编辑。如果您在仿真器中测试您的应用程序时发现了错误,请编辑源文件以修复该错误。

既然您进一步了解了简单开发周期,本节其余部分将介绍如何使用 Sun JavaTM Wireless Toolkit for CLDC 完成每个步骤。

2.2.1 编辑源代码

编辑源代码是 Sun JavaTM Wireless Toolkit for CLDC 唯一完全没有帮助的步骤。请使用所选的文本编辑器来创建和编辑源代码文件。如果没有中意的文本编辑器,请尝试使用位于 http://jedit.org/ 的 jEdit。

如果您正按照样例项目进行操作,请新建一个 Java 技术源文件 TinyMIDlet.java。将其保存在项目的源目录中。例如,在 Windows 上,该目录为 workdir\apps\Tiny\src\TinyMIDlet.java。该文件包含以下简单的 MIDlet:


import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
 
public class TinyMIDlet
    extends MIDlet
    implements CommandListener {
  public void startApp() {
    Display display = Display.getDisplay(this);
    
    Form mainForm = new Form("TinyMIDlet");
    mainForm.append("Welcome to the world of MIDlets!");
    
    Command exitCommand = new Command("Exit", Command.EXIT, 0);
    mainForm.addCommand(exitCommand);
    mainForm.setCommandListener(this);
    
    display.setCurrent(mainForm);
  }
  public void pauseApp () {}
  
  public void destroyApp(boolean unconditional) {}
  
  public void commandAction(Command c, Displayable s) {
    if (c.getCommandType() == Command.EXIT)
      notifyDestroyed();
  }
}

 

编辑完毕后保存该文件。

2.2.2 生成

接下来就是要生成源代码了。工具包使该步骤变得非常简单。

在用户界面中,单击“生成”按钮。如果您将源文件保存在正确的位置,工具包就会查找该文件并对其进行编译。将在控制台中显示编译错误。如果有错误(如图 2-4 所示),请编辑源代码以修复错误。消除错误后,控制台会通知您生成已成功完成。

图 2-4 与生成有关的消息

控制台显示 Tiny 文件的生成消息以及错误。 脱字符号 ^ 指示错误。

实际上,该工具包还对已编译的类文件进行预校验。在 MIDlet 类文件能在 MIDP 设备或仿真器上运行之前,必须对其进行预校验。工具包会自动为您处理此细节。有关预校验的更多信息,请参见 CLDC 规范。

2.2.3 运行

项目成功生成之后,您随时可以在仿真器中运行该项目。单击“运行”按钮。仿真器将显示项目中所有 MIDlet 的列表。

图 2-5 项目 MIDlet 的列表

项目 MIDlet 的列表显示 Tiny MIDlet

选择所需的 MIDlet 并选择“启动”。如果您沿用 TinyMIDlet 示例,结果将如图 2-6 中所示。

图 2-6 TinyMIDlet 在执行中

TinyMIDlet 输出为“欢迎来到 MIDlet 世界!"


2.3 完整开发周期

第二个开发周期稍微复杂一些。它由以下几个高级步骤组成:

编辑源代码> 打包 > 安装 > 运行

1. 编辑源代码

该过程与简单周期中的过程相同。

2. 打包

在该步骤中,Sun JavaTM Wireless Toolkit for CLDC 对源文件进行编译和预校验(本质上与简单周期的“生成”步骤相同)。然后,将 Java 类文件和资源文件捆绑到 MIDlet 套件 JAR 归档 (Java Archive, JAR) 文件和 MIDlet 套件描述符中。

3. 安装

在运行 MIDlet 套件之前需要先对其进行安装。您可以将 MIDlet 套件安装到 Sun JavaTM Wireless Toolkit for CLDC 仿真器或真实设备中。

4. 运行

同简单开发周期一样,运行您的应用程序并测试是否有错误。

完整开发周期中的第一个步骤与简单开发周期相同。源代码编辑过程与往常一样。“生成”过程现在合并到了打包过程之中。

完整开发周期包括两个新步骤,即打包和安装。最后,运行已安装的应用程序与在简单开发周期中运行应用程序的方式有重要不同。

2.3.1 打包

Sun JavaTM Wireless Toolkit for CLDC 能自动完成对 MIDlet 套件进行打包的任务。打包会最终产生两个文件,即一个 MIDlet 描述符和一个 MIDlet 套件 JAR 文件。描述符是一个小文本文件,包含有关 MIDlet 套件的信息。JAR 文件包含组成 MIDlet 套件的类文件和资源。在下载整个 JAR 文件之前,设备可以使用该描述符了解有关应用程序的信息,这在内存匮乏、带宽受限的无线环境中很值得重视。

要让工具包对 MIDlet 套件进行打包,请选择“项目”>“包”>“产生包”。即可生成 MIDlet 套件描述符和 JAR 文件,并将其放在项目的 bin 目录下。

打包可能涉及其他步骤。您可以使用代码混淆器来减小 MIDlet 套件 JAR 文件的大小,本章后面的内容会对该技术进行介绍。此外,该工具包还提供了若干工具,您可以利用这些工具来加密签名 MIDlet 套件。有关更多信息,请参见第 6 章

2.3.2 安装

要正确地对 MIDlet 套件进行测试,请将该套件安装到工具包的仿真器中或真实设备中。当您在用户界面中按下“运行”按钮时,MIDlet 套件并没有安装到仿真器中,而是由仿真器直接运行 MIDlet 类。

仿真器还可以将应用程序安装到其内存中,该过程与通过无线协议技术 (Over the Air, OTA) 将应用程序传送并安装到真实设备上的过程类似。要在 Sun JavaTM Wireless Toolkit for CLDC 仿真器中安装应用程序,请选择“项目”>“通过 OTA 运行”。

仿真器窗口将打开,但仿真器没有直接运行 MIDlet 类,而是显示应用程序管理软件 (Application Management Software, AMS) 欢迎屏幕。仿真器的软件是真实设备管理 MIDlet 套件所必须具备的软件类型的一个示例。

图 2-7 仿真器 AMS 欢迎屏幕

此图显示仿真器的包含初始欢迎消息的屏幕部分

选择“应用程序”转到已安装应用程序的主列表。在仿真器上选择“安装应用程序”并按下“选择”按钮。仿真器提示您输入您想要安装应用程序的 URL 位置。系统已为您填写了该 URL。

图 2-8 URL 提示

在样例中,要安装程序的 URL 为 http://localhost:2455/Tiny/bin/Tiny.html

从菜单中选择“执行”开始安装。仿真器显示在该 URL 下找到的应用程序的列表。仅选择其中一个,并从菜单中选择“安装”。仿真器会提示您最后一次确认您的选择。

图 2-9 确认安装

当出现“是否确实要...”的提示时选择右下方的“安装”以完成安装过程

再次选择“安装”结束安装。您将返回到仿真器的已安装应用程序列表,该列表中现在已包含您刚刚安装的应用程序。

图 2-10 “应用程序”菜单

使用选择按钮选择应用程序

“通过 OTA 运行”是一种非常有用的机制,它使您可以轻松地在工具包仿真器上安装您的 MIDlet 套件。对包括推送注册表和签名 MIDlet 套件的安装在内的某些功能进行测试时必须使用该技术。

如果您要在真实设备上对您的 MIDlet 套件进行测试,则必须先安装该套件,这在很大程度上取决于您使用的设备。有以下两种可能性:

2.3.3 运行

应用程序安装完成后,请从列表中选择该应用程序并从菜单中选择“启动”。

图 2-11 启动已安装的应用程序

使用软键打开菜单并选择 1(启动)

在真实设备上运行应用程序很大程度上取决于设备本身。要了解相关信息,请查询您的设备文档。


2.4 从 MIDlet 套件创建项目

您还可以从 MIDlet 套件归档(.jar 文件)和描述符(.jad 文件)创建 Sun JavaTM Wireless Toolkit for CLDC 项目。即使没有可用的源代码,这对于从工具包用户界面运行 MIDlet 套件也非常有用。您可以使用工具包轻松地操纵描述符中的属性,也可以运行项目并使用工具包的监视工具(在第 5 章中进行了介绍)以观察其行为。

要基于 MIDlet 套件创建项目,请选择“文件”>“根据 JAD/JAR 文件创建项目”。导航至要使用的描述符并单击“打开”。请注意,描述符和 JAR 文件必须位于同一目录中。


2.5 使用混淆器

混淆器是用于减小类文件大小的工具。MIDlet 套件需要压缩,这样可以尽量减少下载时间,还能满足制造商或运营商有时强行实施的对 JAR 文件大小严格限制的要求。使用混淆器是一种可使您的 MIDlet 套件 JAR 文件保持较小的方式(但不是唯一方式)。

您可以在开发周期的打包步骤中使用混淆器。虽然 Sun JavaTM Wireless Toolkit for CLDC 没有附带混淆器,但它已配置为使用 ProGuard 混淆器。您只需下载 ProGuard,并将其放到工具包可以找到它的地方即可。

ProGuard 的发布遵照 GNU 通用公共许可证 (General Public License, GPL) 的条款。如果您接受该许可证的条款,您就可以免费下载并使用 ProGuard。

2.5.1 安装 ProGuard

请按照以下步骤安装 ProGuard:

1. 请转到 ProGuard Web 站点 http://proguard.sourceforge.net/

2. 下载其最新版本。

3. 从 ProGuard 的安装目录 lib,将 proguard.jar 文件解压缩到 toolkit/bin 目录中。

2.5.2 使用 ProGuard

ProGuard 安装完毕后,可以通过选择“项目”>“包”>“产生混淆包”使用 ProGuard 了。

在某些情况下,您需要提供脚本文件来控制混淆器的工作。例如,如果您正使用 Class.forName() 装入类,那么您需要告诉 ProGuard 不要更改类名。

要调用脚本文件,您必须能够修改自己 ktools.properties 文件的副本。

single-step bullettoolkit/wtklib/os/ktools.properties 复制到 workdir/wtklib/os/ktools.properties

使用文本编辑器创建一个脚本文件,然后将其保存到项目的主目录下。要了解有关脚本文件的信息,请查询 ProGuard 文档资料。下一步您需要告诉工具包如何找到该文件。要这样做,请编辑您已复制到 workdir/wtklib 中的 ktools.properties 文件。添加如下一行:

obfuscate.script.name: scriptfile

用脚本文件使用的名称来替换上面的 scriptfile。您必须退出并重新启动工具包才能使更改生效。


2.6 使用调试器

运行您的应用程序有另外一种方法,即利用调试器来运行它。使用调试器,您可以更密切地监视运行中的应用程序、设置断点和检查变量。

您必须自行提供调试器。您可以使用 Java SE 平台提供的 jdb 调试器,或者使用您选择的其他调试器。如果要使用调试器,集成开发环境 (Integrated Development Environment, IDE)(如 Sun Java Studio Mobility 软件,它并入了 Sun JavaTM Wireless Toolkit for CLDC)最有可能成为您的选择。有关更多信息,请访问 http://www.sun.com/software/products/jsmobility/

首先,选择“项目”>“调试”。输入调试器将用于连接仿真器的 TCP/IP 端口号,单击“调试”。仿真器开始运行,并等待来自调试器的连接。

启动调试器,将其连接到指定的端口。请确保将远程调试器设置成在远程模式下运行并使用 TCP/IP。有关更多信息,请查询调试器的文档资料。

Debugging MIDlets 包含有关将 jdb 用于 Sun JavaTM Wireless Toolkit for CLDC 的信息。可以通过以下网址访问此文章:
http://developers.sun.com/techtopics/mobility/midp/questions/jdb/


2.7 在 Web 服务器上部署应用程序

MIDP 2.0 规范包括“无线协议用户初始化置备规范”(Over The Air User Initiated Provisioning Specification),其中介绍了 MIDlet 套件如何通过无线协议 (OTA) 传送到设备。您可以使用 Sun JavaTM Wireless Toolkit for CLDC 仿真器对这种情况进行测试。

要在 Web 服务器上远程部署打包的 MIDP 应用程序,请将 Java 应用程序描述符 (Java Application Descriptor, JAD) 文件的 MIDlet-Jar-URL 特性更改为 JAR 文件的 URL。URL 必须为绝对路径。例如:

MIDlet-Jar-URL: http://your.server.com/midlets/example.jar

接下来,请确保 Web 服务器对 JAD 和 JAR 文件使用正确的 MIME 类型:

配置 Web 服务器的细节将视所用的具体软件而定。

仿真器可以实现 OTA 置备期间的设备行为。您可使用仿真器来测试和演示将 MIDlet 套件从服务器置备到设备的全过程。您所做的只是启动仿真器的 AMS。如果您已使用“通过 OTA 运行”选项,则可能您已熟悉了 AMS。

有两种方法可以启动仿真器的 AMS:

 

然后根据 AMS 提示安装应用程序。除了必须输入您自己服务器的 URL 以安装应用程序之外,其余过程与本章前面介绍的使用“通过 OTA 运行”选项的过程非常类似。


1 (注解) 根据 Microsoft Windows 的配置方式,可能需要选择“开始”>“所有程序”,而不是选择“开始”>“程序”。