1、JavaJava移動通信程序設計移動通信程序設計 J2ME MIDPSW5Kades LuoJ2ME簡介簡介MIDP簡介簡介CLDC簡介簡介MIDP 手机程序开发流程手机程序开发流程J2ME (Java 2 Platform, Micro Edition, Java 2平台的微型版)平台的微型版)MIDP(Mobile Information Device Profile, 移動信息設配置文件)移動信息設配置文件) J2ME 是SUN 公司针对嵌入式、消费类电子产品推出的开发平台,与J2SE 和J2EE 共同组成Java 技术的三个重要的分支。J2ME 实际上是一系列规范的集合,由JCP 组织
2、制定相关的Java Specification Request(JSR)并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK 测试,这样确保兼容性。比如MIDP2.0 规范就是在JSR118 中制定的.什麼是什麼是J2ME J2ME 平台是由配置(Configuration)和简表(Profile)构成的。配置是提供给最大范围设备使用的最小类库集合,在配置中同时包含Java 虚拟机。简表是针对一系列设备提供的开发包集合。在J2ME 中还有一个重要的概念是可选包(Optional Package),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME 中制定
3、了JSR82(Bluetooth API)提供了对蓝牙的支持。 目前,J2ME 中有两个最主要的配置,分别是Connected Limited Devices Configuration(CLDC)和Connected Devices Configuration(CDC)。他们是根据设备的硬件性能进行区分的,例如处理器、内存容量等。由于这个标准是在2001 年的时候指定的,而现在移动终端的处理能力和内存容量发展很快,如果还按照这个标准来评判可能就不准确了。J2ME 平台体系结构J2ME 平台体系结构平台体系结构 在MIDP中定义了一种新的应用程序模型MIDlet 。MIDlet 可以和应用管理
4、软件通信通知应用软件管理自己状态的变化。 MIDlet 有三个状态,分别是pause、active 和destroyed。在启动一个MIDlet 的时候,应用管理软件会首先创建一个MIDlet 实例并使得他处于pause 状态,当startApp()方法被调用的时候MIDlet 进入active 状态,也就是所说的运行状态。在active 状态调用destroyApp(boolean unconditional)或者pauseApp()方法可以使得MIDlet 进入destroyed 或者pause 状态。MIDlet 应用程序的生命周期MIDlet 应用程序的生命周期应用程序的生命周期 J2
5、ME 的核心部分有限连接设备配置,即Connected Limited Device Configuration(CLDC)。 CLDC 提供了一套标准的、面对小型设备的Java 应用开发平台。设备的配置configuration 是指针对某一类设备的最小的Java 平台。其中包括满足该类设备的虚拟机运行的最小子集和针对该类设备的核心类库的最小子集。有限连接设备配置就是为有限连接设备定义了一个基本的J2ME 运行环境。CLDC簡介簡介CLDC 包含的功能在CLDC1.0 版本中定义了以下功能:1)Java 核心语言与Java 虚拟机的特性2)核心Java 类库3)输入/输出4)对网络的支持5)
6、对安全性的支持6)对国际化的支持CLDC 不包含的功能1)对应用程序生命周期的管理2)用户界面3)事件处理4)高级应用程序模式(这里指用户与应用程序的交互)CLDC簡介簡介 CLDC 的类库可以分为两种:一种是从J2SE 标准类库中继承的;另一种是专门为CLDC 设计的(这部分类也可以被映射到J2SE 中)。 对于第一种CLDC 类库,包括了J2SE 的3 个最核心的包java.io,java.lang 和java.util。而且这3 个包和J2SE 相比,也只是J2SE 相应包的一个很小的子集。例如java.util 的类与接口由J2SE 中的53 个减少到10 个。对于后一种CLDC 类库
7、,只有描述标准连接框架的javax.microedition.io 包,和MIDP 中定义的包一起放于javax.microedition 包中。CLDC的類的類java.lang 包包含了Java 语言API 的核心部分继承下来的类,但是CLDC 只继承了J2SE 中一半的类,而且一些类中的接口并没有完全实现。CLDC 的java.util 包主要包括了集合类和时间、日期的相关的12 个类。其中的10 个类是从J2SE 中继承来的;Timer 和TimerTask 类是MIDP 增加的类。CLDC 的java.io 包是J2SE 的子集,只提供了相当有限的8 位输入/输出功能。CLDC的類的
8、類User Interface Package javax.microedition.lcdui The UI API provides a set of features for implementation of user interfaces for MIDP applications. javax.microedition.lcdui.game The Game API package provides a series of classes that enable the development of rich gaming content for wireless devices.
9、 Persistence Package javax.microedition.rms The Mobile Information Device Profile provides a mechanism for MIDlets to persistently store data and later retrieve it. Application Lifecycle Package javax.microedition.midlet The MIDlet package defines Mobile Information Device Profile applications and t
10、he interactions between the application and the environment in which the application runs.CLDC的類的類 Networking Package javax.microedition.io MID Profile includes networking support based on the Generic Connection framework from the Connected, Limited Device Configuration. Audio Package javax.microedi
11、tion.media The MIDP 2.0 Media API is a directly compatible building block of the Mobile Media API (JSR-135) specification. javax.microedition.media.control This package defines the specific Control types that can be used with a Player . Public Key Package javax.microedition.pki Certificates are used
12、 to authenticate information for secure Connections.CLDC的類的類流程流程工具工具輸入輸入輸出輸出编译javac.exe 编译源文件(*.java)未混淆的类文件(*.class)混淆第三方提供的工具未混淆的类文件(*.class)混淆后的类文件(*.class)预审preverify.exe 预审核混淆后的类文件(*.class)经过预先审核的类文件(*.class)包jar.exe 打包经过预先审核的类文件(*.class)包文件(*.jar)编写描述文件文本编辑工具描述文件(*.jad)安装运行传输工具(IR/BT/数据线/OTA)包
13、文件(*.jar)和描述文件(*.jad)在仿真器或手机上正式运行MIDP 手机程序开发流程手机程序开发流程编译编译 编译就是将我们所编制的*.java 文件,编译成为二进制的*.class 文件混淆(可选)混淆(可选) 由于class 文件格式透明,java 文件很容易被反汇编。因此,如果不希望别人掌握源代码,要进行混淆(obfuscate)预审核预审核 在完成编译后,我们必须要对*.class 文件进行预审核,因为class 在传输过程中容易损坏或是被篡改,传统的Java 程序在运行前,都在本地机器上对.class 进行Byte Code 的审核。打包与编写描述文件打包与编写描述文件 MIDP 可执行文件后缀名为jar。利用jar file.class 就能将通过预审核的*.class 文件,打包成MIDP 认可的可执行文件。在仿真器或手机上安装运行在仿真器或手机上安装运行MIDP 手机程序开发流程手机程序开发流程整个整个LCDUI 包的体系包的体系 Screen 类属于高级图形用户界面组件, Canvas 是低级图形用户界面组件,在同一时刻,只能有唯一一个Screen 或者Canvas 类的子类显示在屏幕上,我们可以调用Display 的setCurrent()的方法来将前一个画面替换掉,我们必须自行将前一个画面的状态保留起来,并自己控制整个程序画面的切换。