J2ME 编程/J2ME 平台
Java 2 Platform, Micro Edition,或 J2ME,是一套针对嵌入式消费类产品(例如 PDA、手机 和其他消费类电器)的 Java API 集合。
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 完成的,并基于 Smalltalk,根据 Java 语言历史的官方维基版本("Java History". Java 语言历史的官方维基版本.)。因此,拥有小型虚拟机不仅有利于 Java 的诞生,而且在其在此期间逐步进入浏览器并开始重生为移动设备的过程中,也发挥了重要作用。
尽管 Sun Microsystems 得出结论,认为其在此期间的部分作用是推动消费类设备市场从 WINTEL 转向 SPARC 处理器,但正是杀手级应用方面在这一风险启动阶段存活了下来。
Sun 对移动设备上 Java 的第二次探索围绕着在移动设备上部署 JDK1.1.8 的子集("JDK1.1.8". Java Development Kit 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 应用程序环境.) 基于 JDK1.1.6("JDK1.1.6". JDK1.1.6 下载.),并面向那些仅具有字符显示的移动设备。
移动设备 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.) 针对的是操作系统底层的实时操作系统(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(连接有限设备配置)和 CDC(连接设备配置)两种配置。
连接有限设备配置
[edit | edit source]The CLDC 涵盖 JVM 环境内存大小低于 512k 的设备,并移除了 JNI、用户定义的类加载器、类验证过程中的某些类验证项目(这就是为什么我们需要对要部署在 CLDC 设备上的 MIDlet 进行预验证的原因)和反射,以适应这种较小的内存占用。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,其中包含浮点数学。
连接设备配置
[edit | edit source]The CDC 涵盖 JVM 环境内存大小超过 512k 的设备。垃圾收集器是部署在 CDC 设备上的 CVM 中的可插拔独立项目。线程不是作为 OS 特定的,而是作为 CVM 中的完整实现的线程实现的,被称为绿色线程。线程也可以实现为 OS 本地线程。类文件验证在设备上的 CVM 中进行,就像在桌面系统上的 J2SE Java 平台中一样。CDC 设备上的 JVM 被称为 CVM 或 C-VirtualMachine。CDC 的 JSR 为
- "Connected Device Configuration 1.0". Connected Device Configuration 1.0 JSR36. March 17.
{{cite web}}
: Check date values in:|date=
and|year=
/|date=
mismatch (help) 此连接设备配置 1.0 面向具有 512k 最低 ROM/128k 最低 RAM、连接到某些网络、支持完整 JVM 安装以及与 CLDC 相比功能更全面的用户界面的设备。 - "Connected Device Configuration 1.1". Connected Device Configuration 1.1 JSR218. March 17.
{{cite web}}
: Check date values in:|date=
and|year=
/|date=
mismatch (help) 此连接设备配置 1.1 扩展/更新了 CDC1.0,将 CDC1.0 中使用的 J2SE API 更新到 J2SE 1.4 API。内存大小从 128k ROM 增加到 256k ROM。
J2ME 配置文件
[edit | edit source]配置文件提供针对特定设备组的 API。这些设备通常具有相同或类似的用户界面(屏幕和输入)、设备连接到网络的方式、设备存储数据的方式等。目前,配置文件名称表示此设备组的系列名称或此设备组的常见功能。例如,MIDP(MID 配置文件)用于移动信息设备组。J2ME 配置文件为
移动信息设备配置文件扩展和增强了 CLDC,为在移动信息设备和语音通信设备上开发应用程序提供了一个 Java 环境。该配置文件的 JSR 为
- "MIDP1.0". 移动信息设备配置文件 1.0 JSR37. 该移动信息设备配置文件 1.0 以垂直方式扩展了 CLDC1.0 java 环境,通过提供 GUI 工具包、持久数据存储、消息传递、网络组件和安全性,支持针对 CLDC1.0 规范的目标设备上的 MIDlet 应用程序开发。虽然规范中提到了 JavaPhone 和 Java 电话的功能,但 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 为
- "个人基础配置文件 1.0". 个人基础配置文件 1.0 JSR129. 该个人基础配置文件 1.0 部署在 CDC1.0 和基础配置文件 1.0 之上,针对具有 2 兆最小 ROM/1 兆最小 RAM 的设备。轻量级 AWT API 基于 JDK1.1 而不是 JDK1.3 API,以满足更小的占用空间要求。
- "个人基础配置文件 1.1". 个人基础配置文件 1.1 JSR217. 该个人基础配置文件 1.1 扩展了个人基础配置文件 1.0,通过将所有 API 更新到源自 J2SE 1.4 的 API 来与 AGUI 等可选图形 API 兼容。
该信息模块配置文件支持没有图形用户界面的嵌入式网络连接设备。该配置文件是 MIDP1.0 配置文件的子集,没有 MIDP1.0 的 LCDUI 类。典型的目标设备是调制解调器、家用设备和工业计量设备。虽然 IMP 是 MIDP1.0 的子集,但 IMP-NG 是 MIDP2.0 的子集。该配置文件的 JSR 为
- "IMP". 信息模块配置文件 JSR195. 该信息模块配置文件是 MIDP1.0 的子集,缺少 LCDUI 类。
- "IMP-NG". 信息模块配置文件 - 下一代 JSR228. 该信息模块配置文件 - 下一代是 mIDP2.0 的子集,没有 LCDUI 类。
该数字机顶盒配置文件是 JavaTV 的子集,针对部署 OCAP 的较小机顶盒。因此,该配置文件与 javaTV(CDC、PP PBP)设置不同,因为它位于 CLDC 之上而不是 CDC 之上,以支持更小的设备内存占用空间。但是,个人基础配置文件中借鉴了一些 JavaTV 概念,例如 xlet 生命周期。该配置文件的 JSR 为
- "数字机顶盒配置文件". 数字机顶盒配置文件 JSR242. 该数字机顶盒配置文件是个人 Java 和 JavaTV 的子集,基于 OCAP 中的当前 java 类。使用该配置文件开发的 Xlet 向上兼容 JavaTV(CDC、PP 和 PBP)组合。
在 1999 年到 2001 年期间,J2ME 可选包和 API 的概念被引入,以在 J2ME 配置文件的基础上提供额外的包和 API,为特定设备类别添加特定功能。一些配置文件 JSR 被更改为这种新的可选包概念。
- "RMI". RMI 可选包 JSR66. RMI 可选包在 CDC 和基础配置文件的基础上提供了可互操作的 J2SE RMI 支持。
- "PDA". PDA 可选包 JSR75. PDA 可选包基于 CLDC,并提供 PDA 和手机通用的可选 API。例如,JavaPhone 中的 PIM 功能在这个可选包中重新引入到 J2ME 平台设备中。添加了 FileConnection API 以允许 GCF 访问可移动媒体存储。
由于 J2ME 的复杂性不断增加,JTWI 于 2002 年被提出。无线行业中的 J2ME 技术,也称为"JTWI1.0". JSR185.,明确定义了可选包和 API 与哪些配置文件匹配的架构概念。该概念涵盖了 CLDC1.0、CLDC1.1、CDC1.0 和 MIDP2.0 系列设备。可选包和 API 是
- "无线消息 API". 无线消息 API JSR120. 无线消息 API 提供了支持在 J2ME 平台上开发消息应用程序的类。
- "移动媒体 API". 移动媒体 API JSR135. 移动媒体 API 在 J2ME 平台的 CLDC 和 CDC 上都支持音频和多媒体。
JTWI2.0 的第二个版本沿 CLDC 和 CDC 配置线被拆分为"JSR248". JTWI2.0 用于 CLDC 的移动服务架构. 和"JSR249". JTWI2.0 用于 CDC 的移动服务架构.
虽然,其他操作系统特定解决方案,例如将 C/C++ 扩展到移动平台获得了首次大规模采用;但在 javaPhone、javaTV、embeddedJava、PersonalJava 的形式,以及 J2ME 平台的建立,为 J2ME 的成功推动以及其稳步攀升成为移动设备市场领导者奠定了基础。虽然,并非所有 JavaPhone 功能都已完全出现在 MIDP 设备中;但此 API 将其余的 JavaPhone 带到了 J2ME 平台。
- "移动电话 API (MTA)". 移动电话 (MTA) JSR253. 移动电话 API 提供了控制 CLDC 和 CDC 设备上的通话的类。
随着我们走向移动设备的未来,J2ME 平台的 Java 社区流程贡献者一直在忙于创建新的 JSR 来涵盖移动技术的最新进展。例如
- "统一消息框访问 API (UMBA-API)". 统一消息框访问 API JSR266. 指定了管理移动设备上的消息框及其内容的 API。
- "非接触式通信 API". 非接触式通信 API JSR257. 指定了非接触式通信的 API,例如通过 RFID 标签等。
- "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: A StandAlone Java Environment. (http://java.sun.com/products/javatv/)
- "ChorusOS OpenSource". ChorusOS Open Source. (http://www.experimentalstuff.com/Technologies/ChorusOS/)
- "SUN NewsFlash". SUN ANNOUNCES KEY CONSUMER TECHNOLOGY TO BRING THE POWER OF THE JAVA PLATFORM TO AUTO, TV AND PHONE MARKETS. (http://www.sun.com/smi/Press/sunflash/1998-03/sunflash.980324.14.html)
- "Interview of the Father of the KVM". J2ME Luminary Antero Taivalsaari. (http://developers.sun.com/techtopics/mobility/midp/luminaries/taivalsaari/)
- "CLDC1.0". Connected Limited Device Configuration 1.0 JSR30. (http://www.jcp.org/en/jsr/detail?id=30)
- "CLDC1.1". Connected Limited Device Configuration 1.1 JSR139. (http://www.jcp.org/en/jsr/detail?id=139)
- "Connected Device Configuration 1.0". Connected Device Configuration 1.0 JSR36. (http://www.jcp.org/en/jsr/detail?id=36)
- "Connected Device Configuration 1.1". Connected Device Configuration 1.1 JSR218. (http://www.jcp.org/en/jsr/detail?id=218)
- "MIDP1.0". Mobile Information Device Profile 1.0 JSR37. (http://www.jcp.org/en/jsr/detail?id=37)
- "MIDP2.0". Mobile Information Device Profile 2.0 JSR118. (http://www.jcp.org/en/jsr/detail?id=118)
- "MIDP3.0". Mobile Information Device Profile 3.0 JSR271. (http://www.jcp.org/en/jsr/detail?id=242)
- "Foundation Profile 1.0". Foundation Profile 1.0 JSR46. (http://www.jcp.org/en/jsr/detail?id=46)
- "Foundation Profile 1.1". Foundation Profile 1.1 JSR219. (http://www.jcp.org/en/jsr/detail?id=219)
- "Personal Profile 1.0". Personal Profile 1.0 JSR62. (http://www.jcp.org/en/jsr/detail?id=62)
- "Personal Profile 1.1". Personal Profile 1.1 JSR216. (http://www.jcp.org/en/jsr/detail?id=216)
- "Personal Basis Profile 1.0". Personal Basis Profile 1.0 JSR129. (http://www.jcp.org/en/jsr/detail?id=129)
- "Personal Basis Profile 1.1". Personal Basis Profile 1.1 JSR217. (http://www.jcp.org/en/jsr/detail?id=217)
- "IMP". Information Module Profile JSR195. (http://www.jcp.org/en/jsr/detail?id=195)
- "IMP-NG". Information Module Profile-Next Generation JSR228. (http://www.jcp.org/en/jsr/detail?id=228)
- "Digital Set Top Box Profile". Digital Set Top Box Profile JSR242. (http://www.jcp.org/en/jsr/detail?id=242)
- "RMI". RMI Optional Package JSR66. (http://www.jcp.org/en/jsr/detail?id=66)
- "PDA". PDA Optional Package JSR75. (http://www.jcp.org/en/jsr/detail?id=75)
- "JTWI1.0". JSR185. (http://www.jcp.org/en/jsr/detail?id=185)
- "Wireless Messaging API". Wireless Messaging 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)
J2ME、Java 和所有基于 Java 的标记是 Sun Microsystems, Inc. 在美国和其他国家/地区的商标或注册商标。