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. 在美國和其他國家/地區的商標或註冊商標。