Java ME

Java 2的組成部分

Java ME 又稱為J2ME(Java Platform,Micro Edition),是為機頂盒、行動電話和PDA之類嵌入式消費電子設備提供的Java語言平台,包括虛擬機和一系列標準化的Java API。Java ME與Java SE、Java EE一起構成Java技術的三大版本,通過JCP(Java Community Process)制訂。

語言特點


Java ME(Java 2 Micro Edition)是Java 2的一個組成部分,與J2SE、J2EE並稱。與J2SE和J2EE相比,JAVA ME總體的運行環境和目標更加多樣化,但其中每一種產品的用途卻更為單一,而且資源限制也更加嚴格。為了在達到標準化和兼容性的同時盡量滿足不同方面的需求,JAVA ME的架構分為Configuration、Profile和Optional Packages(可選包)。它們的組合取捨形成了具體的運行環境。
Configuration主要是對設備縱向的分類,分類依據包括存儲和處理能力,其中定義了虛擬機特性和基本的類庫。已經標準化的Configuration有- Connected Limited Device Configuration(CLDC)和Connected Device Configuration(CDC)。
Profile建立在Configuration基礎之上,一起構成了完整的運行環境。它對設備橫向分類,針對特定領域細分市場,內容主要包括特定用途的類庫和API。CLDC上已經標準化的Profile有Mobile Information Device Profile (MIDP)和Information Module Profile(IMP),而CDC上標準化的Profile有Foundation Profile(FP)、Personal Basis Profile(PBP)和Personal Profile(PP)。
可選包獨立於前面兩者提供附加的、模塊化的和更為多樣化的功能。目前標準化的可選包包括資料庫訪問、多媒體應用、藍牙等等。

發展歷程


根據Sun的定義:Java ME是一種高度優化的Java運行環境,主要針對消費類電子設備的,例如蜂窩電話和可視電話、數字機頂盒、汽車導航系統等等。JAVA ME技術在1999年的JavaOne Developer Conference大會上正式推出,它將Java語言的與平台無關的特性移植到小型電子設備上,允許移動無線設備之間共享應用程序。
今天,不止是桌面上的電腦,手中的電話、汽車中的通信設備、家中的冰箱、洗衣機等都將連入網際網路,這是一個移動的網際網路。J2ME(Java2平台微型版)就是Java程序在這些連接設備上的執行平台和開發環境,其基本思想和J2SE類似,就是在各種設備上安裝適合它的Java虛擬機,應用程序則在虛擬機之上運行。
Java本來就是為了嵌入式系統而生,1990年12月,Sun公司內部由James Gosling、Patrick Naughton以及Mike Sheridan成立了一個叫做Green Team的小組。Green Team小組的主要目標,是要發展一種新架構,而這種架構必須能夠在消費性電子產品作業平台上運行,現在我們普遍認識的PDA、手機或是信息家電(IA),都是屬於這種架構的目標平台。雖然在1999年,Java被分割成J2ME、J2SE、J2EE,所以有了J2ME這個名詞的出現。但是Java並非1999年才開始發展嵌入式系統上的應用。其實,Java本來就是為了嵌入式系統而發展的一種架構。即使目前大家多半將Java的應用聚焦於企業上的J2EE應用。但是嚴格來說,J2ME才是Java真正“回歸本心”的領域。
Sun公司將J2ME(Java 2 Micro Edition)定義為“一種以廣泛的消費性產品為目標的、高度優化的Java運行時環境”。J2ME是Sun公司為嵌入式開發所定義的一個框架,由一系列標準的規範組成。所以J2ME是一系列技術規範的總稱,而不是單一的規範。
J2ME的所有技術標準都由JAVA社區過程(Java Community Process,JCP)制定,JCP是一個開放的國際組織,主要由Java開發者以及被授權者組成,職能是發展和更新Java技術規範、參考實現(RI)、技術兼容包(TCK)。Java技術和JCP兩者的原創者都是SUN計算機公司。
JCP維護的規範包括J2ME、J2SE、J2EE、XML、OSS、JAIN等。組織成員可以提交JSR(Java Specification Requests),通過特定程序以後,進入到下一版本的規範裡面。
J2ME使用配置(CDC或CLDC)和簡表(Profile)定製JRE,一個完整的JRE由配置和簡表組成,配置決定了所使用的JVM(可能是CVM或KVM),而簡表通過定義特定的類來為應用程序提供功能上的支持,一個簡表定義了設備所提供的API集合。例如:CLDC規範目前分為v1.0 JSR 30、v1.1 JSR 139;CDC規範目前分為v1.0 JSR 36、v1.1 JSR 218;MIDP規範目前分為v1.0 JSR 37、v2.0 JSR 118。

設計規格


Java ME
Java ME
J2ME 在設計其規格的時候,遵循著「對於各種不同的裝置而造出一個單一的開發系統是沒有意義的事」這個基本原則。於是 JAVA ME 先將所有的嵌入式裝置大體上區分為兩種:一種是運算功能有限、電力供應也有限的嵌入式裝置(比方說PDA、手機);另外一種則是運算能力相對較佳、並且在電力供應上相對比較充足的嵌入式裝置(比方說冷氣機、電冰箱、電視機頂盒 (set-top box))。因為這兩種型態的嵌入式裝置,所以Java 引入了一個叫做Configuration 的概念,然後把上述運算功能有限、電力有限的嵌入式裝置定義在Connected Limited Device Configuration(CLDC)規格之中;而另外一種裝置則規範為 Connected Device Configuration(CDC)規格。也就是說, JAVA ME 先把所有的嵌入式裝置利用Configuration 的概念區隔成兩種抽象的型態。
其實在這裡大家可以把Configuration 當作是JAVA ME 對於兩種類型嵌入式裝置的規格,而這些規格之中定義了這些裝置至少要符合的運算能力、供電能力、記憶體大小等規範,同時也定了一組在這些裝置上執行的 Java 程序所能使用的類別函式庫、這些規範之中所定義的類別函式庫為 Java 標準核心類別函式庫的子集合以及與該型態裝置特性相符的擴充類別函式庫。比方就CLDC 的規範來說,可以支援的核心類別函式庫為java.lang.* 、java io.*、java.util.*,而支援的擴充類別函式庫為javamicroeditionio.*。區分出兩種主要的Configuration 之後,JAVA ME 接著在定義出Profile的概念。Profile 是架構在Configuration 之上的規格。之所以有Profile的概念,是為了要更明確地區分出各種嵌入式裝置上Java 程序該如何開發以及它們應該具有哪些功能。因此Profile 之中定義了與特定嵌入式裝置非常相關的擴充類別函式庫,而 Java 程序在各種嵌入式裝置上的使用者介面該如何呈現就是定義在Profile 裡頭。Profile 之中所定義的擴充類別函式庫是根據底層Configuration 內所定義的核心類別函式庫所建立。

關鍵技術


我們先從整體上了解J2ME在運行中Java程序、Profile(MIDP是其中的一類描述)、Configuration(CLDC是其中的一類配置)、虛擬機、操作系統以及實體機器之間的關係,即J2ME的運行環境。
· MID:移動信息設備硬體;
· 原生代碼的系統軟體:包括操作系統和系統使用的庫文件;
· CLDC:包括KVM和由CLDC規範定義的相關庫函數,CLDC是MIDP和OEM特定類的基礎;
· Java API:這部分提供上層所需的最底層Java功能;
· MIDP:一個Java API集合,處理諸如用戶界面、持久存儲和網路等方面的問題;
· OEM特殊類:擴展了MIDP所定義的功能,這些類可能由OEM為某一給定的設備提供,是不可移植的。
(1)KVM
KVM是一個緊湊的、可移植的Java虛擬機,專用於小型的資源受限的設備,如蜂窩電話、尋呼機、個人組織機、移動網際網路設備、POS終端和家用電器等。KVM設計的高級目標是生成儘可能小且完整的Java虛擬機,它需要維護Java核心語言所有的核心方面,並且仍能在資源受限的設備中運行,儘管它只有幾十或幾百千位元組的存儲空間。
KVM設計的目標:
· 小,虛擬機內核所佔用的靜態存儲空間在40~80 KB之間(與編譯選項和目標平台有關);
· 清晰的,具有良好的註釋和高可移植性;
· 模塊化,可定製;
· 在不犧牲其他設計目標的前提下,儘可能的“完整”和“快”。
KVM實現所需的最小內存空間大約是128 KB,包括虛擬機、最小的庫和運行Java應用程序所需的堆空間。一個更加典型的實現是需要總共256 KB內存空間,其中32KB作為應用程序運行時的堆空間,60KB~80KB用於虛擬機本身,剩餘的為類庫保留。由於受到嚴格的內存容量限制,KVM缺乏JVM所提供的完整特性。使用CLDC的開發者在編譯程序之後必須預先採用J2ME開發工具包所提供的一種檢查工具對它們的源代碼進行預校驗。
Sun的KVM參考實現可以在Solaris和Windows兩個平台上進行編譯和測試,這兩個平台都可用於KVM的開發、調試、測試和使用。它們包含了大量的開發工具,並且由於強大的工作站級性能,因而能夠快速地進行KVM的移植和開發。Solaris和Windows版本的KVM作為基本的官方CLDC參考實現,可被用戶移植到特定的設備之上。
由於KVM是一個支持CLDC庫的後台Java虛擬機,因此,CLDC中不支持的性能在KVM中也不支持。這些不支持的性能包括:浮點支持、最終化支持以及設備特定的錯誤管理。除此之外,由於J2ME提供了有限的Java安全模型版本,因此一些可能會造成安全問題的性能也被KVM所刪除,這些性能包括:Java本地介面(JNI),用戶自定義類裝載器,反射、RIM或對象序列化,線程組或Daemon線程,以及弱引用等。
(2)CLDC/CDC
可用的Configuration有兩個:CDC和CLDC設備。CDC設備主要面向有較大內存和較強處理器的移動設備;CLDC設備則主要面相向較小內存和小屏幕、較弱處理器的移動信息設備。同時,CLDC和CDC的大部分功能都繼承自J2SE,每個繼承自J2SE平台的類,不是等價於J2SE相應的類,就是J2SE的子集,而且CLDC和CDC還加入了一些自身特有的特性。
CLDC:這個配置致力於低端的消費類設備。從設備的用途和功能角度看,它針對的設備主要包括個人的、移動的、電池供電的、互聯的信息設備,如手機、PDA和POS機,其特點是無線連接,沒有穩定的電源供應(通常使用電池)、設備資源極少。從設備的硬體功能角度看,它主要針對16bit、32bit,主頻在16MHz以上的處理器,設備的內存比較小,可能小於512 KB。這個配置包括一些新的類,並非全部來自J2SE的API,而是特別為適應小型設備而設計的。
CDC:這個配置致力於高端的消費類產品。從設備的用途和功能角度看,它針對的設備主要包括共享的、互聯的信息設備,如電視機機頂盒、Internet電視和高端的通信設備,其特點是有線連接、電源穩定、設備資源比較受限。從設備的硬體功能角度看,它主要針對32 bit,主頻在75 MHz以上的處理器,內存可能在1~4 MB。這個配置包含了比CLDC更加複雜的Java庫和虛擬機的集合。
(3)MIDP
區分出兩種主要的Configuration之後,J2ME接著定義了Profile的概念。Profile是架構在Configuration之上的規格。之所以有Profile的概念,是為了更明確地區分出各種嵌入式設備上Java程序該如何開發以及它們應該具有哪些功能。因此,Profile之中定義了與特定嵌入式設備非常相關的擴充類函數庫,而Java程序在各種嵌入式設備上的用戶介面該如何呈現就是定義在Profile里的。Profile之中所定義的擴充類函數庫是根據底層Configuration內所定義的核心類函數庫所建立的。
從CLDC所衍生出來的Profile主要有兩種,一種是PDA Profile,大多數用在PDA上;而另外一種是Mobile Information Device Profile(MIDP),這個Profile是針對移動設備所定義的,如尋呼機(Pager)、行動電話等,都是屬於移動設備。i-mode是日本電信(NTT)的子公司DoCoMo在日本市場推出的無線通信服務,相應於MIDP中的MIDlet,i-mode把其專用的J2ME應用程序稱為i-Appli。
另外,我們可以看出Embedded Java與Personal Java沒有包含在兩個Configuration的任何一個底下,但它們還是歸類在J2ME的範疇之中,而且也衍生出了Java的實時版本(Real time Specification for Java)。其實Embedded Java與Personal Java會慢慢被架構在CDC之上的Profile所取代。就Personal Java來說,它的規格與Personal Profile的規格是兼容的。之所以目前還存在Embedded Java與Personal Java這兩個名詞的主要原因在於,市場上已經有大量採用這兩種規格的產品,所以短期內Personal Java仍然會不斷發展,一時間還無法立刻歸類到J2ME的特定Profile之下。
MIDP1.0包含以下7個包,其中前4個是CLDC核心包,后3個是MIDP特有的包。
·java.io;
·java.lang;
·java.util;
·javax.microedition.io;
·javax.microedition.lcdui;
·javax.microedition.midlet;
·javax.microedition.rms。
一個MIDP應用程序稱作MIDlet——MIDP小應用程序,這個概念與J2SE中的Applet十分類似。它們不能單獨運行,都必須運行在特定的運行環境之中,或者說運行在一個容器中。可以把這個容器看作是個大的應用程序,它運行在Java虛擬機之上,但不能完成任何特定的任務,因此需要程序開發者編寫代碼以完成一項工作,這些編寫的程序就稱作小應用程序。這樣設計的目的是為了讓它能在所有的容器中運行,這些容器實現可能不同,但它能運行在多種環境中。容器的作用就是適配小應用程序和它的大運行環境之間的差異。MIDlet中這個容器就是MIDP實現,它以Sun公司發布的CLDC規範和MIDP規範為標準,然後針對設備進行移植,從而提供給所有MIDlet都一樣的容器內部介面。MIDP實現提供了一套機制用來管理MIDlet,如運行、暫停、銷毀等。因此對MIDP小應用程序來說,也應該遵照一個標準,如必須實現一定的介面應用管理軟體才可識別並調用它。
編寫MIDP應用程序的要求就是必須擴展MIDlet類,這個類定義了一些介面,應用 管理軟體可以通過這些介面對MIDlet進行控制。MIDlet類位於javax.microedition.midlet包中,因此,在所有的MIDlet中,都必須引入這個包javax.microedition.midlet.*。

體系結構


J2ME並沒有為移動設備定義一個全新的操作系統或完整的系統軟體棧,而是從滿足消費者和嵌入式市場彈性和定製需求角度出發,採用模塊化、可擴展性設計。J2ME技術這種模塊化和可擴展性是通過一個3層軟體模型來實現的,這個3層軟體模型構建於設備本地操作系統層之上。
(1)主機操作系統層
這一層為移動信息設備的操作系統,通過它可以直接控制硬體設備,實現硬體設備的功能。
在最底層的是移動設備的主機操作系統,目前主要有Symbian、Windows Mobile、Linux和Palm 4大手機操作系統。Symbian公司是由諾基亞、摩托羅拉西門子等幾家大型移動設備製造商共同出資組建的合資公司,專門研發手機操作系統。Symbian操作系統在智能移動終端上擁有大量的應用程序以及強大的通信處理能力,它有一個非常健壯的核心:強大的對象導向系統、企業用標準通信傳輸協議以及完美的Sun Java語言支持。Windows Mobile包括Pocket PC、SmartPhone以及Pocket PC Phone 3大平台體系。此系列操作系統功能強大,具備音頻播放、視頻文件播放、上網衝浪、MSN聊天和電子郵件收發等功能。Windows Mobile是在Windows操作系統上變化而來的,它們的操作界面非常相似,因此,採用此操作系統的手機方便易用。由於Windows Mobile本身對資源的巨大吞噬作用,所以在能耗方面,Windows Mobile系統要明顯遜於其他操作系統。Linux手機操作系統是由計算機Linux操作系統“變化”而來的。Linux操作系統具有穩定、可靠、安全等優點,有強大的網路功能。Linux憑藉其自由、免費、開放源代碼的優勢,已經得到眾多知名廠商的支持。Palm操作系統是由Palm公司自行開發的,並授權給Handspring、索尼和高通等設備廠商。Palm是一種32 bit的嵌入式操作系統,主要運行於移動終端上。這種操作系統是一種更傾向於PDA的操作系統。
(2)Java虛擬機層(JVM)
這一層是針對設備本地操作系統定製的Java虛擬機的實現,支持特定的J2ME配置。Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。JVM以軟體的形式實現了硬體的功能,是硬體的軟體抽象,可以認為,JVM就是J2ME軟體化的處理晶元。由虛擬機直接負責和移動設備的介面,而J2ME應用程序只能和JVM打交道。
(3)配置層(Configuration)
配置層對用戶來說是能見度不高的一層(比較透明)。但是對簡表的實現卻非常重要。它定義了某一類設備所用的Java虛擬機和Java類庫的最小集合,這類設備代表了某一特定水平市場,在某種程度上,配置定義了這一範圍內能應用於所有設備的Java平台功能和類庫的“最小公分母”。
Configuration規範中定義了硬體所必須具備的能力,例如:硬體至少具備多少ROM、RAM,CPU的時鐘周期最少應該是多少,連接網路時頻寬至少要多寬。Configuration規範之中定義了一組低級的API,這代表Java至少必須提供的低級功能,這組低級的API就是核心類庫的子集合。由於消費性電子產品的差異性極大,Sun認為對於不同硬體特性的電子產品,應該有不同的設計規格,因此,Configuration針對硬體的數據處理能力、存儲容量、網路連接能力和用戶輸入輸出設備將這些電子產品區分為不同的類。目前已經定義出來的Configuration有兩種,分別是CDC(Connected Device Configuration)與CLDC(Connected Limited Device Configuration),前者包含的設備對硬體資源的支持較大,例如網路電話、Set-top Box、車用計算機等,後者則可以涵蓋一般的個人移動設備,如手機及PDA等。Configuration除了定義硬體支持程度之外,還定義了對Java語言所支持的程度、對Java Virtual Machine所支持的程度和對核心類庫所支持的程度。
(4)簡表層(Profile)
對用戶和應用開發者來說,簡表層是能見度最高的層。它定義了能夠應用於某一類設備上的API的最小集合,這一類設備代表了一定的垂直市場。簡表都是在某一特定配置基礎之上的實現,針對某一簡表開發的應用程序可移植到任何設備,只要此設備也支持這個簡表。另外,一個設備可以同時支持多個簡表。在J2ME設備中,Java虛擬機的實現和構建於虛擬機之上的配置規範聯繫十分緊密,它們一起代表了某一種類設備的基本能力。而更進一步的設備分類上的區別是通過簡表層所提供的API規定的。為了滿足更多新的、激動人心的應用的需要,簡表可以通過擴充類庫來增強自己的功能。
Profile針對各種不同機器的特性定義了高級API,這些高級API通常都是與其他平台不相關的擴充類庫。這些高級API決定了該種機器上Java程序的撰寫方法,例如移動通信設備(手機、PDA等)上Java程序的撰寫方式,以及能夠調用的API都定義在MIDP(Mobile Information Device Profile)之中。
(5)可選包(Optional Package)
Optional Package是指這是一組和其他規範(或API)沒有任何依存性的類庫,如果廠商願意提供這樣的功能給程序員(通常是因為硬體具有充分的能力可以完成規範之中所制定的功能),就會將這組類庫實現出來,程序員也可以利用這些類庫開發出功能更多的應用程序。

虛擬機


我們知道,任何Java程序都是在JVM中被執行的。那麼對於J2ME來說,情況又是如何呢?CDC仍然使用與J2SE相同的JVM,對於CLDC,由於設備資源受到限制,Sun專門開發了一個新的名叫KVM(K Virtual Machine)的虛擬機。這是個不同於傳統的Java虛擬機:
● 虛擬機本身僅僅需要40-80KB內存;
● 只需要20-40KB動態內存(堆);
● 能夠運行在16位25MHz處理器上。
當然KVM只是一個由Sun實現的符合CLDC規範的Java虛擬機而已,它並不是唯一的,還存在很多類似的虛擬機,你也完全可以自己實現一個這樣的虛擬機,只要它符合CLDC規範就可以。

開發工具


Java開發工具
Java開發工具
開發Java ME程序一般不需要特別的開發工具,開發者只需要裝上Java SDK 及下載免費的 Sun Java Wireless Toolkit 2.xx系列開發包,就可以開始編寫Java ME程式,編譯及測試,此外目前主要的IDE(Eclipse及 NetBeans)都支持 Java ME 的開發,個別的手機開發商如 Nokia、Sony Ericsson、摩托羅拉、Android系統 都有自己的SDK,供開發者再開發出兼容於他們的平台的程序。

應用實例


手機遊戲可以根據遊戲本身的不同,而分成文字類遊戲和圖形類遊戲兩種。
文字類遊戲:
文字類遊戲是以文字交換為遊戲形式的遊戲。這種遊戲一般都是通過玩家按照遊戲本身發給您的手機的提示,來回復相應信息進行的遊戲。舉一個簡單的例子,目前很知名的簡訊遊戲“虛擬寵物”就是典型的文字類遊戲。在遊戲中,遊戲服務商會給您一些簡訊提示,比如服務商可能會給你發送如下簡訊“您的寵物飢餓度:70,饑渴度:20,疲勞度:20,餵食請回復內容為數字‘1’的信息,喂水請回復內容為數字‘2’的信息,休息請回複數字‘3’……”等等,那麼,您回複數字“1”之後,遊戲會給您回一個信息“您的寵物已經餵食完畢,您的寵物的飢餓度變為20”,如此類推,您便可以通過手機簡訊的方法來進行遊戲了。
文字類遊戲主要分為兩種:
a,簡訊遊戲:
就好像“虛擬寵物”那樣。簡訊遊戲是通過玩家和遊戲服務商通過簡訊中的文字的內容來交流,達到進行遊戲的目的的一種文字遊戲。
由於簡訊遊戲的整個遊戲過程都是通過文字來表達,造成簡訊遊戲的娛樂性較差。但是簡訊遊戲卻是兼容性最好的手機遊戲之一。只要您的手機可以發簡訊,您就可以暢快的享受簡訊遊戲給您帶來的快樂了。
b,wap瀏覽器遊戲:
wap是一種手機撥號上網的網路服務。而wap瀏覽器遊戲就好像我們用電腦上網,並通過瀏覽器瀏覽網頁來進行的簡單遊戲一樣,也屬於一種文字遊戲。其進行方法和簡訊遊戲類似,玩家可以根據wap瀏覽器瀏覽到的頁面上的提示,通過選擇各種不同的選項的方法來進行遊戲。wap遊戲也有簡訊遊戲不夠直觀的缺點。
綜觀文字類遊戲,其都有著一個共同的特點,即遊戲是通過文字描述來進行的。遊戲過程中,需要玩家進行過多的想象,使得遊戲相對比較單調。雖然目前已經有了彩信等特殊服務可以讓這類遊戲更加人性化,但是其本質依然無法改變。而且,對於文字類遊戲來說,其不低的價格門檻依舊是制約其發展的一大瓶頸。
圖形類遊戲:
圖形類遊戲更接近我們常說的“電視遊戲”,玩家通過動畫的形式來發展情節進行遊戲。由於遊戲採用了更為直觀且更為精美的畫面直接表現,因此圖形類遊戲的遊戲性和代入感往往較文字類遊戲高。因此廣受玩家們的歡迎。
圖形類遊戲主要分為:
a,嵌入式遊戲:
嵌入式遊戲是一種將遊戲程序預先固化在手機的晶元中的遊戲。由於這種遊戲的所有數據都是預先固化在手機晶元中的,因此這種遊戲無法進行任何修改。也就是說,您不能更換其它的遊戲,只能玩您的手機中已經存在的遊戲,且您也不能將它們刪除。
諾基亞早期手機中的“貪吃蛇1.2”就是嵌入式遊戲的典型例子。
b,可變安裝式遊戲:
用戶可以通過GPRS,3G網路或者電腦等方式,下載Java ME手機遊戲安裝到自己的手機里,這是現在比較流行的趨勢,使自己的手機擁有更多的遊戲應用,百玩不厭。
java是一種程序語言,具體是什麼程序語言我們完全沒有必要知道。作為遊戲一族,我們只需要知道兩件事:
第一,您的手機是否支持java,要了解這一點您可以查閱您的手機的說明書,或者直接詢問經銷商。
第二,您挑選的java遊戲是否支持您的手機,要了解這一點,您可以參閱“為什麼手機遊戲也會有兼容性問題”以及“如何從遊戲下載符合您的手機型號的手機遊戲”部分。
c,brew遊戲
我們也不用知道brew是什麼東西,要使用brew,您只需要了解您的手機是否支持它就可以了。目前,只有cdma的手機才支持brew,但是同時,cdma也支持java,於是為了減小成本,一般的開發商還是願意選擇基於java的遊戲進行開發。因此,brew支持的遊戲還不是很多。
d,uni-java遊戲
uni-java是中國聯通剛剛為其手機準備的一個新的通用開發平台,目前還處於開發階段,還沒有基於uni-java的手機推出。但是在不久的將來,uni-java必將是聯通的一把利器。

優化內存


內存佔用主要有兩種,即程序和資源。

程序

類會被編譯成class位元組碼文件隨MIDlet的啟動載入進內存,而且是一次性全部加入。也就是說MIDlet里類個數越多、單個類程序越長、類內字元串常量及數據越多,編譯后的class文件就越大,載入后佔用的內存也越多。我經常在MIDlet類的構造函數里用Runtime方法來查看MIDlet啟動后整個程序佔用內存量。
優化方法:
⒈將MIDlet程序寫成兩個類來減少內存佔用量,但是以犧牲Java的OOP特性為代價的。在程序比較大時這種弊端將尤為顯見。而且CoCoMo曾經遇到過單個類過大,載入時間過長而違反百寶箱有關Logo 6秒時間限制的情形。
⒉盡量編寫優雅的代碼,減少函數數量,在程序發布時去掉try catch,最大限度的減少程序行數,這一般都是在老40上沒有辦法的辦法,現在CoCoMo已經不靠這個來省內存了。
⒊將數據及字元串寫進文件,在用時方載入內存,不用時設為null。
⒋I/O操作getClass().getResourceAsStream(file);、資料庫操做RecordStore.openRecordStore(name,true);、聲音創建Manager.createPlayer();、圖像創建Image.createImage(file);會在短時間內佔用大量內存且過後釋放,如果MIDlet程序內存剩餘量不足則會在這些函數頻繁調用時發生內存溢出,產生所謂的內存峰值,尤其在老40上比較普遍。當再次與OutOfMemoryError碰面時,多用Runtime查找內存峰值發生位置並盡量將這些語句分開調用,並靈活運用System.gc()來及時回收。

資源

圖片:是佔用內存的大戶,尤其是手機遊戲圖片資源眾多。對圖片資源在內存中佔用量的計算成為J2ME遊戲開發者的經常性工作,CoCoMo來解釋一下如何計算圖片在內存中的佔用量:
內存佔用量=寬*高*像素位元組數,其中像素位元組數因機型而異。
例如一張64*64的圖片在7210上的內存佔用量=64*64*1.5=6144(位元組)=6K、在S60上的內存佔用量=64*64*2=8192(位元組)=8K。像素位元組數因機型而異,例如7210是4096色機型,也就是說用12位來表示一個像素,所以乘上1.5,而S60是65536色的機型,用16位來表示一個像素,所以乘上2。
優化方法:
認為壓縮圖片可以節省內存,這種想法是錯誤的。根據上面的解釋圖片載入內存后只和寬高有關係,和圖片數據量大小沒有任何關係,壓縮圖片只能減少jar大小而不能減少內存佔用量。
⒈靜態法:減小圖片大小,寬高小了結果當然小了。根據這個思路出現了動畫編輯器之類的工具,像gameloft的波斯王子,人物被分割后使人體的部位可以重用,各部位緊湊放置都是為了減少圖片大小,充分利用圖片中的每一寸空間。
⒉動態法:減少同一時刻載入內存的圖片數。CoCoMo曾經在火影武士項目中遇到過這種情況,當時有6種怪物,如果同時載入內存在老40上肯定爆掉了,但是每關只出現兩到三種怪物,所以每一關只需要載入該關出現的怪物圖片即可。現在想起來當時做這個項目在老40上溢出頻出,真把我搞死了。
聲音:聲音也是比較耗用內存的資源,聲音中音軌所佔的byte會轉化成位元組流被載入到內存中。因而減少音軌所佔byte即可減少內存耗用量。目前gameloft的做法是用聲音轉化工具將mid轉化為ott,然後變為ByteArrayInputStream位元組流來創建Player。

數字簽名


得到一個證書後就可以對Java ME的jad文件進行簽名。這裡有一些與簽名相關的需要注意的一些問題。
⒈想要安裝簽過名的軟體,就必須通過jad來安裝。
我們知道Java ME程序生成後會有jad和jar兩個文件,一般情況下我們只需要安裝jar文件就可以了。例如我會將jar文件通過藍牙傳到手機上,再進行安裝。但如果想通過手動安裝簽過名的文件,就要通過jad來安裝,而且要確保jad和jar文件是在相同目錄下。我的做法是通過數據線將兩個文件拷入手機的內存或存儲卡上,然後通過jad來安裝,這樣安裝好的軟體就是簽過名的軟體了。不會再有總是很煩人的詢問用戶是否允許操作的提示信息。
但就我看過的手機看來,應該是不同的手機有不同的表現。例如索愛的手機關於提示仍然是需要用戶自己設置的。諾基亞也是。只是諾基亞的在使用非簽名軟體時用戶無法設置為“總是允許”或“只提示一次”。而簽了名的就可以設置了。
⒉編程人員需要注意,像很多功能在未簽名前是可以使用的,例如gps,網路連接,文件讀寫等。
⒊簽過名的軟體有什麼好處。
簽名就是告訴我們這個軟體是可信的,對用戶最直接的感受就是聯網或訪問手機文件的時候,收發簡訊,彩信,藍牙等,但簽名后這些功能就不可用了。
這就是jad中MIDlet-Permissions屬性的問題。當未簽名時對這個屬性的要求並不嚴格,但簽名后就一定要注意。必須把所要使用到的許可權加入進去,否則這個功能就不能使用了。