站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题J2ME中文教程 10 MIDlet的开发流程与部署

J2ME中文教程 10 MIDlet的开发流程与部署

摘要: J2ME中文教程 10 MIDlet的开发流程与部署

作者:tct66 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=269

10.1 j2me程序的开发流程

在本章之前所介绍的都是怎么样编写J2ME的源文件(即*.java文件)。因为j2me不同于j2se程序的开发流程,在编写好java源文件后,我们还要继续进行如下工作:

l 编译

l 混淆(可选)

l 预审核

l 打包

打包后,将获得了一个jar文件。接下来为jar文件编写一个以jad为后缀的描述文件。最后通过各种途径将jar文件、jad描述文件传输到移动设备上运行即可。

10.1.1 开发流程详解

完整的MIDP手机程序开发流程如下表(其中混淆为可选):

<table class="MsoTableSimple3" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 74.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="99">

流程

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 140.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="188">

工具

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

输入

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

输出

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 74.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="99">

编译

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 140.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="188">

javac.exe编译

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

源文件(*.java)

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

未混淆的类文件(*.class)

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 74.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="99">

混淆

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 140.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="188">

第三方提供的工具

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

未混淆的类文件(*.class)

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

混淆后的类文件(*.class)

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 74.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="99">

预审

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 140.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="188">

preverify.exe预审核

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

混淆后的类文件(*.class)

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

经过预先审核的类文件(*.class)

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 74.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="99">

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 140.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="188">

jar.exe打包

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

经过预先审核的类文件(*.class)

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

包文件(*.jar)

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 74.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="99">

编写描述文件

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 140.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="188">

文本编辑工具

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="147">

描述文件(*.jad)

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 74.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="99">

安装运行

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 140.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="188">

传输工具

(IR/BT/数据线/OTA)

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="147">

包文件(*.jar)和

描述文件(*.jad)

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 110.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="147">

在仿真器或手机上正式运行

</td></tr></table>

下面将会介绍每个步骤。当利用集成开发环境(诸如JBuilder、NetBeans、Sun ONE Studio、Eclipse等)时,这些工具不仅可以很快的帮我们建立起代码的主干,而且可以帮助我们自动的完成上面的大部份工作(关于集成开发环境的利用见后面的章节)。在利用IDE开发之前,开发者有必要了解其中每一步的原理。

编译

编译就是将我们所编制的*.java 文文件,编译成为二进制的*.class文件(计算机只认识二进制!)。javac.exe是由Sun公司编写的一个编译器,它可以把*.java文件编译成为*.class文件。注意:如果一个*.java文件中定义了三个类,它就将被编译成三个*.class文件。

混淆(可选)

由于class文件格式透明的缘故,java文件很容易被反汇编。因此,如果你不希望别人掌握你的源代码的话,你一定要进行混淆(obfuscate)。所谓混淆,就是利用工具,将方法名、类名改成没有实际意义的特定的字符及代号,增加阅读的难度。这样就充分的保护了我们自己的知识产权。而且混淆还有个意想不到的好处,就是减少程序的大小。这是由于混淆器将我们设定的方法名、类名变成没有意义的短字符或代码,无形中减少了程序的大小。对于手机程序设计来讲尤为重要,每K的减少都意味着可以获得更多的空间。混淆器都是第三方软件开发商提供的,许多都是开源的,可以免费使用。常见的混淆器见下表:

<table class="MsoTableSimple3" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="189">

名称

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 115.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="154">

地址

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="225">

特点

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="189">

JODE

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 115.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="154">

http://jode.sourceforge.net/

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="225">

开源

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="189">

ProGuard

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 115.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="154">

http://proguard.sourceforge.net/

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="225">

开源

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="189">

RetroGuard

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 115.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="154">

http://www.retrologic.com/

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="225">

开源,中国移动百宝箱强制使用

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="189">

DashO

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 115.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="154">

http://www.preemptive.com/

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="225">

商业软件,一般专业公司使用,昂贵

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="189">

ZKM

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 115.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="154">

http://www.zelix.com/

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="225">

商业软件可试用

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="189">

JBuilder

</td><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 115.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="154">

http://www.borland.com/

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="225">

集成开发环境中内附混淆功能,但JBuilder的价格也不便宜。

</td></tr></table>

预审核

在完成编译后,我们必须要对*.class文件进行预审核,这和传统的Java程序(Applet、Servlet)是不同的。因为class在传输过程中容易损坏或是被篡改,传统的Java程序在运行前,都在本地机器上对.class进行Byte Code的审核。而对于手机这样的资源有限设备而言,在手机上进行大量的此类的审核是极为浪费资源(如占用CPU的时间、消耗电力等)。因此,我们必须先在PC机上使用preverify.exe进行一部份预选审核工作。这样,在手机上进行的审核工作就大量减少了。

打包与编写描述文件

MIDP可执行文件后缀名为jar。利用jar file.class就能将通过预审核的*.class文件,打包成 MIDP认可的可执行文件。后缀名为jad的文件是jar文件的描述文件,jad文件详细介绍见第二节。

在仿真器或手机上安装运行

有了jar及jad文文件后,我们就可以把它们放到仿真器或手机上运行了。至于如何把它们放到手机上,根据手机的功能不同,有如下方法可以选择:

l 使用数据线,将PC与手机相连,下载文件

l 使用红外线

l 使用蓝牙

l 使用OTA空中下载(利用短信/WAP)

10.2 MIDlet Suites

10.2.1 JAM

JAM (Java Application Manager) 中文一般翻译为应用程序管理器。在有些文档中,JAM也被叫做AMS (application manager software),这两个术语所描述的概念是完全一样的。简单来讲,JAM是管理移动设备上所有J2ME应用程序的软件,负责J2ME应用程序的下载、安装、更新与删除。JAM由是移动设备本身所提供的,不同公司的实现略有不同,初级开发人员只要知道其作用就可以了。

10.2.2 MIDlet Suite

对MIDlet Suite简单理解是MIDlet程序的一个集合。MIDlet Suite包含了一个或多个MIDlet、资源文件以及JAR manifest,这些内容被打包成一个JAR包。通常情况上讲MIDlet Suite还需要一个外部的JAD描述文件。

MIDlet Suite是为了解决多个MIDlet受控访问、共享资源的问题而提出的模型。举个共享资源的例子:在前面的章节中我们已经介绍过,RMS的共享在一般情况下是以MIDlet Suite为单位进行的,即同一个MIDlet Suite中的MIDlet可以安全的共享所在MIDlet Suite中的RMS。因此,当多个MIDlet要共享RMS时,就可以将它们放进一个MIDlet Suite中。为了保证安全性,MIDlet Suite中的MIDlet、资源文件都不能独立安装、删除或更新。即MIDlet Suite必须作为一个整体包来对其操作。对于设备来讲MIDlet Suite是一个基本单位。

10.2.3 JAR manifest

前面我们介绍过,JAR文件就是经打包后的可执行文件,包括下面各种元素:

1) 实现MIDlet的类文件;

2) MIDlet中用到的任何资源文件(包括图像、声音文件等);

3) 关于JAR内容的一份JAR manifest描述。

根据MIDP规范的规定,每个MIDlet Suite的JAR文件中必须包含一个名为mainifest.mf的文件,这个文件用于描述MIDlet Suite的各种属性。

其中,必须包含以下属性:

<table class="MsoTableSimple3" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

属性名

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

说明

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Name

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

MIDlet Suite的名称

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Version

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

MIDlet Suite的版本号,格式为主版本.次版本.微版本,例如0.0.0,这也是版本号的默认值。版本号主要用于安装或升级。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="199">

MIDlet-Vendor

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="369">

MIDlet Suite的提供商

</td></tr></table>

如果JAD描述文件中未提供下列属性,则JAR manifest必须提供的属性:

<table class="MsoTableSimple3" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 176.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="235">

属性名

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 249.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="333">

说明

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 176.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="235">

MIDlet-

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 249.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="333">

用来描述MIDlet Suite中所包含MIDlet的信息。第一个MIDlet就以MIDlet-1代表,第二个MIDlet就以MIDlet-2代表。(最小从1开始,不能重复,不能间隔)。属性值格式如下:

应用程序名称,图标,类名称(以逗号间隔)

其中应用程序名称由开发人员指定;图标必须是位于JAR中的PNG格式图像文件(可选);类名称为MIDlet的类文件名。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 176.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="235">

MicroEdition-Profile

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 249.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="333">

MIDlet Suite所需要profile的名称及版本号,如MIDP-1.0。多个profile用空格来分隔。如果所指定的任何一个profile设备无法提供(包括版本不兼容),JAM将拒绝安装该MIDlet Suite。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 176.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="235">

MicroEdition-Configuration

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 249.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="333">

MIDlet Suite所需要configuration名称及版本号,如CLDC-1.1。如果设备无法提供该configuration,那么JAM将拒绝安装该configuration。

</td></tr></table>

可选以下属性:

<table class="MsoTableSimple3" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

属性名

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

说明

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Description

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

关于此MIDlet Suite的简短说明。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Icon

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

MIDlet Suite的图标的文件名。必须位于JAR文件中,以PNG为格式。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Info-URL

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

关于MIDlet Suite更详细描述的URL地址。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Data-Size

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

MIDlet Suite所需要的持久化数据储存(persistent data,即RMS)的大小,默认值为0。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Permissions

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

执行此MIDlet Suite的主要权限(见上章)

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Permissions-Opt

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

执行此MIDlet Suite的可选权限(见上章)

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Push-

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

与javax.microedition.io.PushRegistry有关,详见Push章。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Install-Notify

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

向此URL发送一个POST请求,报告此MIDlet Suite的安装状况,比如是全新安装还是升级安装。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Delete-Notify

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

向此URL发送一个POST请求,报告此MIDlet Suite的删除状况。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="211">

MIDlet-Delete-Confirm

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="357">

当用户选择删除MIDlet Suite时,将给予用户的提示信息。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 158.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="211">

应用程序专用的任何属性

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 267.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="357">

不以“MIDlet-”或“MicroEdition-”开头

</td></tr></table>

注意:所有属性都可以通过调用MIDlet.getAppProperty方法取得。

范例:我们假设一个名字为MyGame的MIDlet Suite,由PPJ2me公司提供,版本为1.1.1。其中包括两个MIDlet:MyGame01,MyGame02。那么对应mainifest.mf文件可能是这样的:

mainifest.mf

MIDlet-Name: MyGame

MIDlet-Version: 1.1.1

MIDlet-Vendor: PPJ2me

MIDlet-1: MyGame01, /MyGame01.png, com.PPJ2me.MyGame01

MIDlet-2: MyGame02, /MyGame02.png, com.PPJ2me.MyGame02

MicroEdition-Profile: MIDP-2.0

MicroEdition-Configuration: CLDC-1.1

10.2.4 JAD描述文件

下面谈谈JAD描述文件,虽然某些设备上,JAM并不一定要求有JAD描述文件。尤其在MIDP1.0时,JAD描述文件似乎用处不大。但在MIDP2.0中,JAD描述文件涉及了许多安全方面问题,显得尤为重要。一般而言,在下载JAR文件前,会先下载JAD描述文件,以让设备了解该MIDlet Suite是否适合自己。避免直接下载JAR文件导致大量的成本消耗。这也是设计JAD描述文件的初衷之一。另一个目的就是提供在不更改JAR的前提下修改某些属性值的能力。

JAD描述文件为纯文本文件,文件扩展名为.jad。JAD描述文件和JAR manifest有很多相似的地方,所以部分说明请参见上一节。

如果有JAD描述文件,则JAD描述文件必须提供如下属性:

<table class="MsoTableSimple3" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

属性名

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

说明

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

MIDlet-Name

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

MIDlet-Version

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

MIDlet-Vendor

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

MIDlet-Jar-URL

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="284">

下载该MIDlet Suite的URL地址。虽然这里可以使用绝对位置或相对位置,但还是建议用绝对位置。

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="284">

MIDlet-Jar-Size

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="284">

JAR文件的大小,计算单位为字节。

</td></tr></table>

如果JAR manifest未提供下列属性,JAD描述文件中则必须提供:

<table class="MsoTableSimple3" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 176.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="235">

属性名

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 249.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="333">

说明

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 176.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="235">

MIDlet-

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 249.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="333">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 176.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="235">

MicroEdition-Profile

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 249.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="333">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 176.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="235">

MicroEdition-Configuration

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 249.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="333">

</td></tr></table>

可选以下属性:

<table class="MsoTableSimple3" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

属性名

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

说明

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Description

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Icon

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Info-URL

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Data-Size

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Permissions

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Permissions-Opt

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Push-

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Install-Notify

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Delete-Notify

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="199">

MIDlet-Delete-Confirm

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="369">

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 149.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="199">

应用程序专用的任何属性

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 276.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="369">

</td></tr></table>

对应用程序自己的属性的说明

应用程序可以利用jad来记录自己的专用属性,只要不以“MIDlet-”或“MicroEdition-”开头。这往往非常流行。因为一旦打包成jar,就不方便对其进行修改。而jad是文本文件,方便修改。因此这些属性常用来记录和设备相关的信息或者是网络地址等。这在移植程序时,减轻了很大的工作量。所有属性都可以通过调用MIDlet.getAppProperty方法取得。

范例:我们假设一个名字为MyGame的MIDlet Suite,由PPJ2me公司提供,版本为1.1.1。其中包括两个MIDlet:MyGame01,MyGame02。那么其对应的JAD描述文件可能是这样的:

MyGame.jad

MIDlet-Name: MyGame

MIDlet-Version: 1.1.1

MIDlet-Vendor: PPJ2me

MIDlet-1: MyGame01, /MyGame01.png, com.PPJ2me.MyGame01

MIDlet-2: MyGame02, /MyGame02.png, com.PPJ2me.MyGame02

MicroEdition-Profile: MIDP-2.0

MicroEdition-Configuration: CLDC-1.1

MIDlet-Description: That our sample game.

MIDlet-Jar-URL: http://www.ppj2me.com/game/MyGame.jar

MIDlet-Jar-Size: 7378

MIDlet-Data-Size: 256

10.2.5 JAD 描述文件与JAR manifest的关系

前面介绍JAD描述文件的时候已经介绍了:为什么有了JAR manifest的同时还要有JAD描述文件存在的原因。那么这两者之间还有什么必然的联系吗?

细心的读者可能已经发现,JAD描述文件和JAR manifest中都包括了三个相同的必备属性:

属性名

l MIDlet-Name

l MIDlet-Version

l MIDlet-Vendor

出于安全性考虑,MIDP规范规定,如果JAD描述文件及JAR manifest中这三个必备属性有任何不同的话,JAM是不会安装该MIDlet Suite的。

在调用MIDlet.getAppProperty的时候:对于不可信任的MIDlet Suite,JAD描述文件的属性会覆盖JAR manifest中的属性。对于可信任的MIDlet Suite,两者必须相同。(有关于可信任及不可信任MIDlet Suite的概念,在上章中有详细说明)。

10.3 OTA(over-the-air)

10.3.1 OTA的介绍

虽然现在MIDP设备大部分都预装了几个MIDP Suite,但对于用户而言,总是希望得到最新的、最实用的MIDP Suite。这就要求MIDP设备提供下载机制。以前最可行的方法就是利用与电脑的串行电缆联接,从电脑上下载MIDP Suite。但现在最流行的方式就是OTA方式。用户可以在任何无线网络覆盖的地方下载自己喜欢的MIDP Suite,这些MIDP Suite存放在支持OTA方式的许多服务器上。

MIDP2.0中规定,OTA下载的规范是HTTP协议的。例如MIDP设备上的WWW、WAP或i-Mode都是基于HTTP协议的。因为像WAP这种协议可能不是基于IP的,在MIDP设备与服务器中间需要中转站等转接设备,为了方便我们进一步讲解,我们将忽略这些中转站的存在,而把OTA看作是MIDP设备与服务器之间的直接联系。

10.3.2 OTA安装

一个典型的OTA安装请求,包括如下步骤:

1)用户在下载MIDP Suite时,首先要给MIDP设备一个URL地址,以确定使用哪台服务器及服务器的哪个MIDlet文件。第(1)项和第(2)项可能不是必须执行的,如果用户指定的URL是一个JAR文件,则直接进行第(3)项。如果URL指定的是一个JAD描述文件,则MIDP设备向服务器发出下载JAD描述文件的请求。

2)服务将返回所请求的JAD描述文件。在成功收到JAD描述文件后,MIDP设备将检验JAD描述的安全及规格,检查设备是否能正确运行该MIDP Suite。这种做法保证了在试图传输较大的JAR文件前,先确定设备拥有运行MIDP Suite所需要的适当能力及资源。

3)如果用户所指定的URL指向了一个JAR文件,或第(2)项检查成功,则MIDP设备将向服务发出下载JAR文件的请求。

4)服务器将返回所请求的JAR文件。下载成功后,MIDP Suite将被安装。

5)在可能的情况下,MIDP设备向服务发送一条安装状态的通知,通知该MIDP Suite是否安装成功。即使在MIDP设备无法向服务器发出通知的情况下,该MIDP Suite仍然可以正常运行。

10.3.3 更新MIDP Suite

当某个MIDP Suite产生更高的版本时,用户往往会尝试更新。更新是不会被自动运行的,需要用户再重复一遍上节所介绍的安装步骤,值得注意的是:不管第二次下载的版本号是否与设备上已有MIDP Suite版本号相同,甚至是比原有版本更低,设备都会为将其视为MIDP Suite的升级。但不论什么情况,JAM都会通知用户要安装的MIDP Suite是比现有的高、相同或低,然后经用户确认后继续。具体还要参考JAM的实现。

在更新的过程中,原有MIDP Suite的RMS存储记录是否被更新后的MIDP Suite所用,按照如下规则进行:

1) 如果新MIDP Suite的加密签名(详见安全章节)与原来的相同,则RMS存储记录将被保留给新MIDP Suite所用。

2) 如果新MIDP Suite的JAR文件manifest中URL、主机和路径与原有的相同,则RMS存储记录将被保留给新MIDP Suite所用。

3) 如果新MIDP Suite的JAD文件中URL、主机和路径与原有的相同,则RMS存储记录将被保留给新MIDP Suite所用。

4) 如果上述条件没有一条满足,则JAM将向用户询问,RMS是否为新MIDP Suite所用。

10.3.4 MIDP Suite的删除

如果用户从设备上删除MIDP Suite,用户一般情况下会被JAM询问是否确定删除。在此同时,如果JAR中manifest或JAD文件中包含了MIDlet-Delete-Confirm属性,则该属性所定义的内容,也将同时被包括进删除的提示信息内。因此,在该属性内,应同时向用户提示诸如MIDP Suite中所有MIDlet及RMS都将被删除的信息。

10.3.5 MIDP Suite安装和删除报告

在MIDlet Suite安装和删除时,MIDlet Suite会尝试向当初下载该MIDlet Suite的服务器进行报告。这就会用到JAR中manifest或JAD描述文件的MIDlet-Install-Notify和MIDlet-Delete-Notify属性。由于这两个属性是可选的,因此,MIDlet Suite正确向服务器发送状况也不是必须的。也就是说,不论安装或删除状况是否正确向服务器报送,该MIDlet Suite的安装及删除也会顺利进行。

安装:在MIDlet Suite安装时,该状态报告发往MIDlet-Install-Notify中所指定的URL(注意:不论是安装不删除状况的发送,其发送的都是POST请求,该请求的第一行将包括一个有效的代码,详见下表)。如果状况报告无法正确向服务器报告,在该设备的网络连通时,MIDlet Suite将再次向服务器报告。

删除:在MIDlet Suite删除时,该状态报告发往MIDlet-Delete-Notify中所指定的URL。删除状况不会被立即报告,而是在下次发送安装状况时向服务器报告。如果状况报告无法正确向服务器报告,在该设备的网络连通时,MIDlet Suite将再次向服务器报告。

<table class="MsoTableSimple3" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

POST代码

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: black; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

代表消息

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

900

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

成功

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

901

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

内存不足

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

902

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

用户取消

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

903

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

服务丢失

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

904

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

JAR大小不匹配

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

905

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

属性不匹配

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

906

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

无效的JAD

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

907

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

无效的JAR

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

908

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

不兼容的configuration或profile

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

909

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

验证失败

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

910

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

授权失败

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="97">

911

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none" valign="top" width="203">

Push注册失败

</td></tr><tr><td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 72.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="97">

912

</td><td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 152.35pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid" valign="top" width="203">

删除通知

</td></tr></table>



↑返回目录
前一篇: J2ME中文教程 9 MIDP 2 Push技术
后一篇: J2ME开发内存优化方法