經濟因素:移動設備和 Java ME 均是不斷發展的市場。
入門費用低:對於在線閱讀者,入門的成本為零。
學習曲線短:Java ME 比其他 Java 平台小;因此,它的類和方法相對較少,一個開發者即可全部掌握。
接下來,我們將逐一探討這些理由。
經濟因素
移動手持設備市場非常龐大並且在不斷發展壯大。2007 年,該市場的年銷售量首次突破十億部,這意味著每天 270 多萬部。
下圖顯示了制造商從 1998 年到 2007 年的銷售量(以千為單位)。數據來自 Gartner Group 公司站點公布的新聞簡報。
某些觀察數據以 2001 年作為參考年份。2007 年市場的總銷量比 2001 年增加了 2.89 倍。這意味著從 2001 年以來,年復合增長率超過 18%。在 2007 年,只 Nokia 一家的銷售量就超過了整個行業在 2001 和 2002 兩年的銷售量之和。至少可以認為,從銷售量的觀點來看,移動電話市場是一個高速成長的市場。
在“長尾理論” 中,Chris Anderson 闡明了互聯網經濟中的金錢從何而來。Anderson 的一個觀點是 80/20 法則的變易。他發現在細分市場上,小部分供應商集中了大部分的銷售量。然而這個觀點並不意外,真正深刻的見解在於 Anderson 的深入研究:他繼續調查在一個足夠大的市場中,80/20 法則的另一方面(20/80 這一方面或者說尾部)發生了什麼。尾部被利基(Niche)應用和內容所占據。例如,蘋果公司計劃在 2008 年占據手機銷售市場 1% 的份額。這 1% 代表 1 千萬部 iPhone 或大約 45 億美元的營業收入,僅憑此一項就足以進入 世界財富 500 強。Anderson 的建議是識別利基、為之創建服務和內容、使自己容易被找到、並讓支付和配送盡可能的高效。
當手機價格達到市場平均售價時,手機軟件市場要比手機市場小,但擁有如此巨大的手機數量,即使是最保守的銷售收益也能夠快速積累。關於收益的一個簡單模型:
收益 = 銷售量 x 有效的 Java ME 的比率 x 銷售滲透率 x 每部手機的收益
此處“有效的 Java ME 的比率”表示售出的所有手機中能夠使用您的 Java ME 應用程序的手機所占的比率,“銷售滲透率”是指在有效的 Java ME 設備中已經購買了您的應用程序的手機比率。假設售出的手機是 10 億部,每部的收益是 1 美元,則公式變為:
收益 = $1,000,000,000 x 有效的 Java ME 的比率 x 銷售滲透率
公式計算出:在 10 億美元的潛在市場中您能獲得多少收益?下表列出了不同復合市場滲透水平下的收益。
收益項目
有效的 Java ME 的比率 銷售滲透率 收益(美元) 注釋 10 0.1 100,000 保守的 15 0.5 750,000 有吸引力的 25 1.0 2,500,000 樂觀的 35 2.0 7,000,000 非常樂觀,不再屬於尾部。
在此市場中,1% 的 1% 代表 10 萬美元的收益,這足以吸引對服務利基市場(即長尾中的某處)有興趣的小型開發團隊的注意。收益:由於 Java ME 市場的總體規模非常大,所以在長尾中的潛在收益非常可觀。挑戰是為利基市場識別並創造應用程序、幫助利基市場找到應用程序(搜索 = Google 及其他)以及盡可能地參與多個利基。
入門的成本
進入 Java ME 開發者世界的成本是零。您還期望什麼樣的與眾不同呢?備受贊譽的 NetBeans IDE 可以從 netbeans.org 上與移動程序包一起獲得。主要設備生產商都提供了免費的開發工具和文檔,但是其中有一些是需要注冊的。
在開始學習之前,您將需要一個 Windows 或 Linux 環境(真實或虛擬的),以便運行帶移動程序包的 NetBeans IDE 和 Web 服務器,最好使用有效的 WebDAV(基於 HTTP 的 XML)為應用程序提供無線電方式 (OTA) 部署。如果沒有自己的 Web 服務器,可以使用一些 Java ME 應用程序托管站點 —— GetJar.com、HostJ2ME.com 和 JuegosEnMovil.com 這三個站點通過 Google 可以很容易找到。這些站點允許開發者將自己的應用程序上傳到配置好的服務器上,以實現 MIDlets(MIDP 應用程序)的無線電方式部署。
更嚴謹的開發者可以采用 CVS、Subversion 或 Mercurial 等源代碼管理(source code management, SCM)系統——所有這些都是免費的並且集成在了 NetBeans IDE 中。
對於那些尋求更簡化的開發環境的開發者,Sun 為 CLDC(連接受限設備配置)提供了 Sun Java 無線工具包(有時稱作 WTK 或 無線工具包)。WTK 提供了相同的 JSR(Java 請求規范)集和 NetBeans 模擬器,所以可生成應用程序的廣度沒有任何變化。不同之處在於 IDE 或 WTK 被描述成一個工具欄 —— 它不包括選項左置的集成編輯器。它包括管理項目、提供自動生成、以及執行和調試環境。
學習曲線
如果您是六百萬 Java 開發者中的一員,那麼您已經具備了 Java ME 平台開發的知識。事實上,要在 Java ME 平台進行開發,你還需要將一些學過的東西忘掉。
Java ME 平台最初從刪除了內存計算密集型類和方法的 Java 2 Standard Edition 1.3.1 演變而來。那些與 Java ME 的目標市場無關的類也被去除了。一個關於如何為 Java ME 平台而修改類 JDK 1.3.1的例子可以參考類 java.util.Date。在 JDK 1.3.1 中,Java.util.Date 包含 6 個構造函數 (constructor) 和 28 個方法 (method),在 CLDC 1.1 規范中,相同的類已將構造函數和方法分別減至 2 個和 5 個。
從 Java SE 到 Java ME 環境,最大的變化是用戶界面 (UI)。Java SE 為 UI 包含了 AWT(Abstract Window Toolkit,抽象窗口工具包)和 Swing 包,而 Java ME 環境包括了Javax.microedtion.lcdui (LCDUI)。LCDUI 是一個更加簡化的 UI 工具包 —— 它去掉了布局管理,並擁有更少的小部件。
Java ME 技術平台包括 83 個 JSR,其中大約一半已經獲得了 Java 社區組織 (JCP) 的審核批准。每個設備都支持許多的 JSR。問題是並非所有的 JSR 都會獲得全部平台的支持。那麼開發者會問:
哪些 JSR 可以認為是當前有效的?
檢測到的特定 JSR 是否有效?
如果需要的 JSR 當前無效怎麼辦?
問得好。 從 2006 年 12 月開始,諸如“學習什麼?”之類問題的答案都匯集在《JSR 248 Mobile Services Architecture》(MSA) 中。 MSA 是一個傘狀標准,它定義了一套 JSR 集合,而這個集合定義了一個足以開發可視的、高技術含量應用程序的先進平台。 Sun Developer Network (SDN) 有一個 MSA OvervIEw,其中包含著到那些包名、系統屬性和技術文章裡含有”JSR”的相關頁面的鏈接。主要的制造商目前都提供 MSA 設備,並且每時每刻都有新的制造商加入此行列。
下表定義了所有在 MSA 設備上可用的包,以及關於每個包的作用和內容的簡短描述。
MSA 包和類
Java ME JSR 包 描述 JSR 139 CLDC 1.1 Java.io 各種 I/O 流 Java.lang 基本類型的包裝器 Java.lang.ref Reference 和 WeakReference 類 Java.util 日期和時間類,容器類 Javax.microedition.io 通用連接框架 (GCF) JSR 118 MIDP 2.1 Java.lang 應用程序資源文件 Java.util Timer 和 TimerTask 類 Javax.microedition.io 針對 http、https、ssl、TCP 和 UDP 套接字、串行端口和 Push Registry 的 GCF Javax.microedition.lcdui 用戶界面 Javax.microedition.lcdui.game 游戲用戶界面 Javax.microedition.media 音頻回放和媒體控制支持 Javax.microedition.media.control 同媒體播放器一起使用的控件 Javax.microedition.midlet MIDlet 執行環境 Javax.microedition.pki 安全連接的認證管理 Javax.microedition.rms 用於持久性存儲的記錄管理系統(Record Management System) JSR 238 Mobile i18n Javax.microedition.global 本地特定內容、資源檢索、文本字符串排序的格式化 JSR 75 PIM and File Javax.microedition.io.file 訪問設備上的即時文件系統 Javax.microedition.pim 聯系人,事件/日歷和行程計劃 JSR 82 Bluetooth Javax.bluetooth 藍牙客戶機和服務器訪問 Javax.obex 藍牙對象交換 JSR 135 Mobile Media Javax.microedition.media 媒體播放器和控件 Javax.microedition.media.control 特定媒體控件 Javax.microedition.media.protocol 媒體流內容類型 JSR 172 Web Services Javax.XML.parsers JAXP Subset API org.XML.sax JAXP Subset API org.XML.sax.helpers JAXP Subset API Java.rmi JAX-RPC Subset Javax.XML.rpc JAX-RPC Subset Core API JSR 177 SATSA Java.lang 需要從 Java SE 平台得到的兩個異常 Java.rmi Java SE 平台的子集 —— 遠程接口 Java.security 加密公鑰對的生成和存儲,大量可輸出的加密操作。 Java.security.spec 密鑰規范和算法參數 Javacard.framework Java Card API 異常 Javacard.framework.service Java Card API 異常 Javacard.security Java Card API 異常 Javax.crypto 加密操作 Javax.crypto.spec 密鑰規范和算法參數 Javax.microedition.apdu 智能卡設備的 APDU 協議處理程序 Javax.microedition.io APDU 和 Java Card RMI 的 GCF Javax.microedition.jcrmi Java Card RMI 連接的類和接口 Javax.microedition.pki 支持基礎用戶認證管理的類 Javax.mimcroedition.securityservice 生成應用程序級別的數字簽名的類 JSR 179 Location Javax.microedition.location 包括地址、坐標、地標、位置和方位在內的位置類。 JSR 180 SIP Javax.microedition.sip 會話發起協議管理 JSR 184 3D Graphics Javax.miroedition.m3g 包括場景圖形和外部文件格式的 3D 所用的 API JSR 205 Wireless Messaging Javax.microedition.io SMS 和 MMS 連接所用的 GCF Javax.wireless.messaging 消息創建、發送和接收 JSR 211 CHAPI Javax.microedition.content 通過 URL、內容類型、內容處理 id 調用應用程序 JSR 226 SVG Javax.microedition.m2g SVG 圖象和動畫設計器 org.w3c.dom 文檔、元素和節點類 org.w3c.dom.events 事件處理 org.w3c.dom.svg 帶 SVG 文檔樹的基本 SVG 數據類型和元素 JSR 229 Payment Javax.microedition.payment 金融事務管理 JSR 234 Mobile Media Supp Javax.microedition.amms GlobalManager 和 Spectator 類、媒體、效果和模塊接口。 Javax.microedition.amms.control 媒體管理的特定控制 Javax.microedition.amms.control.audio3d 3D 音頻效果控制 Javax.microedition.amms.control.audioeffect 音頻控件的效果控制 Javax.microedition.amms.control.camera Camera 控件 Javax.microedition.amms.control.imageeffect 視頻和靜態圖象的效果控制 Javax.microedition.amms.control.tuner 無線電控制 JSR 248 MSA 對所包含的 JSR的闡釋結束語
本文總結了學習和支持 Java ME 技術的商業原因,希望能啟發您在不斷發展的手機與嵌入式市場中進行探索和實踐。