(转)MIDlet的开发流程与部署

第10章 MIDlet的开发流程与部署

10.1 j2me程序的开发流程

10.1.1 开发流程详解

10.2 MIDlet Suites

10.2.1 JAM

10.2.2 MIDlet Suite

10.2.3 JAR manifest

10.2.4 JAD描述文件

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

10.3 OTA(over-the-air)

10.3.1 OTA的介绍

10.3.2 OTA安装

10.3.3 更新MIDP Suite

10.3.4 MIDP Suite的删除

10.3.5 MIDP Suite安装和删除报告

10.1 j2me 程序的开发流程

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

编译 -> 混淆(可选)-> 预审核-> 打包

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

10.1.1 开发流程详解

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

流程

工具

输入

输出

编译

javac.exe编译

源文件(*.java)

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

混淆

第三方提供的工具

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

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

预审

preverify.exe预审核

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

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

jar.exe打包

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

包文件(*.jar)

编写描述文件

文本编辑工具

描述文件(*.jad)

安装运行

传输工具

(IR/BT/数据线/OTA)

包文件(*.jar)和

描述文件(*.jad)

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

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

编译

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

混淆(可选)

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

名称

地址

特点

JODE

http://jode.sourceforge.net/ /

开源

ProGuard

http://proguard.sourceforge.net/

开源

RetroGuard

http://www.retrologic.com/ /

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

DashO

http://www.preemptive/ .com/

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

ZKM

http://www.zelix.com/

商业软件可试用

JBuilder

http://www.borland.com/

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

预审核

在完成编译后,我们必须要对*.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的各种属性。

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

属性名

说明

MIDlet-Name

MIDlet Suite 的名称

MIDlet-Version

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

MIDlet-Vendor

MIDlet Suite 的提供商

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

属性名

说明

MIDlet-

用来描述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-

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

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-

MicroEdition-Profile

MicroEdition-Configuration

可选以下属性:

属性名

说明

MIDlet-Description

MIDlet-Icon

MIDlet-Info-URL

MIDlet-Data-Size

MIDlet-Permissions

MIDlet-Permissions-Opt

MIDlet-Push-

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

不兼容的configurationprofile

909

验证失败

910

授权失败

911

Push 注册失败

912

删除通知

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本教程首先介绍了 j2me 开发体系,然后深入各个MIDP2.0 API,最后是搭建平台的知识。 第一章 “J2ME 技术概述”让你在学习J2ME 以前知道什么是J2ME。本章介绍了J2ME 平 台的体系结构和MIDlet 生命周期的概念。为以后的内容打下良好的基础。 第二章“CLDC 简介”介绍了MIDP 的基础Java Community Process(JCP)公布的CLDC1.0 规范(即JSR30)。有了这些知识你就可以顺利的从j2se 的基础API 过渡到MIDP 的基础API 上了。 第三章“MIDP 高级UI 的使用”介绍了MIDP 的可移植UI API,我们称之为高级UI。这 样您的应用就可以栩栩如生了。 第四章“MIDP 低级UI 的使用” 介绍了MIDP 的不可移植UI API,我们称之为低级UI。 利用他你可以更加自由的绘画你的UI。你将了解到关于事件处理的很多知识。 第五章“MIDP 的持久化解决方案— RMS” 为我们讲解了数据持久化机制——记录管理 系统(Record Management System RMS)。这一特别的小型数据库使得MIDP 的数据保存变得很特 别。 第六章“GAME API” 介绍了 MIDP 2.0 相对于1.0 来说,最大的变化——新添加的用于支 持游戏的API,它们被放在javax.microedition.lcdui.game 包中。游戏API 包提供了一系列针对无 线设备的游戏开发类。你可以开发你的游戏了。COOL! 第七章“开发无线网络应用程序” 让我们学习如何开发令人激动的联网应用。无线网络在 当今的技术下与有线网络相比它的带宽更小、延迟更大、连接的稳定性更差。这要求我们在开 发无线联网应用程序时,和以往有很大不同。 第八章“MIDP 2.0 安全体系结构” 将主要介绍MIDP 的安全体系模型,并结合一个具体的 实例来讲述MIDP2.0 安全模型的主要概念。 第九章“MIDP 2.0 Push 技术”介绍了如何通过异步方式将信息传送给设备并自动启动 J2ME 中文教程 by www.j2medev.com MIDlet 程序的机制。 第十章“MIDlet 的开发流程部署”介绍了如何真正完成你的程序并打包发往设备运行。 第十一章“搭建开发平台—WTK”主要讲述J2ME 新手最常使用的开发工具Wireless Toolkit (WTK)。从WTK 的安装、到MIDlet 项目的创建、以及最后的打包发布,一步步带领读者进 入MIDlet 的开发世界! 第十二章“搭建开发平台—Eclipse”讲述了如何利用EclipseME 作为Eclipse 一个插件,帮 助开发开发J2ME 应用程序。 第十三章“搭建开发平台—JBuilder”介绍了如何利用久负盛名的JBuilder 作为开发工具来 开发J2ME 应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值