MIDlet Suites
1. JAM
JAM (Java Application Manager) 中文一般翻译为应用程序管理器。在有些文档中,JAM也被叫做AMS (application manager software),这两个术语所描述的概念是完全一样的。简单来讲,JAM是管理移动设备上所有J2ME应用程序的软件,负责J2ME应用程序的下载、安装、更新与删除。JAM由是移动设备本身所提供的,不同公司的实现略有不同,初级开发人员只要知道其作用就可以了。
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是一个基本单位。
3. JAR manifest
JAR文件就是经打包后的可执行文件,包括下面各种元素:
1) 实现MIDlet的类文件;
2) MIDlet中用到的任何资源文件(包括图像、声音文件等);
3) 关于JAR内容的一份JAR manifest描述。
根据MIDP规范的规定,每个MIDlet Suite的JAR文件中必须包含一个名为mainifest.mf的文件,这个文件用于描述MIDlet Suite的各种属性。
其中,必须包含以下属性:
属性名 |
说明 |
MIDlet-Name |
MIDlet Suite的名称 |
MIDlet-Version |
MIDlet Suite的版本号,格式为主版本.次版本.微版本,例如0.0.0,这也是版本号的默认值。版本号主要用于安装或升级。 |
MIDlet-Vendor |
MIDlet Suite的提供商 |
如果JAD描述文件中未提供下列属性,则JAR manifest必须提供的属性:
属性名 |
说明 |
MIDlet-<n> |
用来描述MIDlet Suite中所包含MIDlet的信息。第一个MIDlet就以MIDlet-1代表,第二个MIDlet就以MIDlet-2代表。(最小从1开始,不能重复,不能间隔)。属性值格式如下: 应用程序名称,图标,类名称(以逗号间隔) 其中应用程序名称由开发人员指定;图标必须是位于JAR中的PNG格式图像文件(可选);类名称为MIDlet的类文件名。 |
MicroEdition-Profile |
MIDlet Suite所需要profile的名称及版本号,如MIDP-1.0。多个profile用空格来分隔。如果所指定的任何一个profile设备无法提供(包括版本不兼容),JAM将拒绝安装该MIDlet Suite。 |
MicroEdition-Configuration |
MIDlet Suite所需要configuration名称及版本号,如CLDC-1.1。如果设备无法提供该configuration,那么JAM将拒绝安装该configuration。 |
可选以下属性:
属性名 |
说明 |
MIDlet-Description |
关于此MIDlet Suite的简短说明。 |
MIDlet-Icon |
MIDlet Suite的图标的文件名。必须位于JAR文件中,以PNG为格式。 |
MIDlet-Info-URL |
关于MIDlet Suite更详细描述的URL地址。 |
MIDlet-Data-Size |
MIDlet Suite所需要的持久化数据储存(persistent data,即RMS)的大小,默认值为0。 |
MIDlet-Permissions |
执行此MIDlet Suite的主要权限(见上章) |
MIDlet-Permissions-Opt |
执行此MIDlet Suite的可选权限(见上章) |
MIDlet-Push-<n> |
与javax.microedition.io.PushRegistry有关,详见Push章。 |
MIDlet-Install-Notify |
向此URL发送一个POST请求,报告此MIDlet Suite的安装状况,比如是全新安装还是升级安装。 |
MIDlet-Delete-Notify |
向此URL发送一个POST请求,报告此MIDlet Suite的删除状况。 |
MIDlet-Delete-Confirm |
当用户选择删除MIDlet Suite时,将给予用户的提示信息。 |
应用程序专用的任何属性 |
不以“MIDlet-”或“MicroEdition-”开头 |
注意:所有属性都可以通过调用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
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描述文件必须提供如下属性:
属性名 |
说明 |
MIDlet-Name |
略 |
MIDlet-Version |
略 |
MIDlet-Vendor |
略 |
MIDlet-Jar-URL |
下载该MIDlet Suite的URL地址。虽然这里可以使用绝对位置或相对位置,但还是建议用绝对位置。 |
MIDlet-Jar-Size |
JAR文件的大小,计算单位为字节。 |
如果JAR manifest未提供下列属性,JAD描述文件中则必须提供:
属性名 |
说明 |
MIDlet-<n> |
略 |
MicroEdition-Profile |
略 |
MicroEdition-Configuration |
略 |
可选以下属性:
属性名 |
说明 |
MIDlet-Description |
略 |
MIDlet-Icon |
略 |
MIDlet-Info-URL |
略 |
MIDlet-Data-Size |
略 |
MIDlet-Permissions |
略 |
MIDlet-Permissions-Opt |
略 |
MIDlet-Push-<n> |
略 |
MIDlet-Install-Notify |
略 |
MIDlet-Delete-Notify |
略 |
MIDlet-Delete-Confirm |
略 |
应用程序专用的任何属性 |
略 |
对应用程序自己的属性的说明
应用程序可以利用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
5. JAD 描述文件与JAR manifest的关系
前面介绍JAD描述文件的时候已经介绍了:为什么有了JAR manifest的同时还要有JAD描述文件存在的原因。那么这两者之间还有什么必然的联系吗?
JAD描述文件和JAR manifest中都包括了三个相同的必备属性:
属性名:
- MIDlet-Name
- MIDlet-Version
- MIDlet-Vendor
出于安全性考虑,MIDP规范规定,如果JAD描述文件及JAR manifest中这三个必备属性有任何不同的话,JAM是不会安装该MIDlet Suite的。
在调用MIDlet.getAppProperty的时候:对于不可信任的MIDlet Suite,JAD描述文件的属性会覆盖JAR manifest中的属性。对于可信任的MIDlet Suite,两者必须相同。