J2ME基礎篇


在今天計算已經無處不在。越 來越多的人開始認爲,經過了許多人共用一臺計算機的大型主機時代,一人一臺計算機的個人PC時代之後,下一個時代就是一人多臺計算設備的普及計算時代 (Ubiquitous Computing,IBM稱之爲Pervasive Computing)。計算設備將從單一的PC擴展到各種各樣的大小和功能,從家庭消費電子產品,到個人隨身攜帶,穿着,車載的各種移動信息處理設備,多 樣化是這個領域的最大特點。

網絡是這個領域最重要的增值特性。當手機可以隨時隨地無線上網,PDA可以和個人PC同步,車載PC可以獲得網上GPS地圖數據時,這些孤立的設備才能夠發揮最大的作用。

而 平臺無關性和網絡功能正是Java的設計目標和能力(事實上,Java最初的設計目標就是用於消費電子領域,但是後來在PC和服務器上得到了發展)。"一 次編寫,到處運行"的平臺無關性,對網絡,多重設備間聯網的機制(JINI)顯然對這個領域是至關重要的軟件條件。這個領域內的Java標準就是 J2ME。

J2ME的由來

Java的最大目標和特點,就是"一次編寫,到處運行"的平臺無關性。但是,很自然的,正如Sun認識到的,"One size does'nt fit all",一套標準無法適應各種不同的需求。因此,Java技術目前共有三套,分別針對不同的平臺和應用。

  • Standard Edition(J2SE,標準版):針對桌面端PC和工作站的個人和低端商務應用。
  • Enterprise Edition(J2EE,企業版):針對服務器端企業級應用,支持Servlets, JSP和XML等等。
  • Micro Edition(J2ME,袖珍版,也有翻譯爲小型版或者移動版的。)針對有限內存,顯示和處理能力的設備,主要是消費電子和嵌入式設備領域(這實際正是Java語言設計最初的目標領域)。

圖1

在 消費電子和嵌入式設備領域,內存從幾百K到幾十M,從沒有屏幕到Web-TV,CPU從低功耗的嵌入式處理器到206MHz的RISC處理器,硬件條件的 差異是相當大的。這就使得J2ME的標準需要有不同的層次和類別來適應這個複雜的領域,因此相比之下J2ME就比J2SE和J2EE的標準要複雜得多。關 於J2ME標準的文章已經有了不少,但是很少有文章清晰扼要地講清楚J2ME的體系結構劃分的原因,而只有清楚了劃分的根據和爲什麼這麼劃分,才能夠更好 地理解標準。尤其是因爲硬件發展速度是很快的,很有可能一段時間之後,如果還按最初標準的字面定義區劃分設備就會陷於迷惘。作者閱讀和瀏覽了相當多的文章 和介紹,但有些問題也還是最近才認識得比較清楚,在此和讀者分享我的認識,也希望得到建議和指正。因此,下面的介紹儘量不去重複其他文章中都已介紹過的一 些具體細節,不去翻譯規範的字面定義,而是分析規範制定的原因,類別劃分的真正標準,從開發者的角度,讓讀者能夠在這個複雜而多變的領域中更準確地把握技 術的區別和趨勢脈搏,更好地爲將來廣闊的機會做好準備。







J2ME體系結構――Configuration和Profiles

針對消費電子和嵌入式設備領域豐富多樣的設備和彼此相差極大的計算能力及各種硬件條件,J2ME首先根據最基本的一些特徵把它們劃分爲兩類。

  • 具備間斷網絡通訊能力的個人移動信息設備:如手機,雙向呼機,PDA(Personal Digital Assistant,個人數字助理,也稱掌上電腦)等等。
  • 有固定的不間斷網絡連接的共享連接信息設備:如置頂盒(set-top boxes),Web-TV,支持Internet的有屏幕電話,汽車娛樂/導航系統等等。

Sun 的J2ME FAQ(常見問題集)裏有一個很好的概括:J2ME技術有兩個設計中心�D�D手持的設備,和可以插到牆上插座的設備。第一類設備往往是個人化的,移動 的,使用電池,體積和功耗都有限制,因此功能和計算能力有限。第二類設備一般是固定的,因此體積沒有太大限制。由於固定,可以有持續電源供應,因此功耗沒 有太大問題,計算能力相對充裕。

計算能力是這兩類設備的主要區別,對其上可能的應用和環境顯然有着本質影響,不同類別的設 備不可能採用同樣的Java平臺,必須分別定義。針對這兩大類設備的平臺規範就是Configuration(有譯爲配置的,不過我認爲最好不譯)。第一 類設備的Configuration稱爲CLDC(Connected, Limited Device Configuration),第二類稱爲CDC(Connected Device Configuration)。

屬 於同一類的設備計算能力是相似的,但是其他功能和條件還有非常大的區別。作爲Java平臺必須保證相容性,這就必須捨棄所有的設備特殊性。因 此,Configuration就是支持一組通用設備的最小Java平臺,作爲這些設備的最小公分母來保證不同設備間的平臺相容性。這裏的Java平臺主 要是指Java虛擬機(JVM)和核心庫。

在Configuration中捨棄了設備的特殊性來保證Java平臺的相容 性,但是僅僅有Configuration顯然是不夠的,特殊的具體設備其獨有的功能和硬件條件都沒有得到支持。爲此,在Configuration的基 礎上,根據設備具體功能再進行一次劃分,比如智能手機,PDA等等。功能的劃分也就是其他硬件條件的劃分,比如屏幕大小,內存,計算能力,電力供應等等都 是從屬於功能的,因此同功能的設備的硬件條件都是非常相似的。Profile(譯爲簡表或者簡檔)就是針對每一類功能設備的特殊性定義的與設備特性相關的 API,建築於Configuration之上,作爲Configuration的擴展和補充。例如MIDP(Mobile Information Device Profile,移動信息設備Profile)就定義了關於移動信息設備(主要指智能手機和一部分具有無線通信功能的PDA)的圖形界面,輸入和時間處 理,持久性存儲,短消息等等的API,並且考慮到了移動信息設備的屏幕和內存限制。而正在制定中的PDA Profile則定義了針對PDA的API,其屏幕,內存條件都要大於MIDP,但是網絡方面的要求則顯然和手機有所不同。如下圖所示,同屬於一個 Configuration的設備根據功能不同由不同的Profile來支持,Profile體現設備的特殊性,但是都建築在一個共同的基礎 Configuration平臺之上。


圖2

關於J2ME的體系結構,我們可以這樣總結:

Configuration 的分類是根據計算能力的不同來劃分的,同類設備的計算能力相近。Configuration是一個規範,定義了這類設備的共同Java平臺,定義與設備無 關的Java虛擬機和核心庫,是平臺相容性的基礎。Profile的分類是根據設備功能劃分的,同類功能的設備其他各種硬件條件和需求也相近。 Profile是一組API,在某一Configuration的基礎上擴展了針對設備特定功能的API,使得標準能夠完全適應特殊的設備,徹底發揮設備 的功能。

J2ME體系的一般結構是:由Configuration定 義的Java虛擬機運行於設備的宿主操作系統之上,構成整個平臺的基礎。Configuration提供了基本的語言特性,Profile提供針對設備的 特殊功能API和擴展類庫。應用程序的運行環境需要一個Configuration和至少一個Profile,多個Profile可以共存,也可以疊加。

我 們用兩個具體設備的實現作爲例子說明。在一個運行Palm OS的PDA上,Configuration採用CLDC,虛擬機採用KVM(虛擬機和Configuration是緊密相連的,KVM只是CLDC定義 的一個參考實現(reference implementation),並不是唯一的選擇),然後採用PDA Profile的Profile。在另一個運行Symbian的智能手機上,則可以採用KVM,CLDC,MIDP。


圖3

注: 在JCP(Java Community Process,J2ME標準在這裏制定)的網站上已經提出了JSR 68(Java Specification Request,標準提案),將在下一代J2ME標準中用Building Block概念來取代Configuration。其原因是,Profile經常需要提供J2SE中已有的功能,爲了能夠利用已有的J2SE API而不是重新制定新API,引入了Building Block概念。一個Building Block定義一個來自J2SE或者J2EE的API以用於J2ME。這樣,Profile就可以通過Building Block來利用已有的API。





回頁首


J2ME主要標準簡介

J2ME的標準很多,其中許多細節凡是關於J2ME的文章都會介紹,這裏我們只簡要介紹幾個基本而重要的標準。讀者也可以直接去查標準的正式文檔,在JCP網站可以找到所有J2ME標準和規範,包括還在提出和審覈階段,沒有正式成爲標準的提案。

雖 然J2ME標準繁多,但只要把握住標準劃分的原因就很容易掌握。在這個技術飛速發展的領域,我們不能把眼光侷限於標準的字面含義,而要靈活掌握,把握其精 神。比如,CLDC和CDC的定義中具體的最小內存需求僅僅是"最小的",隨着硬件能力的飛速發展,很有可能一些界限會變得模糊。PDA本來應該屬於 CLDC的範圍,但是Compaq的iPaq上卻實現了CDC。以後的下一代PDA有64M內存並不意外,在其上實現CDC也是完全可能的。但是,從功能 的角度,應該還是CLDC以及PDA Profile更適合於PDA的條件。到那時,具體的實現就要看廠商和開發者的選擇了。還需要注意的是,由於Profile是建於 Configuration之上,作爲對Configuration的擴展,因此Profile必須Configuration的支持。有的文章在講到 MIDP的內存需求時,說MIDP需要最少256K,這是指MIDP本身。而有的文章說MIDP需要最少768K,那時因爲把作爲基礎的CLDC所需要的 512K算進去了。

CLDC

CLDC(Connected, Limited Device Configuration)針對個人化的移動的有限連接信息設備,例如智能手機,雙向呼機,PDA等等。其要求是:

  • 512 KB 以下內存
  • 有限能源供應(通常使用電池)
  • 有限或非持續網絡連接
  • 簡單的用戶界面(甚至沒有)

在如此嚴格的限制之下,CLDC 只包括四個包,其中三個來自標準 Java 規範並且作了縮減(java.lang、java.util 和 java.io),另一個專門針對 CLDC (javax.microedition)。

表 1. CLDC 中的包

描述類和接口數目
java.io系統輸入輸出18
java.langJava 編程語言的基本類38
java.util集合、日期和時間支持、各式實用工具類10
javax.microedition通用連接框架(Generic Connection Framework)10

CLDC 必須照顧最苛刻的硬件條件,因此去掉了許多重要的類和特徵,只保留了最核心的一些基本類。例如RMI和映射因需要內存太多而被捨棄,錯誤處理要求的代價太 高,也被刪除了。許多設備不能支持浮點數,更不用說雙精度類了。還有許多設備沒有或不提供訪問一個文件系統的功能或權限。不過請放心,對於那些能夠支持更 多特徵的設備,它們所需要的這些功能或者超出標準J2SE要求的功能,都可以由針對此類設備的Profile來補充。

CLDC 中唯一新增的javax.microedition包定義了一個通用連接框架(Generic Connection Framework,GCF)。通用連接框架把J2SE中的文件,sockets,HTTP請求和其他輸入/輸出機制的概念抽象爲更簡單的一套類。可以 說,它提供了java.io和java.net的同樣功能,卻不需要設備的特殊能力。與底層操作系統無關是Configuration的基本要求。通用連 接框架可以看成是構造通訊驅動的框架,這一點類似於J2SE中的JDBC,後者是一個構造數據庫驅動的框架。通用連接框架並沒有定義對任何特定協議的支 持,但是在Sun的一個CLDC參考實現中確實包括了對一些通訊協議的支持,這點使許多人感到困惑。那些協議只是一些例子,協議的支持應該在 Profile層或者專門針對某設備的擴展中定義。

由於虛擬機處於Configuration中定義平臺的核 心,Configuration和虛擬機是緊密相關的。既然CLDC的硬件要求如此苛刻,對其虛擬機也就有着非常高的要求。Sun提供的參考實現是 KVM(K Virtual Machine)。KVM是完全從頭開始編寫的,其設計目標包括:

  • 虛擬機的大小和類庫爲50到80KB左右
  • 內存佔用爲幾十K
  • 在具有 16 位和 32 位處理器的設備上,有相當的性能
  • 高度可移植和可擴展,特定於機器和/或平臺的代碼的總量很少
  • 多線程和垃圾回收是獨立於系統的
  • 可以對虛擬機的組件進行配置,以適合於特定設備,從而增強了靈活性

KVM 的實現是相當成功的。最早在1999年JavaOne大會的時候,作爲Sun的Spotless計劃派生結果,Sun分發了許多Palm V,提供了Palm OS上的第一個KVM版本和一個實驗性的類庫com.sun.kjava。這一KVM非常小而緊湊,只需要幾十K內存。而com.sun.kjava類庫 提供了Palm的圖形用戶接口,Palm數據庫訪問,簡單的集合類等等。將兩者結合,開發者就可以開發Palm上的Java應用,因此它受到了開發者的廣 泛歡迎,網上也有了許多教程和示例代碼。事實上,到目前爲止,這都是在Palm上開發Java程序的唯一合理途徑。CLDC沒有定義用戶界面等 API,MIDP並不適合PDA,對應的最合適J2ME標準是PDA Profile,但是尚未完成。許多開發者強烈要求Sun在正式的J2ME標準中繼續支持它,但是Sun已經放棄了這一技術,而且並不保證正式的PDA Profile與之的兼容性,因此我們不建議讀者過多研究。

由於這一歷史原因,造成了很多名詞上的困擾。許多早期的文章把 這一KVM與com.sun.kjava包合稱爲KVM,表示這一技術,而現在所說的KVM應該是單單指Sun的CLDC虛擬機參考實現。甚至還有人用K Java作爲J2ME的代稱,表示基於KVM的Java,這很容易和正式的J2ME標準以及早期的com.sun.kjava包相混淆,讀者在看這類文章 時需要注意文章的時間和背景,並採用嚴格的正式名稱。

目前Sun還正在開發KVM的一個高性能版本--Project Monty虛擬機以用於下一代的移動信息處理設備。它採用了Hot Spot的技術,性能將比現有的KVM將近高一個數量級。

雖 然KVM作爲Sun的參考實現最經常被提到,不過並不等於一定要用KVM。其它公司的虛擬機只要滿足相應的Configuration裏的定義,通過兼容 性測試,一樣可以作爲Configuration的虛擬機。目前IBM WebSphere Micro Environment,已經通過了"Java PoweredTM"認證,其J9虛擬機在相當多的平臺上通過了J2ME兼容性測試:


表1

MIDP

MIDP(Mobile Information Device Profile)定義了針對移動信息處理設備(主要指智能手機和一部分具有無線通信功能的PDA)的圖形界面,輸入和時間處理,持久性存儲,無線電話網絡 連接之上的一些消息處理(例如短消息),安全等等API,並且考慮到了移動信息設備的屏幕和內存限制。類似於J2SE中的Applet框架,MIDP提供 了基於javax.microedition.midlet 包的MIDlet應用程序框架。

由於MIDP提出較早,目前重要的智能手機和PDA操作系統上都已有了相應的實現(後面將簡要介紹這些操作系統),網上也有許多教程與文章,一般所謂的Wireless應用文章都是關於MIDP的,這裏就不再重複了,讀者可以 參考文末的資源

PDA Profile

PDA Profile將在CLDC的基礎上,提供針對PDA的用戶界面,數據存儲等擴展API。用戶界面部分適用於有限大小和色彩的顯示,爲了支持開發者已有的 經驗基礎,將是AWT的一個子集,也有可能在AWT子集之上加入MIDP用戶界面組件。而存儲機制將是簡單的,平臺無關的,類似於MIDP中的存儲,爲應 用程序、數據、配置/環境信息提供簡單的數據存儲。

目前這一規範正由Palm Source公司(從Palm公司分離出來的專門負責Palm OS的公司)領導主持,已經在4月8日開始進入了JCP流程的第二階段Community Draft最後部分(Community Draft Ballot 08 Apr, 2002 ),估計最終正式版本應該在7月至9月左右完成。(參考 http://jcp.org/introduction/timeline/index.en.jsp) 前面已經提到,PDA Profile將取代 k java,作爲針對PDA的正式J2ME標準。因此建議希望在PDA上開發應用的開發者等待這個標準的出臺和相應的實現,現在如果要進行MIDP的應用開 發,則應明確其目標是智能手機類的設備,而不是PDA,這一點很多文章都沒有講清楚。

CDC

CDC(Connected Device Configuration)針對有固定的不間斷網絡連接的共享連接信息設備,如置頂盒(set-top boxes),Web-TV,支持Internet的有屏幕電話,汽車娛樂/導航系統等等。

CDC要求爲Java提供至少2M的內存,這可以是ROM加上RAM,也就是說,Java虛擬機和核心類庫很有可能放在ROM或者Flash裏。事實上,下一代無線手持設備完全可以滿足CDC的需求。

CDC 是CLDC的完整超集,包含了所有的CLDC規範。另外,在相對充裕的條件下,它支持J2SE的標準 Java 虛擬機和一部分核心類庫。對於這一點,幾乎所有的文章都這麼說,卻很少有文章徹底分清彼此之間的兼容性關係,甚至還有文章錯誤地說CDC支持Java語言 的完整實現,這是很容易引起混淆的。

首先可以肯定,既然CDC是CLDC的超集,基於CLDC的程序在CDC內是完全兼容的。不過這裏的CLDC程序必須只用到CLDC的部分,一旦採用了某一個Profile,顯然也就不能在CDC內兼容了。


圖5

其 次,CDC支持標準的J2SE虛擬機,這只是Java平臺的基礎,並不包括建築於平臺基礎之上的各種類庫。特定設備需要的特定類庫由相應的Profile 來定義。這一點隨後就會提到。還是那個關鍵:Configuration定義的是一類設備的與設備無關的最小平臺,因此,諸如用戶界面之類的類都被分離, 留在Profile中定義。

雖然CDC支持標準的J2SE虛擬機,但是標準的Java虛擬機顯然無法適應有限的資源環境。 爲此需要專門定義一個虛擬機,稱爲CVM(開始的時候,CVM代表Compact Virtual Machine,但是後來Sun的工程師認爲這有可能與KVM相混淆,因此現在C並不代表特定的含義)。CVM除了支持標準J2SE虛擬機的所有特性外, 還支持許多嵌入系統需要的特性,更適合於在資源限制條件下運行,移植性很強。目前Sun提供了Linux和VxWorks之上的CVM參考實現 (reference implementation)。

Foundation Profile

Foundation Profile提供除了用戶界面以外CDC所缺少的幾乎所有標準J2SE核心類庫,作爲其他所有Profiles的基礎(我們看到,多個Profile可以共存,也可以疊加)。

Personal Profile

Personal Profile針對那些資源相對有限,但是需要高度的Internet和WEB連接支持的設備,例如Web-TV,汽車導航系統等等。它在Foundation Profile的基礎上提供了網絡特性以及支持Java applets的 GUI。

Personal Profile的前身是Personal Java,Personal Java是Sun爲資源限制設備創建 Java 平臺版本的早期嘗試。Personal Profile將與Personal Java 1.1和1.2向後兼容。

RMI Profile

RMI Profile在Foundation Profile的基礎上提供RMI支持,將允許網絡設備與其它系統應用程序(不一定是J2ME的)交互操作。





回頁首


J2ME的平臺無關性和標準的兼容性

平 臺無關性主要指的是設備的宿主操作系統平臺。由於Java平臺建築於虛擬機之上,只要不同的操作系統上的虛擬機滿足同樣的規範和標準,對於虛擬機以上的層 次是平臺無關的。這使得針對某一Configuration或者Profile的應用可以運行於所有實現了這一Configuration或者 Profile的操作系統平臺。舉例來說,目前已經有網站開始收集基於MIDP的程序�D�DMIDlet,提供下載和收費,各種支持MIDP的設備都可 以使用,這包括數量巨大的智能手機和幾乎所有的PDA(Palm OS和Pocket PC)。

對於Profile而言, 不同的Profile之間一般是不相容的,比如日本NTT 的DoCoMo已經銷售了相當多的支持CLDC的手機,但是使用的是自己專用的Profile,針對這一Profile的程序對其他Profile也就是 不兼容的。事實上,由於Profile是針對設備功能的,不同的Profile針對的設備,往往功能上有着較大差別,程序的相容性既不可能也無太大意義。 當然有一些設備的功能劃分不那麼明確,比如有無線通信功能的PDA和智能手機。由於一個Configuration之上可以同時有多個 Profile,Profile之間也可以嵌套和疊加,例如CDC的Foundation Profile就是其他各種Profile的基礎。那麼這些設備就既可以採用MIDP也可以採用PDAP,在以後的硬件基礎上,同時裝多個Profile 也完全沒有問題。

有的文章裏說,J2ME爲了能夠在計算能力有限的設備上運行,捨棄了J2SE的許多特性,因此J2ME是 J2SE的子集。這樣的說法沒有強調J2ME裏因爲設備特殊性而增加的內容,因而是不準確的。除非程序只用到這些平臺間共同的部分,否則是不能相容的。而 一般來說,共同的部分是相當有限的。





回頁首


其他非J2ME標準的相關技術

還有一些技術和J2ME相關,但是並不屬於J2ME,我們在這裏作簡要介紹。

Java Card

Java 卡(Java Card)是爲智能卡(smart cards)設計的。Smart cards的內存非常有限,爲此限制了類的數目(例如,沒有Windows系統類),並把整個Java Card規範在一個二進制核心裏實現,然後用Java封裝。由於智能卡的功能很簡單而容易掌握,類不需要頻繁改變,這一方法效果很好(對於J2ME顯然不 能使用這種方法)。另外,由於每一個Java卡應用的數據和代碼是獨立在沙箱(sand box)內執行的,一張卡上可以有多個應用,彼此獨立,並且很安全,這樣就實現了一卡多用,不需要在錢包裏裝太多的卡。

雖 然Java卡是爲智能卡設計的,不過也可以用於許多其他地方。例如1998年的Java One大會上的Java戒指(Java Ring,又名 Java-Powered iButton,事實上只是Java Card的另外一種型態,Dallas Semiconductor公司將它製作成爲鈕釦的形狀,進而鑲嵌在戒指之上),或者世界上現在發佈的數百萬張GSM SIM卡。

Embedded Java

Embedded Java是歷史上Sun另一次創立嵌入系統Java平臺的嘗試,針對有間斷的網絡連接或者沒有網絡連接的設備,這些設備經常是沒有圖形界面的。 Embedded Java的設計更接近於J2SE,但是因此太大太慢,而且對系統要求過高。另外,Embedded Java將控制其運行的平臺,也就是接管所有的系統調用,所有的庫,所有的設備。顯然提供平臺的公司不會喜歡這一點。因此,Embedded Java基本上完全失敗了。

WAP

WAP(Wireless Application Protocol,無線應用協議)是XML的一個應用,其目的是在無線設備如手機上顯示Internet內容。由於無線設備的顯示區域有限,需要將標準的HTML重新調整以適應硬件條件。

許 多初聽說J2ME的人都會想到WAP,其實WAP和J2ME並不衝突,而且是很好的互補。WAP對於文本爲主的內容是很合適的,需要持續的網絡連接。但是 對於圖形較多的應用WAP就不太合適,只能提供輕量級的腳本執行能力。WAP的網關也有安全性問題。而Java技術可以用於間斷的網絡連接,可以將應用和 服務邏輯在設備和服務器間分離,很適合於圖形應用,有很穩定而可靠的安全模型。

結合WAP和Java技術的一個方法是在設 備上安裝一個WAP瀏覽器,並且實現CLDC和MIDP及其與WAP瀏覽器之間的通訊。也有一些WAP技術是用Java實現的,比如K Browser(http://www.4thpass.com)就是一個用Java實現的瀏覽器,運行於J2ME之上。





回頁首


無線Java技術

無線這個概念在J2ME的相關文章中經常出現,但是

  • 無線Java不等於J2ME。J2ME中,無線設備只是其中的一小部分。而無線Java技術也可能包括這種情況:在筆記本上運行J2SE應用,通過802.11 LAN連接網絡。
  • MIDP不是全部的J2ME。MIDP發佈最早,因此也得到了最廣泛的支持,相關的討論和文章因此也非常多,但是J2ME當然不僅僅是MIDP。
  • MIDP不是全部的無線Java技術。還有許多其他Java技術屬於無線技術,比如Personal Java,PDA Profile,甚至無線設備上的J2SE。




回頁首


移動信息設備的主要操作系統平臺及其對J2ME的支持

在 消費電子和嵌入式設備的廣闊領域中,目前最受關注的是移動信息設備,因此有必要介紹一下移動信息設備的主要操作系統平臺,這對J2ME的開發是相當重要 的。移動信息設備主要包括PDA和智能手機,現在和將來都還會有一部分設備處於PDA和智能手機交界的位置。其中手機的市場遠比PDA要大得多,所以許多 國外談到J2ME的文章都是以Wireless應用爲主。

PDA也即掌上電腦,一般是指類似於Palm公司出品的Palm 這樣的設備,主要的操作系統有Palm OS和Pocket C兩大陣營。Palm OS來自Palm公司,是一個開放的系統,在PDA市場上占主導地位,已經有非常多的第三方廠商開發的應用和一大批非常忠實和狂熱的用戶。目前採用 Palm OS的主要有Palm公司的Palm系列和Sony公司的Clie系列(Handspring公司的Visor也屬於這類產品,但是已經宣佈退出傳統 PDA市場,主要發展PDA和無線通訊結合的產品Treo)。

Pocket PC是微軟及其合作伙伴Casio、Compaq、Hewlett Packard和Symbol推出的,基於Win CE 3.0,也是一個開放的標準系統,功能可以擴展(以往的Win CE是一個封閉的不可擴展的系統),在這個平臺上廠商可以自己開發軟件。具體產品如Compaq的iPAQ。

另外,Sharp公司Zaurus系列PDA採用Linux的一個針對嵌入式系統的版本。作爲擁有高達64M內存的高端PDA,可以滿足CDC的標準,預裝了Personal Java的虛擬機。

在 智能手機領域,主要的平臺是Symbian的EPOC。EPOC最早由Psion開發,主要面向智能手機,也有PDA的特徵,Psion就是第一批主要的 PDA廠商之一。Psion宣佈EPOC的第一個版本是開放的OS,並向其它廠商授權,隨後Psion與Ericsson,Nokia,及稍後的 Motorola建立了名爲"Symbian"的聯盟,目前主要股東爲Motorola, Nokia, Panasonic, Psion和SonyEricsson,而且Siemens4月也宣佈加入。Symbian在歐洲有很好的基礎,爲大多數主要手機廠商所採用,典型的產品 如Norkia的9210。


圖5:Norkia 9210
圖5

Symbian 向領先的軟硬件開發商開放源代碼--所謂的Platinum Programme。從Symbian OS 5起開始支持java,OS 6引入了Personal Java和Java Phone(在Personal Java基礎上的一個擴展API,主要針對手機),OS 7開始支持CLDC和MIDP(部分基於6.0和6.1的產品也支持)。


圖6

另 一方面,微軟則有PocketPC 2002電話版和SmartPhone 2002(又稱Stinger)與Symbian競爭,顯然,前者是有無線通信功能的PDA(前面提到的Handspring新推出的Treo就是這類產 品的典型),後者是有智能處理功能的手機。





回頁首


移動信息設備上J2ME開發的現狀和前景

在 前面提到的這些操作系統平臺中,Palm OS上已經有了MIDP的參考實現,但是並不是最適合PDA的Profile。Symbian實現了CLDC和MIDP,作爲智能手機的操作系統,是理想 的MIDP應用平臺。在Compaq的iPaq上已經實現了CDC(基於Pocket PC),另外前面提到過,IBM的WebSphere Micro Environment在Pocket PC上實現了CLDC,CDC和MIDP。Sharp的Zaurus實現了Personal Java(基於Linux)。可以看到,在硬件條件較好的PDA上(Pocket PC和Zaurus都使用Intel Arm CPU,比Palm使用的Motorola DragonBall系列性能要高得多)都可以實現CDC的標準。由於這些主要操作系統平臺都是開放的,基本可以相信,主要的移動信息設備操作系統都將一 直提供J2ME的支持,但是具體支持哪個標準則並不一定死板地按照CLDC和CDC的最初定義,和設備的硬件條件和廠商的選擇有關,或者可能同時實現多個 標準。

關於移動信息設備上J2ME應用的具體開發,現有的文章和技術基本分爲以下幾類:

  • 採用早期的KVM和com.sun.kjava包,或者加上第三方的k awt類庫。有很多早期的文章和代碼,但是這一技術將被PDA Profile取代,而且不保證兼容性,不建議開發者採用這一方法,而是等待PDA Profile的最後完成及其實現。
  • 採用CLDC和MIDP開發。由於MIDP標準發佈較早,智能手機的市場也遠比PDA大得多,這是目前大量的無線應用文章的主要內容,不過它最適合的目標是智能手機,雖然智能手機可能有一定的PDA的功能,但是這一技術並不是最適合PDA的,開發者需要考慮清楚。
  • 採用CDC和Personal Profile,這樣的文章不太多見,目前的移動信息設備硬件能力還有所不足。但是下一代的PDA和智能手機肯定可以支持。

就現有的PDA硬件條件而言,J2ME應用要和已有的應用競爭還有比較多的困難:

  • 空 間:現在一般的Palm類設備內存從2M到16M不等(目前較高檔的機型都已支持擴展卡,可以擴展到128M,但是卡上運行程序的速度要慢得多,一般主要 用來放數據,運行程序不能依賴於卡),Palm上一般現有程序的標準大小是幾十K到300K以下。而僅MIDP的Palm參考實現庫在Palm上就需要將 近600K,再加上作爲基礎的CLDC庫,加上程序,就快要接近1M了。和已有的應用相比,目前是沒有太大競爭力的。
  • 速 度:由於Palm一直信奉的是"簡單就是美"的原則,目前的Palm系列PDA主要用的是33MHz 的Motorola 68000系列DragonBall,這雖然帶來了成本的降低和節電性,但J2ME應用的性能很難讓人滿意了。作者在自己的Palm m100(入門機型,但是Palm系列各機型的CPU速度基本上是一樣的)測試過一些演示程序,一般都有兩三秒鐘的啓動延遲。
  • 功能:目前最適合Palm的PDA Profile尚未完成,如果用MIDP開發則不太合適,用早期的KVM和com.sun.kjava則因爲不是J2ME標準,程序兼容性無法保證。

雖然如此,但是在移動信息設備上開發J2ME應用的前景還是非常美好的:

  • 硬 件的發展:目前的Palm配8M到16M內存已經是主流,下一代超過32M是必然的趨勢。Palm OS 5終於開始支持32位的ARM RISC處理器,其速度應該能夠提高10倍以上。事實上,Sharp公司今年第一季度發售的Zaurus SL-5500已經採用了Intel 206MHz StrongARM處理器和64M內存,在這樣的硬件上速度和內存都不會成爲問題。
  • 標準的完善:PDA Profile今年內將最後完成,可以預計很快會在主要操作系統上得到實現。目前在JCP也有許多其他標準非常有意義,例如關於藍牙技術(Bluetooth),遊戲,定位等等。
  • 平 臺的廣泛性:移動信息設備的主要操作系統平臺都是開放的,J2ME的標準也是開放的,因此基本上所有的主要操作系統平臺都支持或將支持J2ME,這帶來的 廣闊市場(智能手機的市場尤其巨大,據稱Norkia到今年就可以出貨5000萬隻Java手機,而到2003年可達1億隻。)和真正的"一次編寫,到處 運行"是任何其他技術無法比擬的。對於開發者而言,可以不受操作系統的限制,不用擔心在這個多變的市場上因平臺的變化而影響自己的應用。
  • 開發的方便性:J2ME雖然和J2SE有着許多不同,但仍然屬於Java技術,具有Java方便開發的優點,也使得Java程序員學習移動信息設備開發沒有太大困難(事實上,我認爲開發J2ME應用的主要困難不在於具體編碼,而在於標準的複雜性)。


參考資料

J2ME牽涉到的內容相當多,這裏詳細列出各方面的重要站點。

J2ME的官方網站:

  • http://jcp.org,Java Community Process(JCP)。雖然Sun是Java的創始人,但是現在Java平臺的許多定義和擴展工作是通過JCP進行的。JCP允許公司和個人參與到 Java平臺的定義和修改工作中來,其流程很簡單,先提交一個擴展Java平臺的規範需求(java specification request, JSR),如果被接受,就組成一個專家組正式定義這個JSR。專家組的成員包括該領域的專家和志願奉獻精力和時間者。下一步就公佈出來接受其他JCP成員 和公衆審查,根據審查意見修改後,就投票接受爲一個正式的Java標準。這一過程能夠保證Java的各種實現是兼容的,從而保證Java應用的相容性。所 有的J2ME標準都是通過這個流程定義的。

  • http://jcp.org/jsr/tech/j2me.jsp,所有的J2ME標準。

  • http://java.sun.com/j2me,J2ME官方網站。

  • http://java.sun.com/products/cldc/wp/ProjectMontyWhitePaper.pdf,Project Monty虛擬機的白皮書。

無線Java技術:

資源收集網站:

一些重要的J2ME文章:

郵件列表:

相關書籍:

  • 前面提到的Bill Day的J2ME資源中列出了主要的J2ME相關英文書籍。

  • 前面提到的 http://www.shiunkle.idv.tw/j2me/articles/index.htm中列出了臺灣出版的主要J2ME方面著作。

  • 電力出版社引進了其中兩本:
    • Palm 應用程序設計--使用 Java 語言,朱仲傑著;中國電力出版社,2001.
    • 深入Palm應用程序設計:使用Java語言,朱仲傑著;中國電力出版社,2001.



關於作者


董向輝,中科院自動化所人工智能實驗室博士生。研究方向爲演化計算和複雜性科學。E-mail: [email protected]

發佈了94 篇原創文章 · 獲贊 8 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章