J2ME 编程/J2ME 平台
Java 2 Platform, Micro Edition 或 J2ME 是针对嵌入式消费产品的 Java API 集合,例如 PDA、手机 和其他消费类电器。
J2ME 已经成为创建手机游戏的热门选择,因为它们可以在开发阶段在 PC 上模拟,并轻松上传到手机。这与为其他特殊游戏平台(例如由 任天堂、索尼 等制造的游戏平台)开发、测试和加载游戏相比,难度要小得多,因为需要昂贵的系统特定硬件和工具包。
通常,J2ME 的介绍会忽略初学者可能改进学习过程的领域,希望这组文章能够消除障碍。我们将涵盖 J2ME 诞生前后的历史。我们还将介绍整个 J2ME API 生态系统的复杂性,希望这将有助于您在 J2ME 开发项目和应用程序中。
总的来说,设备和服务这些设备的基础设施,从模拟到数字的转变,是 J2ME 发展的第三个看不见的角色。从模拟的蜂窝通信方法到诸如 CDMA、TDMA 和 WCDMA 等标准的转变。此外,车辆计算和数字电视领域的重大变化涉及诸如 DVB、MHP、HAVi、MPEG4、OSGi 等新标准,改变了 Java 等计算机语言以及 J2ME 平台与该新领域之间的交互方式。
这段历史被称为平台前,发生在 1999 年 Sun 将 Java 部分重命名为平台版本之前。在 1992 年期间,Sun Microsystems 工程师和风险投资支持的初创公司共同参与了一个名为 Green 的项目("Green". Green 项目简史.)将新的虚拟机执行框架引入嵌入式设备。该设备称为 Star7,由 SPARC CPU 驱动。
当时被称为 OAK 的语言及其功能是 FirstPerson、ON 和 Sun Microsystems 合并的结果。尽管在这段简要的历史中没有提及("Java 5th Birthday". JAVA 技术:早期.)。第一个 JVM 实际上是由 ON 完成的,并且根据 Java 语言历史的官方维基百科版本,它是基于 Smalltalk 的("Java History". Java 语言历史的官方维基百科版本.)。因此,拥有一个虚拟机的较小占用空间不仅有利于 Java 的诞生,而且在这一时期使其稳定地进入浏览器,并开始了其向移动设备的重生。
尽管 Sun Microsystems 认为,它在这一时期的部分作用是将消费设备市场从 WINTEL 推向 SPARC 处理器,但正是应用程序杀手级应用方面在这一风险启动期得以生存。
Sun 对 Java 在移动设备上的第二次探索集中在将 JDK1.1.8 的子集部署到具有更深入显示功能的移动设备上("JDK1.1.8". Java 开发工具包 1.1.8_10.)。在 1998 年左右,PersonalJava 的目标设备之一是机顶盒,正如 McNealy 吹嘘 Java 在机顶盒上的新闻所证明的那样("McNealy". McNealy 吹嘘 Java 无处不在,TCI 协议.)。
当 PersonalJava 规范("PersonalJava spec". PersonalJava API 规范.)在 1998 年推出时,Sun Microsystems 给它起了个绰号 pJava。由于 pJava 使用了 JDK1.1.8 的子集,SUN Microsystems 发布了 pJava 模拟环境("pJava Emulation Environment". PersonalJava 模拟环境.)来帮助开发人员测试其小程序和应用程序的 pJava 兼容性。
EmbeddedJava ("EmbeddedJava". EmbeddedJava Application Environment.) 基于 JDK1.1.6 ("JDK1.1.6". JDK1.1.6 Download.),并针对那些只有字符显示的移动设备。
JavaPhone
[edit | edit source]移动设备 OEM 发现 PersonalJava 和 EmbeddedJava 解决方案缺乏那些允许访问移动设备上纯电话功能的 API。因此,JavaPhone API ("JavaPhone". JavaPhone API.) 是由 Sun Microsystems 设计的,它是 PersonalJava 的垂直扩展,旨在为移动设备上部署的 Java 解决方案添加电话功能。
JavaTV
[edit | edit source]JavaTV ("JavaTV". Java TV API.) 旨在为机顶盒和无头网络终端提供 Java API,这些 API 超出了 PersonalJava 提供的功能,这些功能特定于 iTV/DTV 平台,例如 HAVi、DVB-MHP 等。
AutoJava
[edit | edit source]AutoJava 也是 1998 年 Sun Microsystems 进入车联网 (Auto) 的尝试,但没有足够的吸引力,无法作为一个独立的 API 生存下来。
JavaOS
[edit | edit source]JavaOS ("JavaOS". JavaOS: A StandAlone Java Environment.) 针对通常部署在移动设备或嵌入式设备上的 OS 的底层实时操作系统 (RTOS) 结构。JavaOS 由 SUN Microsystems 于 1996 年秋季推出,基于 JDK1.0。ChorusOS 在 JavaOS 开发期间被 SUN Microsystems 收购,后来被剥离为 ChorusOS ("ChorusOS OpenSource". ChorusOS Open Source.).
J2ME 的诞生
[edit | edit source]正如你可以从这份新闻快讯中看到 ("SUN NewsFlash". SUN ANNOUNCES KEY CONSUMER TECHNOLOGY TO BRING THE POWER OF THE JAVA PLATFORM TO AUTO, TV AND PHONE MARKETS.),1998 年春季,移动设备市场正被 Java 席卷,但方式并不规范。正如你可以从对 KVM 之父的采访中看到 ("Interview of the Father of the KVM". J2ME Luminary Antero Taivalsaari.),Sun 在幕后通过为移动设备创新新的 JVM 和第一套 J2ME 平台规范来应对移动设备领域的碎片化,该项目最初被称为 Spotless。
J2ME 活跃了
[edit | edit source]在 1998 年到 1999 年期间,SUN Microsystems 公布了 Java Community Process 的成立,并重组了这些针对移动设备的 Java API 的碎片,形成了 J2ME,微型版平台,从而战胜了移动设备领域的碎片化。现在让我们来看看 J2ME 是如何针对移动设备领域的 API 碎片化进行组织的。
J2ME 配置
[edit | edit source]Sun Microsystems 提出了一种想法,即配置 API 将涵盖部署在设备上的 J2ME 的运行时方面。最小的 J2ME 配置实际上是最大的 J2ME 配置的子集。运行时方面通过在配置 API 中包含这些特定的类来涵盖
- 核心 Java 类
- Java 编程语言功能
- 虚拟机功能
目前,有 CLDC (Connected Limited Device Configuration,连接受限设备配置) 和 CDC (Connected Device Configuration,连接设备配置) 两种配置。
连接受限设备配置
[edit | edit source]The CLDC 涵盖 JVM 环境内存小于 512k 的设备,并删除了 JNI、用户定义的类加载器、类验证过程中的某些类验证项 (这就是为什么我们需要对 MIDlet 进行预验证,以便将它们编译后部署在 CLDC 设备上) 和反射,以适应这种小占用空间。CLDC 设备上的 JVM 被称为 KVM (K-VirtualMachine),昵称 K-VirtualMachine 指的是千字节。javaTV 的应用程序生命周期概念和 javaPhone 的安装概念被纳入到这种连接受限设备配置中。CLDC 的 JSR 是
- "CLDC1.0". Connected Limited Device Configuration 1.0 JSR30. 此连接受限设备配置 1.0 面向内存为 128k 到 512k (256kROM/256RAM 或更少) 的设备,这些设备具有有限的电源或电池操作,低速连接到某些网络,以及用户界面。
- "CLDC1.1". Connected Limited Device Configuration 1.1 JSR139. 此连接受限设备配置 1.1 面向内存为 160K 或更大的设备,处理器速度为 8-32MHZ,具有有限的电源或电池操作,以及用户界面。此配置扩展了 CLDC1.0,以包含浮点数学。
连接设备配置 (CDC) 涵盖了为 JVM 环境提供至少 512K 内存的设备。垃圾回收器是部署在 CDC 设备上的 CVM 中一个可插拔的独立项。线程的实现不是特定于操作系统的,而是完全在 CVM 中实现的线程,被称为“绿色线程”。线程也可以实现为操作系统本地线程。类文件验证在设备上的 CVM 中进行,就像在桌面系统上的 J2SE Java 平台一样。CDC 设备上的 JVM 被称为 CVM 或 C-虚拟机。CDC 的 JSR 包括
- "连接设备配置 1.0". 连接设备配置 1.0 JSR36. 3 月 17 日.
{{cite web}}
: 请检查日期值:|date=
和|year=
/|date=
不匹配 (帮助) 该连接设备配置 1.0 针对具有至少 512K ROM/128K RAM 的设备,可连接到某些网络,支持完整安装的完整 JVM,并提供与 CLDC 相比功能更全面的用户界面。 - "连接设备配置 1.1". 连接设备配置 1.1 JSR218. 3 月 17 日.
{{cite web}}
: 请检查日期值:|date=
和|year=
/|date=
不匹配 (帮助) 该连接设备配置 1.1 扩展/更新了 CDC1.0,以将 CDC1.0 中使用的 J2SE API 更新到 J2SE 1.4 API。内存大小从 128K ROM 增加到 256K ROM。
配置文件提供专注于特定设备组的 API。这些设备通常具有相同或类似的用户界面(屏幕和输入)、设备连接到网络的方式、设备存储数据的方式等。目前,配置文件名称表示此设备组的系列名称或此设备组的通用功能。例如,MIDP(MID 配置文件)适用于移动信息设备组。J2ME 配置文件包括
移动信息设备配置文件扩展和增强了 CLDC,为在移动信息设备和语音通信设备上开发应用程序提供 Java 环境。此配置文件的 JSR 包括
- "MIDP1.0". 移动信息设备配置文件 1.0 JSR37. 该移动信息设备配置文件 1.0 以纵向方式扩展了 CLDC1.0 Java 环境,通过提供 GUI 工具包、持久数据存储、消息传递、网络组件和安全性,支持在 CLDC1.0 规范中面向的设备上进行 MIDlet 应用程序开发。虽然规范中提到了 JavaPhone 和 Java Telephony 的属性;JavaPhone 电话属性未作为 MIDP1.0 中的类包含,而是后来作为单独的 JSR 和 API 包完成。
- "MIDP2.0". 移动信息设备配置文件 2.0 JSR118. 该移动信息设备配置文件 2.0 扩展了 MIDP1.0,以包括 HTTPS 网络、具有数字证书的域安全模型、正式包含 OTA 配置、MIDlet 的事件响应推送架构、添加到 LCDUI 的游戏功能、小型 XML 解析器以及基本声音 API。
- "MIDP3.0". 移动信息设备配置文件 3.0 JSR271. 该移动信息设备配置文件 3.0 扩展了 MIDP2.0,允许 MIDlet 自动启动,在同一个 VM 中的后台运行,并支持 MIDlet 间通信。扩展的功能包括安全记录存储/可移动记录存储、IPv6、每个设备的多个网络接口,以及除了 OTA 之外的其他 MIDlet 配置。
基础配置文件可以称为纵向规范配置文件。纵向规范配置文件通过内存大小指定目标设备系列,以及除此配置文件之外可能插入更多功能的可选配置文件。GUI API 通常是插入在此配置文件之上的配置文件。典型的富网络设备包括机顶盒 (iTV)、汽车计算 (远程信息处理) 等。此配置文件的 JSR 包括
- "基础配置文件 1.0". 基础配置文件 1.0 JSR46. 该基础配置文件 1.0 针对具有至少 128K ROM/512K RAM 的设备,可连接到某些网络,并且在 CDC1.0 之上没有提供由此配置文件提供的图形用户界面。
- "基础配置文件 1.1". 基础配置文件 1.1 JSR219. 该基础配置文件 1.1 建立在 CDC1.1 之上,支持 J2SE 1.4 API。目标设备的内存增加到至少 256K ROM/512K RAM。包含了一些 API 以指定 IPv6、安全性以及更多数学支持的功能。
该个人配置文件为具有丰富网络连接的设备提供高网页保真度,可以使用作为 PersonalJava 规范一部分的重量级 applet 类。虽然个人配置文件 JSR62 支持 PersonalJava 应用程序环境的 PersonalJava1.1.x 和 PersonalJava1.2.x;个人配置文件 1.1 支持采用 J2SE1.4 API 的子集,因为个人配置文件 1.0 基于 J2SE1.3 API 的子集。此配置文件的 JSR 包括
- "个人配置文件 1.0". 个人配置文件 1.0 JSR62. 该个人配置文件 1.0 针对具有至少 1.5 兆 ROM/1 兆 RAM 的设备,以及建立在 CDC1.0 和基础配置文件 1.0 之上的可靠网络连接,并允许使用 pJava 模拟环境规范 1.1.x 和 1.1.2 开发的应用程序在此配置文件面向的设备上运行。
- "个人配置文件 1.1". 个人配置文件 1.1 JSR216. 该个人配置文件 1.1 扩展了个人配置文件 1.0,以将 API 更新到 J2SE 1.4,并确保从 J2SE 1.4 API 派生的可选图形包可以部署在此配置文件之上。现在,目标设备的最小内存大小为 3.5 兆 ROM/3.5 RAM。
该个人基础配置文件在 CDC 和基础配置文件之上提供基本图形用户界面,即 AWT 轻量级 API,并被认为是个人配置文件的子集。此配置文件还提供 JavaTV 所需的 xlet 类。此配置文件的 JSR 包括
- "Personal Basis Profile 1.0". Personal Basis Profile 1.0 JSR129. 该 Personal Basis Profile 1.0 部署在 CDC1.0 和 Foundation Profile 1.0 之上,面向 ROM 最小 2MB/RAM 最小 1MB 的设备。轻量级 AWT API 基于 JDK1.1 而不是 JDK1.3 API,以满足较小的占用空间要求。
- "Personal Basis Profile 1.1". Personal Basis Profile 1.1 JSR217. 此 Personal Basis Profile 1.1 通过将所有 API 更新为源自 J2SE 1.4 API 来扩展 Personal Basis Profile 1.0,从而与可选图形 API(如 AGUI)兼容。
信息模块配置文件
[edit | edit source]此信息模块配置文件支持没有图形用户界面的嵌入式网络连接设备。此配置文件是 MIDP1.0 配置文件的子集,不包含 MIDP1.0 的 LCDUI 类。典型目标设备包括调制解调器、家用设备和工业计量设备。虽然 IMP 是 MIDP1.0 的子集,但 IMP-NG 是 MIDP2.0 的子集。此配置文件的 JSR 为
- "IMP". Information Module Profile JSR195. 此信息模块配置文件是 MIDP1.0 的子集,缺少 LCDUI 类。
- "IMP-NG". Information Module Profile-Next Generation JSR228. 此信息模块配置文件 - 下一代是 mIDP2.0 的子集,不包含 LCDUI 类。
数字机顶盒配置文件
[edit | edit source]此数字机顶盒配置文件是 JavaTV 的子集,面向部署 OCAP 的较小机顶盒。因此,此配置文件不同于 javaTV(CDC、PP PBP)设置,因为它位于 CLDC 而不是 CDC 之上,以支持更小的设备内存占用空间。但是,Personal Basis Profile 中的一些概念(如 xlet 生命周期)是从 JavaTV 项目中借鉴的。此配置文件的 JSR 为
- "Digital Set Top Box Profile". Digital Set Top Box Profile JSR242. 此数字机顶盒配置文件是 Personal Java 和 JavaTV 的子集,基于 OCAP 中当前的 java 类。使用此配置文件开发的 Xlet 与 JavaTV(CDC、PP 和 PBP)组合向上兼容。
J2ME 可选包和 API
[edit | edit source]在 1999 年到 2001 年期间,引入了 J2ME 可选包和 API 的概念,以便在 J2ME 配置文件之上提供额外的包和 API,为某些类别的设备添加特定功能。一些配置文件 JSR 被更改为这种新的可选包概念
- "RMI". RMI Optional Package JSR66. RMI 可选包在 CDC 和 Foundation Profile 之上提供可互操作的 J2SE RMI 支持。
- "PDA". PDA Optional Package JSR75. PDA 可选包位于 CLDC 之上,并提供 PDA 和手机通用的可选 API。例如,JavaPhone 中的 PIM 功能在此可选包中重新引入到 J2ME 平台设备中。添加了 FileConnection API,以允许 GCF 访问可移动媒体存储。
面向无线行业的 J2ME 技术
[edit | edit source]由于 J2ME 的复杂性不断增加,JTWI 在 2002 年被提出。面向无线行业的 J2ME 技术,也称为"JTWI1.0". JSR185.,为哪些可选包和 API 与哪些配置文件匹配设定了一个明确的架构概念。此概念涵盖了 CLDC1.0、CLDC1.1、CDC1.0 和 MIDP2.0 系列设备。可选包和 API 为
- "Wireless Messaging API". Wireless Messaging API JSR120. 无线消息 API 提供类来支持在 J2ME 平台上开发消息应用程序。
- "Mobile Media API". Mobile Media API JSR135. 移动媒体 API 支持 J2ME 平台的 CLDC 和 CDC 上的音频和多媒体。
JTWI2.0 的第二个版本沿着 CLDC 和 CDC 配置线被拆分为"JSR248". JTWI2.0 Mobile Service Architecture for CLDC. 和"JSR249". JTWI2.0 Mobile Service Architecture for CDC.
结论
[edit | edit source]虽然,其他特定于操作系统的解决方案(如 将 C/C++ 扩展到移动平台)获得了第一波采用;但以 javaPhone、javaTV、嵌入式 Java、PersonalJava 的形式进行的初步工作,以及 J2ME 平台的建立,为 J2ME 的成功推动奠定了基础,并使其稳步攀升,成为移动设备上的市场领导者。虽然并非所有 JavaPhone 功能都已完全集成到 MIDP 设备中;但此其他 API 将 JavaPhone 的其余部分带入 J2ME 平台
- "Mobile Telephony API (MTA)". Mobile Telephony (MTA) JSR253. 移动电话 API 提供类来控制 CLDC 和 CDC 设备上的呼叫。
随着我们进入移动设备的未来,J2ME 平台的 Java 社区流程贡献者一直在努力创建新的 JSR 来涵盖移动技术的最新进展。例如
- "Unified Message Box Access API (UMBA-API)". Unified Message Box Access API JSR266. 指定了用于管理移动设备上的消息框及其内容的 API。
- "非接触式通信API". 非接触式通信API JSR257. 指定了用于非接触式通信(如通过RFID标签等)的API。
- "Green". Green 项目简史. (http://today.java.net/jag/old/green/)
- "Java 5 周年生日". JAVA 技术:早期. (http://java.sun.com/features/1998/05/birthday.html)
- "Java 历史". Java 语言历史的官方维基版本. (http://c2.com/cgi/wiki?JavaHistory)
- "JDK1.1.8". Java 开发工具包 1.1.8_10. (http://java.sun.com/products/archive/jdk/1.1.8_010/index.html)
- "McNealy". McNealy 推出“Java 无处不在”,TCI 交易. (http://www.infoworld.com/cgi-bin/displayStory.pl?980112.emcnealy.htm)
- "PersonalJava 规范". PersonalJava API 规范. (http://java.sun.com/products/personaljava/spec-1-1/pJavaSpec.html)
- "pJava 模拟环境". PersonalJava 模拟环境. (http://java.sun.com/products/personaljava/pj-emulation.html)
- "EmbeddedJava". EmbeddedJava 应用程序环境. (http://java.sun.com/products/embeddedjava/)
- "JDK1.1.6". JDK1.1.6 下载. (http://java.sun.com/products/archive/jdk/1.1.6_009/)
- "JavaPhone". JavaPhone API. (http://java.sun.com/products/javaphone/index.jsp)
- "JavaTV". Java TV API. (http://java.sun.com/products/javatv/)
- "JavaOS". JavaOS:独立 Java 环境. (http://java.sun.com/products/javatv/)
- "ChorusOS 开源". ChorusOS 开源. (http://www.experimentalstuff.com/Technologies/ChorusOS/)
- "SUN 新闻快报". SUN 宣布将 Java 平台的力量带到汽车、电视和手机市场的关键消费者技术. (http://www.sun.com/smi/Press/sunflash/1998-03/sunflash.980324.14.html)
- "KVM 之父的访谈". J2ME 杰出人物 Antero Taivalsaari. (http://developers.sun.com/techtopics/mobility/midp/luminaries/taivalsaari/)
- "CLDC1.0". 连接受限设备配置 1.0 JSR30. (http://www.jcp.org/en/jsr/detail?id=30)
- "CLDC1.1". 连接受限设备配置 1.1 JSR139. (http://www.jcp.org/en/jsr/detail?id=139)
- "连接设备配置 1.0". 连接设备配置 1.0 JSR36. (http://www.jcp.org/en/jsr/detail?id=36)
- "连接设备配置 1.1". 连接设备配置 1.1 JSR218. (http://www.jcp.org/en/jsr/detail?id=218)
- "MIDP1.0". 移动信息设备描述文件 1.0 JSR37. (http://www.jcp.org/en/jsr/detail?id=37)
- "MIDP2.0". 移动信息设备描述文件 2.0 JSR118. (http://www.jcp.org/en/jsr/detail?id=118)
- "MIDP3.0". 移动信息设备描述文件 3.0 JSR271. (http://www.jcp.org/en/jsr/detail?id=242)
- "基础描述文件 1.0". 基础描述文件 1.0 JSR46. (http://www.jcp.org/en/jsr/detail?id=46)
- "基础描述文件 1.1". 基础描述文件 1.1 JSR219. (http://www.jcp.org/en/jsr/detail?id=219)
- "个人概要 1.1". 个人概要 1.1 JSR216. (http://www.jcp.org/en/jsr/detail?id=216)
- "个人基础概要 1.0". 个人基础概要 1.0 JSR129. (http://www.jcp.org/en/jsr/detail?id=129)
- "个人基础概要 1.1". 个人基础概要 1.1 JSR217. (http://www.jcp.org/en/jsr/detail?id=217)
- "IMP". 信息模块概要 JSR195. (http://www.jcp.org/en/jsr/detail?id=195)
- "IMP-NG". 信息模块概要-下一代 JSR228. (http://www.jcp.org/en/jsr/detail?id=228)
- "数字机顶盒概要". 数字机顶盒概要 JSR242. (http://www.jcp.org/en/jsr/detail?id=242)
- "RMI". RMI 可选包 JSR66. (http://www.jcp.org/en/jsr/detail?id=66)
- "PDA". PDA 可选包 JSR75. (http://www.jcp.org/en/jsr/detail?id=75)
- "JTWI1.0". JSR185. (http://www.jcp.org/en/jsr/detail?id=185)
- "无线消息API". 无线消息API JSR120. (http://www.jcp.org/en/jsr/detail?id=120)
- "移动媒体API". 移动媒体API JSR135. (http://www.jcp.org/en/jsr/detail?id=135)
- "JSR248". JTWI2.0 移动服务架构,适用于CLDC. (http://www.jcp.org/en/jsr/detail?id=248)
- "JSR249". JTWI2.0 移动服务架构,适用于CDC. (http://www.jcp.org/en/jsr/detail?id=249)
- "移动电话API(MTA)". 移动电话(MTA) JSR253. (http://www.jcp.org/en/jsr/detail?id=253)
- "统一消息盒访问API(UMBA-API)". 统一消息盒访问API JSR266. (http://www.jcp.org/en/jsr/detail?id=266)
- "非接触式通信API". 非接触式通信API JSR257. (http://www.jcp.org/en/jsr/detail?id=257)
商标声明
[edit | edit source]J2ME、Java 和所有基于 Java 的标识是 Sun Microsystems, Inc. 在美国和其他国家/地区的商标或注册商标。