|
|
作者:tct66
范例:我们假设一个名字为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描述文件必须提供如下属性:
属性名
说明
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
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将再次向服务器报告。
POST代码
代表消息
900
成功
901
内存不足
902
用户取消
903
服务丢失
904
JAR大小不匹配
905
属性不匹配
906
无效的JAD
907
无效的JAR
908
不兼容的configuration或profile
909
验证失败
910
授权失败
911
Push注册失败
912
删除通知
|
|