应用程序开发循环
截至目前为止,对于写一支简单的 MIDP 应用程序想必有一些概念了吧?不过对于如何的封装及部署 MIDP 应用程序则只字未提,底下我们来看看这个过程是如何完成的。利用 MIDP 来开发应用程序时开发循环过程:
编辑( edit )
利用字处理软件输入 Java 源代码,即 .java 的档案。
编译( compile )
利用 J2SE 中的编译程序 javac 将 Java 源代码,即 .java 的档案编译成类别档,即 .class 档。除了编译的功能外,compiler 尚会检查源代码里没有用到非 CLDC 或是 MIDP 以外的套装类别及相关的特性( features ),即属性与方法。
封装及部署( package & deployment )或称 Build (发展)
这个过程包括:
Byte-code verfication 字节码的验证。
为了减轻在移动电话中 JVM 的负荷,此阶段是利用 pre-virifier (先期验证器)处理类别档。
封装成 MIDlet Suite
利用 2SE 中的 JAR 工具将所有的经先期验证过的类别档( pre-verified class files )及应用程序里用到的一些资源文件封装成单一的 JAR 档。这个过程里也会创造出一支 JAD 档及 manifest 档。
测试
最后,利用仿真器来测试程序的执行情形是否达成开发的的目的,一旦测试无误之后,即可利用实际机器来测试了。
这个开发循环的流程图解如(图一)所示。
MIDP Suite
所有的 MIDP 应用程序的类别档都必需被封装成单一的 JAR 档,以 KToolbar 的开发情形而言,每一支的项目都会被封装成单一的 JAR 档;由于每一支项目少则一支 MIDP 应用程序,多则数个,这些多个 MIDP 应用程序的集合就是所谓的 MIDP Suite。MIDP Suite 虽然是多个 MIDP 应用程序的集合,不过其组成元素却不是只有 MIDP 应用程序的类别档而已,其构成示素如(图二)。
其中,除了与应用程序直接相关的MIDlet 类别档外,尚有共享的类别及一些资源,包括文本文件及图片档。这个 JAR 档未来便可以透过移动电话的所附的连接线与计算机联机用加载移动电话,或是透过网络下载至移动电话,最后成为移动电话里实际可行的应用程序。不管是在实际的移动电话里或是在仿真器里,JAR 档中的MIDlets 最后都变成一道道出现在画面菜单中可以让用户点选的选项。
由 JAR 档的构成里,除了与应用程序相关的一些档案外,尚有二项非常重要的档案:manifest 及 JAD。其中 manifest 是一支用来描述 MIDlet Suite 内容的档案,诸如 MIDlet 的名称、版本及供货商等内容,而 JAD 则是说明里面的每一个执行选项(即程序执行时的菜单选项)、JAR 档案的位置等信息。
manifest
manifest 档案的内容是由一对对的 name-value 的组合,下表是预先定义好的 name-value 对,其中并分成一定要有的 name-value 对及选择性的 name-value 对,参考(表一)。
下面是我们前面那支项目的 manifest档的内容:
MIDlet-1: FirstApplication, /Sokoban.png, HelloMIDlet
MIDlet-2: SecondMIDlets, /ManyBalls.png, FewCommandsMIDlet
MIDlet-Name: FirstApplication
MIDlet-Vendor: Sun Microsystems
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
二相对照起来,有二点说明:
1.name-value 之间是以冒号加以分隔。
2.表中所谓的 MIDlet-n,事实上指的是一支支的 MIDlets,其中的 n 会从 1 开始编号,每新增一支 MIDlet 就会新增一列,并自动从上一个编号依序往下递增,依此类推,如果有 n 个 MIDlet,那么就会有 n 行 MIDlet-了:
MIDlet-1: ...
MIDlet-2: ...
...
MIDlet-n: ...
选择性 |
name |
用途说明 |
否 |
MIDlet-n |
用来描述在 MIDlet Suite 里一支支的MIDP 应用程
式的相关信息。
|
否 |
MIDlet-Name |
式的相关信息。 |
否 |
MIDlet-Version |
MIDlet Suite 的名称。 |
否 |
MIDlet-Vendor |
MIDlet Suite 版本。 |
|
MIDlet-Icon |
MIDlet Suite 的提供厂商。 |
|
MIDlet-Description |
表示 MIDlet Suite 的小图标,其图形格式是 .png 档。 |
|
MIDlet-Info-URL |
描述 MIDlet Suite 的相关信息。 |
|
MIDlet-Jar-URL |
描述 MIDlet Suite 相关信息的 URL。 |
|
MIDlet-Jar-Size |
让 application manager 知道要下载此 MIDlet Suite 时的 URL。 |
|
MIDlet-Data-Size |
JAR 档的大小。 |
否 |
MicroEdition-Configuration |
MIDlet Suite 所需持续数据储存空间(persistent storage)的大小。 |
否 |
MicroEdition-Profile |
执行 MIDlet Suite 所需的 Configuration 版本。 |
执行MIDlet Suite所需的Profile版本。
其中,MIDlet-n 的格式被分成三项:SecondMIDlets、/ManyBalls.png、 FewCommandsMIDlet。manifest 档最后必需包括在 JAR 档里面。
JAD 与Java Application Descriptor
JAD 档案内容的格式与 manifest 档相同,不过使用上的目的却是有差别的。
manifest 档用来封装( packaging ) MIDlet suite,而 JAD 则是用来部署( deployment ) MIDlet suite,特别是透过Over-The-Air 的部署程序时。在 JAR 档下载到移动电话或是仿真器时,Application Management Software 便会透过检查 JAD 档,以便确定 MIDlet suite 是否适合。
JAD 档不需要包括在 JAR 档里面。
JAD 档里一样分成有一些预先定义好的非选择性的及选择性的 name-value 对,除此之外,程序设计师还可以定义属于自己用的 name-value 对。
MIDlet-Name
MIDlet-Verson
MIDlet-Vendor
MIDlet-Jar-URL
MIDlet-Jar-Size
Microedition-Configuration
Microedition-Profile
其中,非选择性部份如下:
MIDlet-Description
MIDlet-Icon
MIDlet-Info-URL
MIDlet-Data-Size
选择性部份:
MIDlet-1: FirstApplication, /Sokoban.png, HelloMIDlet
MIDlet-2: SecondMIDlets, /ManyBalls.png, FewCommandsMIDlet
MIDlet-Jar-Size: 17789
MIDlet-Jar-URL: FirstApplication.jar
MIDlet-Name: FirstApplication
MIDlet-Vendor:Sun Microsystems
MIDlet-Version: 1.0
其中七项非选择性的 name-value 对,就是会被 Application Management Software 检查的项目。以下是 JAD 档的内容:
范例的 manifest、JAR 与 JAD 档案
既然每一支 MIDP 应用程序都要有二个 JAR 与 JAD 档,可是这支程序从头到尾,压根儿都没有碰到这二个档案,既是如此,为什么这一支 MIDP 应用程序可以执行呢?事实上,在 J2ME Wireless Toolkitt 尚未出现前,开发 MIDP 应用程序都是利用命令窗口下达命令的方式来完成,此时每一步骤都需要自己来做,MIDP 应用程序的 JAR 与 JAD 档也是如此,不过我们目前是透过 J2ME Wireless Toolkitt 的 KToolbar 来完成时,这二个档已经都由工具产生完成了!
当你在 Step3. 按下时,manifest/JAD 就已经被产生了!这个档案被自动储存在项目的 bin 目录底下。
当你按下 Build 时,应该会有窗口出现,JAR/JAD 档就是在此阶段结束后自动产生的。
由此可知,所有的必要档案都透过KToolbar 按键后产生,如果程序设计师需要修改这些 name-value 对时,可透过KToolbar 的设定窗口来设定。
在程序里取用 MIDlet suite 的内容
程序设计师想要在程序里取用 MIDlet suite 中的 manifest、JAD 档及用户使用的资源文件时,有二个方法可供使用:
一是javax.microedition.midlet.MIDlet.getAppProperty();二是java.lang.Class.getResourceAsStream ()。
底下我们来看一个例子。这个例子使用的是,事先己定义好的 name-value 对,如果程序设师想要使用自定义的 name-value 对时,应如何处理呢?下面是一个简单的示范,不过其中用到了 Screen 为基础的用户接口的对象,各位如果还不能了解,可以在读完相关章节后再翻回来过一遍。
Step1.准备一张图片档放在项目底下的 res 目录,本例储存在该目录里的图档名称是 eclc_back.png。
Step2.点选,出现窗口。
Step3.点选 Optional 卷标。
Step4.点选后出现新增 name 的设定窗口。
Step5.输入 ImageLocation 后按。
Step6.点选 ImageLocation 右边的位置。
Step7.输入图片的位置及名称。
Step8.按后离开。
MIDlet suite的程序代码
结论与展望
本文在此将告一段落,希望在这二期的说明中,能够带给各位读者朋友们一些关于利用 Java 完成行动通讯程序设计一些入门的观念。
但这只是个起点而非结束。根据 IDC数据显示,到了公元 2005 年,全球的移动电话将超过 14 亿支;而 Gartner Group 的研究也预估,到了公元 2003 年,全球电子商务将有 40% 会透过行动商务来完成。随着移动电话将深入每个人的生活,让具有「无线通信、随身携带」特性的移动电话,伴随因特网的发展,使得行动商务( Mobile e-Commerce )前景无限。行动商务系指消费者藉由电信网络并透过手持式无线通信装置,像是移动电话、个人数字助理等,来进行有形货物或无形劳务的买卖、交换等各项具有货币价值的交易。
藉由撰写移动电话应用程序,让移动电话用户能够透过移动电话的无线通信功能来查询银行帐户余额、汇款、机票等各类票务预约、找停车位、下载音乐,乃至于在线游戏等,都能够为移动电话的用户提供一个极其多样化的服务内容,目前最成功的例子就是邻近日本 NTT DoCoMo 的 i-mode 服务,最近中华电信推出的「全行动生活的 emome」也是一个重视移动电话应用的另一实例。
i-mode 的基本策略就是选择业界标准的 Java 来作为程序语言。DoCoMo 与 Sun双方在 1999 年 3 月 14 日宣布携手合作,并于距离宣布合作后的三个月内,也就是同年的 6 月举行的 Java One'99 会议中,公开试制机种,并针对与会的开发人员执行一些简易程序的 demo。DoCoMo 并 且已于今( 2001 )年的 1 月推出 Java移动电话和 Java 移动电话服务。
除了 DoCoMo 的 Java 移动电话和Java 移动电话服务外,美国 Nextel Communication 也推出以 Java 2 Platform, Micro Edition ( J2ME )的 Mobile Information Device Profile ( MIDP )规格为基础的 Motorola i85s 与 i50sx 移动电话。而国内也已于今( 2001 )年 9 月推出了「太极」二代 A6288 中文双频 GPRS 手机,
这是全球首支结合 GPRS 与 J2ME 跨平台技术的多功能中文 PDA 移动电话,让用户可直接利用 GPRS 上网,下载以 J2ME 为基础的各式应用服务,如实时股市、高画质游戏、日程表工具、收支表等,丰富的动态多媒体特性,充份满足移动电话用户随时扩充移动电话的机能,及无线下载的乐趣,使移动电话用户不再局限于出厂时的原始功能,而可依个人需求来配置具个人化色彩的功能,宛如拥有一支「活的移动电话」。
最后以 Sun 的设计师 David Rivas 的一句话来勉励各位:"Write midlets... Write midlets right now"。其中 Midlet就是利用 J2ME 的 MIDP 规格所实作出来的应用程序( MIDP application ),这也是本文所要谈论的主题。