附录 B


命令行参考

本附录介绍如何通过命令行运行 Sun JavaTM Wireless Toolkit for CLDC,并详细说明生成和运行应用程序所需执行的步骤。本附录还介绍称为 MEKeyTool 的 Sun JavaTM Wireless Toolkit for CLDC 证书管理器实用程序,以及称为 JadTool(Java 应用程序描述符工具)的 MIDlet 签名实用程序。


B.1 先决条件

通过命令行生成和运行应用程序之前,请验证 Java SE 软件开发工具包的版本是否不低于 1.4.2。请确保 jar 命令位于路径中。要查看开发工具包的版本,请运行 jar 命令,然后在命令行中运行 java -version

有关更多示例,请参见位于演示应用程序 bin 目录下的文件 build.batrun.bat。可以在以下位置找到这些文件:


对于 Windows 系统:

toolkit\apps\demo\bin

对于 Linux 系统:

toolkit/apps/demo/bin


 

toolkit 是 Sun JavaTM Wireless Toolkit for CLDC 的安装目录,demo 是其中一个演示应用程序的名称。


B.2 开发周期

有关开发 MIDP 应用程序的完整说明,请参见第 2 章。本节介绍如何从命令行中完成开发周期的各个步骤。

B.2.1 生成

在用户界面中,生成项目只需一步。但实际上需要执行两个步骤。首先,将 Java 源文件编译到 Java 类文件中。接下来将预校验这些类文件,以确定其是否已为 CLDC KVM 做好准备。

使用 Java SE 开发工具包中的 javac 编译器编译 Java 源文件。可以使用现有的 Sun JavaTM Wireless Toolkit for CLDC 项目目录结构。用户需使用 -bootclasspath 选项通知编译器要使用 MIDP API,并使用 -d 选项通知编译器放置编译完的类文件的位置。

以下示例说明如何编译 MIDP 2.0 应用程序,即从 src 目录下取得源文件,然后将类文件放置在 tmpclasses 目录下。为了清晰起见,进行换行显示。

Windows

javac -bootclasspath ..\..\lib\cldcapi10.jar;..\..\lib\midpapi20.jar -d tmpclasses src\*.java

Linux

javac -bootclasspath ../../lib/cldcapi10.jar;../../lib/midpapi20.jar -d tmpclasses src/*.java

如果要使用工具包支持的可选 API,请将这些 API 的 JAR 文件添加到 -bootclasspath 选项中。

有关 javac 的更多信息,请参阅 Java SE 文档。

下一步是预校验类文件。Sun JavaTM Wireless Toolkit for CLDC 的 bin 目录下,有一个名为 preverify 的便利实用程序。预校验命令的语法如下:

preverify [options] files | directories

其中某些选项如下:

-classpath classpath

指定装入类的目录或 JAR 文件(以分号分隔列表的形式提供)。

-d output-directory

指定输出类的目标目录。该目录必须在预校验前就已存在。如果不使用该选项,预校验器会将类置于名为 output 的目录下。

请按照示例进行编译,使用以下命令验证已编译的类文件。与前面一样,为了清晰起见,进行换行显示。

Windows

preverify -classpath ..\..\lib\cldcapi10.jar;..\..\lib\midpapi20.jar -d classes tmpclasses

Linux

preverify -classpath ../../lib/cldcapi10.jar;../../lib/midpapi20.jar -d classes tmpclasses

执行该命令后,会将预校验的类文件置于 classes 目录下。如果应用程序使用的是 WMA、MMAPI 或其他版本的 CLDC 或 MIDP,请确保在类路径中包含相关的 .jar 文件。

B.2.2 打包

要将 MIDlet 套件打包,必须创建清单文件、应用程序 JAR 文件,最后还要有一个 MIDlet 套件描述符。

创建包含 MIDP 规范中所指定的相应属性的清单文件。可以使用任何文本编辑器创建清单文件。清单可能包含下列内容,例如:

MIDlet-1: My MIDlet, MyMIDlet.png, MyMIDlet

MIDlet-Name: MyMIDlet
MIDlet-Vendor: My Organization
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC -1.0
MicroEdition-Profile: MIDP -2.0

创建包含清单文件以及套件的类和资源文件的 JAR 文件。要创建 JAR 文件,请使用 Java SE 软件开发工具包附带的 jar 工具。语法如下:

jar cfm file manifest -C class-directory . -C resource-directory .

参数如下:

例如,要创建名为 MyApp.jar 的 JAR 文件(此文件的类位于 classes 目录下,资源位于 res 目录下),请使用以下命令:

jar cfm MyApp.jar MANIFEST.MF -C classes. -C res .

创建包含 MIDP 规范中所指定的相应属性的JAD 文件。可以使用任何文本编辑器创建 JAD 文件。该文件的扩展名必须为 .jad



注 - 用户需要将 MIDlet-Jar-Size 条目设置为在上一步骤中创建的 JAR 文件的大小。



例如,JAD 文件可能具有以下内容:

MIDlet-Name: MyMIDlet

MIDlet-Vendor: My Organization
MIDlet-Version: 1.0
MIDlet-Jar-URL: MyApp.jar
MIDlet-Jar-Size: 24601

B.2.3 运行

可以通过命令行运行仿真器。Sun JavaTM Wireless Toolkit for CLDC 的 bin 目录包含 emulator 命令。emulator 命令的语法如下:

emulator options

常规选项如下:

专门用于运行 MIDlet 套件的选项如下:

-Dcom.sun.midp.io.http.proxy=proxy-host:proxy-port

-Dcom.sun.midp.midlet.platformRequestCommand=browser

样例呼叫可能类似于:

emulator -Dcom.sun.midp.midlet.platformRequestCommand=firefox -Xjam:install=URL-to-app-using-platformRequest-method

如果希望每次均使用相同的浏览器,则可以将以下行添加到 toolkit/lib/system.config

com.sun.midp.midlet.platformRequestCommand: 浏览器

Windows:在 Windows 中,如果未指定此参数,则将使用默认浏览器。

Linux:对于 Linux,则必须指定此参数,因为 Linux 系统通常不具有默认浏览器。如果未指定此参数,则应用程序尝试打开 URL 时,将无任何反应。

install=jad-file-url | force | list | storageNames|

将带有指定 JAD 文件的应用程序安装到设备上。

此外

run=[storage-name | storage-number]

运行先前安装的应用程序。可通过应用程序的有效存储名称或存储号码来指定应用程序。

remove=[storage-name | storage-number | all]

删除先前安装的应用程序。可通过应用程序的有效存储名称或存储号码来指定应用程序。如果指定 all,将删除所有先前安装的应用程序。

B.2.4 调试

可以对仿真器使用下列选项来进行调试和追踪。


B.3 启动工具包 GUI 组件

Sun JavaTM Wireless Toolkit for CLDC 的组件均可从命令行启动。每个组件均位于工具包的 bin 目录下。


表 B-1 工具包组件命令

命令

描述

DefaultDevice

显示对话框,供用户选择默认仿真器样机

ktoolbar

启动用户界面。

prefs

启动工具包首选项

utils

启动工具包实用程序窗口


 


B.4 设置仿真器首选项

用户可以通过使用 -emulator 命令的 --Xprefs 选项从命令行更改仿真器首选项。格式如下:

-Xprefs:filename

提供作为属性文件的完整路径名的 filename,其值将覆盖首选项对话框中的值。属性文件可以包含下表中描述的属性。


表 B-2 仿真器首选项 属性列表

属性名

属性描述和合法值

http.version

网络配置 > HTTP 版本

值:HTTP/1.1 | HTTP/1.0

http.proxyHost

网络配置 > HTTP 地址

值:主机名

http.proxyPort

网络配置 > HTTP 端口

值:整型

https.proxyHost

网络配置 > HTTPS 地址

值:主机名

https.proxyPort

网络配置 > HTTPS 端口

值:整型

kvem.memory.monitor.enable

监视器 > 启用内存监视器

值:true | false

kvem.netmon.comm.enable

监视器 > 启用 Comm 监视

值:true | false

kvem.netmon.datagram.enable

监视器 > 启用数据报监视

值:true | false

kvem.netmon.http.enable

监视器 > 启用 HTTP 监视

值:true | false

kvem.netmon.https.enable

监视器 > 启用 HTTPS 监视

值:true | false

kvem.netmon.socket.enable

监视器 > 启用套接字监视

值:true | false

kvem.netmon.ssl.enable

监视器 > 启用 SSL 监视

值:true | false

kvem.profiler.enable

监视器 > 启用 Profiling

值:true | false

netspeed.bitpersecond

性能 > 位/秒组合框

值:整型

netspeed.enableSpeedEmulation

性能 > 启用网络吞吐量仿真

值:true | false

screen.graphicsLatency

性能 > 图形图元时延

值:整型

screen.refresh.mode

性能 > 显示刷新(单选按钮)

值:默认 | 立即 | 定时

screen.refresh.rate

性能 > 显示刷新(滑块)

值:整型

vmspeed.bytecodespermilli

性能 > 启用虚拟机速度仿真(复选框)

值:整型

vmspeed.enableEmulation

性能 > 启用虚拟机速度仿真(滑块)

值:true | false

storage.root

存储 > 存储根目录

值:字符串(appdb 的相对路径)

storage.size

存储 > 存储大小

值:整型

mm.control.capture

MMedia > 音频捕获

值:true | false

mm.control.midi

MMedia > MIDI 音调

值:true | false

mm.control.mixing

MMedia > 音频混合

值:true | false

mm.control.record

MMedia > 音频录音

值:true | false

mm.control.volume

值:true | false

mm.format.midi

MMedia > MIDI 格式

值:true | false

mm.format.video

MMedia > 视频格式

值:true | false

mm.format.wav

MMedia > WAV 音频格式

值:true | false

wma.client.phoneNumber

WMA > 下一个仿真器的电话号码

值:整型

wma.server.firstAssignedPhoneNumber

WMA > 首次指定的电话号码

值:整型

wma.server.percentFragmentLoss

WMA > % 随机消息片段丢失

值:整型

wma.server.deliveryDelayMS

WMA > 消息片段发送延迟(毫秒)

值:整型


 


B.5 使用安全功能

通过命令行还可以使用 Sun JavaTM Wireless Toolkit for CLDC 的所有安全功能。用户可以调整仿真器的默认保护域、签名 MIDlet 套件以及管理证书。

B.5.1 更改仿真器的默认保护域

要调整仿真器的默认保护域,请使用 emulator 命令的下列选项:

-Xdomain domain-type

为 MIDlet 套件指定安全域。域类型包括 untrustedtrustedminimummaximum

B.5.2 签名 MIDlet 套件

JadTool 是用于根据 MIDP 2.0 规范使用公钥密码学签名 MIDlet 套件的命令行接口。签名 MIDlet 套件是指向 JAD 文件添加签名者证书和 JAR 文件的数字签名的过程。JadTool 还可以签名付费更新 (JPP) 文件。

JadTool 仅使用 Java SE 平台密钥库中的证书和密钥。Java SE 软件提供用于管理 Java SE 平台密钥库的命令行工具 keytool

JadTool 打包在 JAR 文件中。要运行该工具,请打开命令提示符,将当前目录更改为 toolkit\bin,然后输入以下命令:

java -jar JadTool.jar command

命令如下:

打印 JADTool 的使用指导。

将给定密钥库中的密钥对证书添加到 JAD 文件或 JPP 文件中。

将给定 JAR 文件的数字签名添加到指定的 JAD 文件中。-jarfile 的默认值为 JAD 文件中的 MIDlet-Jar-URL 属性。

显示给定 JAD 文件中的证书列表。

将输入 JPP 文件的数字签名添加到指定的输出 JPP 文件中。

默认值如下:

B.5.3 管理证书

MEKeyTool 用于管理证书授权机构 (CA) 的公钥,这在功能上类似于 Java SE SDK 附带的实用程序 keytool。可以使用密钥来增强跨越 SSL 的安全 HTTP 通讯 (HTTPS)。

使用 MEKeyTool 之前,必须首先具有对 Java 加密扩展密钥库的访问权限。可使用 Java SE keytool 实用程序创建一个。

Windows

http://java.sun.com/javase/6/docs/technotes/tools/windows/keytool.html

Linux

http://java.sun.com/javase/6/docs/technotes/tools/solaris/keytool.html

要运行 MEKeyTool,请打开命令提示符,将当前目录更改为 toolkit\bin,然后输入以下命令:


对于 Windows 系统:

toolkit\bin\mekeytool.exe -command

对于 Linux 系统:

toolkit/bin/mekeytool -command


 

接下来会出现命令关键字。请注意,当 MEKeyTool 从安装目录中运行时,默认密钥及您所创建的密钥将位于您的个人目录 workdir\appdb 中。

打印 MEKeyTool 的使用指导。

使用给定 Java 加密扩展密钥库口令将给定的 JCE 密钥库中的公钥导入到 ME 密钥库中。默认的 ME 密钥库为 workdir\appdb\_main.mks,默认的 Java 加密扩展密钥库为 user.home\.keystore

列出 ME 密钥库中的密钥,包括每个密钥的所有者及有效期。ME 密钥库为 workdir\appdb\_main.mks

从给定的 ME 密钥库中删除指定所有者的密钥。ME 密钥库为 workdir\appdb\_main.mks



注 - Sun JavaTM Wireless Toolkit for CLDC 包含名为 _main.mks 的 ME 密钥库,该密钥库位于 appdb 子目录下。该密钥库中包含 Java SE SDK 安装中附带的默认 Java SE 平台密钥库中的所有证书。




B.6 使用桩模块生成器

移动客户机可使用桩模块生成器访问 Web 服务。wscompile 工具可生成用于 Java API for XML (JAX) RPC 客户机和服务的桩模块、绑定、串行器和 WSDL 文件。该工具读取指定 WSDL 文件、模型文件或编译的服务端点接口的配置文件。桩模块生成器命令的语法如下:

wscompile [options] configuration-files

B.6.1 选项


表 B-3 wscompile 命令的选项

选项

描述

-d output directory

指定存放生成的输出文件的位置

-f:features

启用给定的功能

-features:features

-f:features 相同

-g

生成调试信息

-gen

-gen:client 相同

-gen:client

生成客户机工件(如桩模块等)

-httpproxy:host:port

指定 HTTP 代理服务器(默认端口为 8080)

-import

仅生成接口和值类型

-model file

将内部模型写入给定的文件

-O

优化已生成的代码

-s directory

指定存放生成的源文件的位置

-verbose

输出消息,说明编译器正在执行的操作

-version

打印版本信息

-cldc1.0

将 CLDC 版本设置为 1.0(默认值)。浮点型和双精度型变为字符串型。

-cldc1.1

将 CLDC 版本设置为 1.1(可以是浮点型和双精度型)

-cldc1.0info

显示所有 CLDC 1.0 信息和警告消息。


 

注 - 必须仅指定一个 -gen 选项。-f 选项要求提供功能的逗号分隔列表。



表 B-4 列出 -f 选项所包含的功能(逗号分隔)。wscompile 工具可读取作为输入的 WSDL 文件、已编译的服务端点接口 (Service Endpoint Interface, SEI) 或模型文件。“文件类型”列指出可与某项特定功能一起使用的文件。


表 B-4 wscompile 的命令支持的功能 ( -f )

选项

描述

文件类型

explicitcontext

打开显式服务上下文映射

WSDL

nodatabinding

关闭文字编码的数据绑定

WSDL

noencodedtypes

关闭编码类型信息

WSDL、SEI、模型

nomultirefs

关闭对多重引用的支持

WSDL、SEI、模型

novalidation

关闭已导入 WSDL 文档的完整验证

WSDL

searchschema

对模式进行侵入式搜索以查找子类型

WSDL

serializeinterfaces

打开接口类型的直接串行化

WSDL、SEI、模型

wsi

启用 WSI 基本配置文件功能(默认)

 

resolveidref

解析 xsd:IDREF

 

nounwrap

不展开。

 


 

示例

wscompile -gen -d generated config.xml
wscompile -gen -f:nounwrap -O -cldc1.1 -d generated config.xml