這是我去年給朋友們寫的文章,希望對你能夠有所幫助
開發手機游戲的一點心得
應用開發環境的選擇和配置
2003年三月份,我剛開始接觸了手機游戲的開發。開發手機上的游戲程序,最初僅僅只是出於興趣愛好,利用業余時間自己陸陸續續的也寫了一些Code,得到了一些經驗,本來是想敝帚自珍的,但是朋友的鼓勵,使我決定把自己的一點點心得體會寫出來,藉以告慰我在學習中所陣亡的千千萬萬腦細胞,也為和我一樣在黑暗的艱難摸索人們中提供一些微不足道的幫助吧。
由於我本人對於手機應用程序的開發也是初學,如果在文章中出現什麼問題,還望各位讀者海涵。很多人都在網上問我,開發手機應用程序是不是一定要買一個真正的手機平台,我的看法是剛開始學習的時候不一定要買手機,先在網上多看多問,把平台的開發環境配置好,在模擬器上先單兵操練,不過我建議如果你真的需要把你的作品產品化的時候,最好配備一個真實的手機平台用來測試,因為在模擬器的運行環境中用很多的運行效果和真實的設備環境還是有很大的出入,在模擬器平台上運行得很好的程序未必在真實的設備上就OK,更何況你也一定跟我一樣很期盼能夠隨時隨地地拿出手機Show一把自己的程序。
如何選擇開發的工具也是許多人在准備學習前奔走相問的,不過這個也實在不好回答,在當前主流的手機開發平台上基本上是戰國時代,諸侯們紛紛你方歌罷我登場,各有各的好處,各有各的弊端,僅我所知道的,當前智能手機的操作系統主要為微軟的SmartPhone(這是基於WinCE平台的),SymBian(這是為諾基亞,索愛,西門子等各大手機廠商所支持的)還有Brew(這是高通公司的)等,下面我就單從程序人員的角度聊一聊如何選擇這幾種開發平台。
如果你是一個優秀的Windows程序設計人員,而且對於MS情有獨鐘,OK,你可以試一試基於WinCE平台的SmartPhone的開發,快到微軟的網站上下載他free的eMbedded Visual C++ 4.0和SmartPhone的模擬器,安裝好以後,你就可以在熟悉的Visual C++的環境下工作了,甚至喜歡C#的同志們可以選用Visual Studio .Net 2003 並且在這個環境下開始你的工作,一切都是那麼的熟悉。至於缺點麼,恩,就是啟動和運行模擬器太慢了,調試一個程序你還是需要付出一些耐心的,呵呵。
如果你和我一樣手機都是Nokia 60系列的,那就可以考慮學習Symbian了,Symbian是一家由各主要無線通信技術公司持股的軟件公司,它提供一個智能化的手機平台SymBianOS,主要有諾基亞,西門子,索愛等,他是微軟在智能手機平台的最大競爭者。
Symbain同時支持C++開發和Java開發。不過學習SymBian上面C++的開發也是需要一個艱難痛苦的歷程,你可以先在Nokia的開發人員站點上下載Nokia 相關與Symbain的開發工具nS60_sdk系列,安裝後可以集成到VC6的環境中,在安裝的時候也是有幾項需要特別注意的(安裝的問題,在論壇上詢問的也特別多)。
首先,你要保證你的操作系統是Windows2000 + SP2 或者以上的配置;
第二,你需要在你的VC6上安裝SP3以上的補丁,(呵呵,我裝的是SP5大概有幾百兆吧)
第三,安裝nS60_sdk的時候要考慮裝在C盤上,這個麼在網上說法不一,不過如果你和我一樣剛剛安裝的時候有過失敗的紀錄,那麼病急亂投醫,也會把它安裝在C盤的;
第四,也是最重要的一定要保證你的 nS60_sdk的統一盤符上也安裝了Perl和JDK1.3,因為nS60_sdk1.2並沒有帶著兩個東東,所以我安裝的是nS60_sdk1.0
最後,一定要注意特別保證你生成應用程序的路徑盤符要和nS60_sdk1.0一樣,(在我這裡當然也就是C盤了)也要保證系統的環境變量Path中存在這幾個工具的路徑。
當這些都配置好了,你就可以拷貝AvkonAppWiz.awx 和 AvkonAppWiz.hlp 文件到 Visual C++ template (c:\Program Files\Microsoft Visual Studio\Common\MsDev98\Template)目錄下,然後啟動你的VC6,按照向導選擇Nokia 60 SDK,然後一步一步地走下去,點擊確定就可以生成你的應用程序框架了,夷,不好,怎麼看到了 “c:\SymBian\6.1\Series60\epoc32\build\test\group\test\wins\test.dsw The specifIEd project could not be inserted into the current workspace.”這個錯誤,千萬別緊張,很多人都碰到過,回頭再看看有什麼地方設置的不對,特別要注意環境路徑的配置呀。
好了,接下去就可以正式進入學習開發了,Nokia 60 SDK自帶的幫助和實例也許會對你有很好的幫助的。 據說國外有高手可以把這個SDK安裝配置在VS.Net上開發,呵呵,真是厲害,至少我還沒有成功過。
以上為Nokia60系列的開發步驟,如果你需要開發索愛的P800(這也是我夢寐以求的一款好機子),可以下載他的工具UIQ來開發。
Brew是我一個好朋友的開發利器,它是高通公司推出的無線二進制運行開發操作環境,也必須要在高通的特定的硬件平台上運行。在朋友的幫助下,我在高通的網站下載了他的BREW_SDK_20zn ,他的開發環境也是基於VC6的(呵呵,微軟一定很後悔為什麼把開發工具做的那麼通用,搞得對手們紛紛拿來就用),在進入向導生成代碼框架時你會發現Brew突然需要你填入一個ClassID,這是為了保證在機器中的注冊信息唯一,如果你做的是測試程序的話,你可以利用Brew SDK自帶的工具MIF編輯器來生成相應的ClassID,並運行在模擬器上。
但是如果你需要運行在實際的平台設備上,你就必須要注冊到高通的網站上,成為他的開發者,當然還要每年都向他繳納一定的會費(是$),然後才可以從他的站點上得到實際的ClassID,並且在硬件環境上測試,否則你就只能通過MIF編輯器生成本地ClassID在模擬器上跑著玩了,真是生財有道呀。
Brew的開發模式基本上與Symbain很類似,都是在VC的開發環境中編譯代碼,生成一個完整動態庫,然後通過運行模擬器的可執行程序加載動態庫,就可以調試你做好應用程序邏輯了,如果調試通過,就可以通過相關的工具再編譯成底層硬件設備可執行的二進制代碼,譬如ARM等,通過打包下載就可以運行在你的手機上。
OK,至於他們兩個的不同之處麼,唔… Brew是純粹的C語言開發的,它通過一套獨特的機制模擬了類似於COM的體系框架;而SymBian呢,則是完全的c++,他自身在內部實現了一整套的類庫體系(非常類似於MFC)來開發實際在Symbain上跑的應用程序。他們的類庫為了各自適應自己的平台所提供的功能,還是有相當的不同。
其實,Symbain和Brew作為嵌入式系統開發的體系結構,都是依托於C++思想建立的,在他們的應用程序框架中能看到許多C++思想的影響烙印。譬如,我在學習Brew的時候腦海中一直都有一個COM的原型(他的很多組件的加載和運行都是非常像的),而在學習SymBian的對象內存管理機制的時候,也看出了它在對於利用C++的內部機制力圖實現一個類似於Java一樣能對內存自動管理、分配、清除的模型,用來保證它的內存管理絕對安全。
如果你和我一樣都是從菜鳥學起的話,建議你可以嘗試一下Java開發。手機上的Java平台是Java 2平台的移動版(Java 2 Platform, Mobile Edition,J2ME™)。它專門為諸如蜂窩電話、傳呼機和個人記事本等小型移動設備設計。J2ME實現由以下部分組成: 一個核心的Java語言實現,包括一個專門為小型設備定制的虛擬機(virtual Machine,VM)以及一套支持在該設備上進行系統級編程的最精簡的工具包和類。這被稱為一個配置。
另有一套能為應用開發伙伴提供實用應用程序接口(API)的高級工具包(例如:用戶界面組件、高級聲音播放功能等)。這被稱為一個描述。
我們通常支持Java的手機實現采用有限連接設備配置(the Connected Limited Device Configuration ,CLDC)和移動信息設備描述(Mobile Information Device Profile MIDP)
我們平時也稱呼我們手機上開發的Java程序叫做Midlet(因為是采用MIDP開發出來的麼,他也是我們系統運行的一個最主要的類)或者更親切的稱呼他KJava.
至於他的好處麼,en, 當然是SUN說的“一次編譯,到處運行”優勢了。也就是說你不用再針對特定的設備編程,而只需要在PC的模擬器中測試編譯一次,就可以運行在任何支持MIDP的手機平台上了。但優勢也是劣勢,如果想要運行在通用的平台上,就要有一些安全方面的考慮。
Java放棄了很多東西,其中自然就包括了很多涉及硬件底層的功能。譬如電話、電話簿操作、短信功能以及一些其他的功能。所以很多人也在笑話“KJava像個玩具,只能做游戲”。
為了彌補這個缺憾,各個廠商先後推出了自己OEM的API包來支持很多底層功能,當然其中調用了許多Java Native方法,這在一定程度上破壞了Java隨處運行的特性了,可謂“熊掌魚翅不可兼得也”。Sun自己也在做出努力,推出MIDP2.0,補充了一些API,這也正是我們所期盼的。當然,J2ME最為突出的優點就是他的簡單,只要稍微有些Java語言基礎的人都可以很快地掌握它。只需配置好環境,就可以生成應用。這也大大的降低了手機開發的門檻。試問,還有什麼比看到自己的程序運行在手機上更能帶給我們激情的呢?呵呵。
我的手機開發也正是從J2ME開始的,下面就讓我具體的介紹一下J2ME開發手機游戲的步驟吧。
首先,就是配置J2ME的開發環境,先從Sun的網站中可以下載到j2sdk(簡稱JDK),1.3或1.4的版本都可以,還有J2ME_wireless_toolkit1.4(簡稱WTK)。先按要求裝好JDK,然後再按照規定一步一步的安裝WTK,在安裝的過程中他會自動配置JDK的路徑和開發的環境。現在在Sun的網站上同時提供了WTK1.4和WTK2.0這兩個版本,WTK2.0多提供了幾個很有用的開發包(主要是加密,游戲和媒體控制),但是可惜的是現在支持WTK2.0的手機還是很少,所以我安裝的還是WTK1.4。
在安裝好這些開發環境這後,你就可以進入菜單直接啟動KtoolBar了,這是一個對所產生的Midlet編譯、運行、打包的集成環境,可以利用它來進行新建項目、打開項目、選擇目標模擬器編譯、運行並打包等操作。這是一個可視化的環境。進入安裝後的目錄,你就可以看到以下幾個主要的文件夾:
appdb:這個文件夾主要是用來存放系統所需要的圖片和一些數據庫文件的。
aPPS: 這是系統的工程目錄,也是最重要的,裡面存放的都是具體的應用程序。其中包括了系統自帶的和你創建的應用程序的原文件(*.Java)、編譯後的文件(*.class)、打好的壓縮包、相關的配置文件(*.jar,*.jad)以及各種資源等。
bin: 這是系統工作目錄,裡面是系統的各種工具,是WTK系統運行的核心。
docs: 裡面放置了詳細的說明文件,用戶手冊以及API,是學習和開發人員的必讀之物。
lib: 放置CLDC/MIDP開發包的地方。
wtklib: 存放了一些WTK需要用到的資源,其中最重要的是devices目錄,主要用來存放模擬器配置。在這裡,你可以配置你的目標設備的模擬器。
下面讓我們打開aPPS目錄,進入一個工程目錄內,來看看幾個有用處的文件夾:
bin : 程序打包後,壓縮包(*.jar)和配置簡表(*.jad) 的存放路徑。
Classes : 編譯後,類文件(*.class)的存放路徑。
Res : 程序的資源文件,主要是圖片(*.png)。
Src : 程序源代碼所存放的地方(*.Java)
了解了這些,我們就可以創建我們自己的應用程序了,首先,在KtoolBar中,創建一個新的項目,我們需要填寫項目的名稱和Midlet名程(真是一個奇怪的東西,Sun在制定Java規范的時候總是喜歡將程序片起名為let,譬如Applet、Servelet,還有Spoilet等,其實看到這些,有編寫java經驗的老手都會明白Midlet的結構了,基本上和Applet沒有多大的區別)在接下去的Setting頁面中選擇默認設置就可以了,然後你會發現在aPPS的目錄下多了一個應用程序的目錄,現在就可以在其src目錄下創建你的應用程序 Java源文件了。
(填寫創建一個工程必要的工程名稱和主類Midlet的名稱)
MIDP的程序結構和Applet非常相似,他的主文件名稱叫做Midlet,是從Javax.microedition.midlet 包下派生出來的,是MIDP的主要擴展包之一,其中定義了整個體系的結構。
javax.microedition.lcdui是一個封裝了各種界面控件的包,提供了MIDP在用戶接口方面的各種支持。javax.microedition.rms主要提供了數據庫的接口而javax.microedition.io則是提供網絡支持的重要途徑。這是MIDP所區別於Java的三個主要的擴充包。還有java.io(提供輸入輸出流的支持),java.lang(提供語言環境的支持),java.util(提供一些重要的工具支持)這些都是從Java中繼承下來的核心開發包。
具體的程序編寫過程還請參考WTK自帶的幫助和API應用手冊。
在scr目錄下的應用程序編輯好以後,在WTK選擇編譯,就可以編譯你的應用程序了,編譯的步驟和結果會顯示在下面的信息框中,如果編譯順利通過的話,就可以點擊運行按鈕來啟動模擬器進而運行你的應用程序了。
OK,一切都是那麼的簡單。模擬器是通過devices列表框來選擇的。wtklib\devices目錄下有幾種系統自帶的模擬器,我們可以通過選擇模擬器來配置我們程序實際需要的運行環境。在一切都順利完成之後,就可以將應用程序打包了,打包的時候可以先配置簡檔文件,在應用程序中點擊Setting就可以配置了,具體的配置方法請參考用戶指南,生成的JAD文件實際上是一份文本的注冊文件,在應用程序被網絡無線用戶下載的時候起到了一個說明文件的作用,在一切配置好以後,點擊project\packag\Create Package的菜單項就可以編譯打包了。
生成的壓縮包(*.jar)和配置文件(*.jad)被放置在aPPS\應用程序名稱\bin目錄下。把壓縮包上傳到實際的設備中就可以實機操作了。
綜上所述,WTK僅僅提供了一個可視化的工程管理、編譯、運行和打包的工具,卻沒有提供編輯源代碼的環境,這樣你就有很大的自由度去選擇源碼編輯器了。我使用的編輯工具是UEdit,它提供給我一個非常簡單的編輯和管理源代碼的工作環境,並擁有強大的編輯功能,給我的學習開發帶來了很多方便。當然你也可以選用IBM的Eclipse(這也是一個非常好的編輯源代碼的免費工具,而且是開源的,我個人也非常的喜歡),或者Sun的SunOne for Mobile 以及Broland的Jbuilder 一切都可以根據自己的愛好去選擇。
有些人問起了關於“混淆”的問題。由於Java程序是半解釋的,他的目標文件是字節碼,也就是*.class的形式,導致了他很容易被反編譯(我見過很多反編譯的工具,做的都相當的漂亮)。混淆就是打亂程序中所有的變量名稱和函數名稱,讓其他人進行反編譯後無法看懂你的源文件,這是一個不可逆的過程,由於修改了變量函數的名稱(簡單的說就是把你一個很長的名字縮小到一個字母而已,反正機器又不用去記),在編譯的時候混淆也能夠起到一些壓縮的作用。哦,混淆是需要特定工具包來實現的。
retroguard可以用在WTK1.4上面,用法非常簡單,只需要把解壓後的retroguard.jar文件放到WTK\bin目錄下就可以了,在打包的時候僅需要選擇下面一項打成混淆包就可以了。但是還有一些小問題,這個混淆包似乎不能混淆一些擴充的包(比如Nokia的擴充API包,這個在下文中會講到的),這時你就可以考慮使用另一個工具proguard(這個工具WTK1.4並不提供支持)了,這個工具的使用還是比較麻煩的,我在一篇文章中看到,它必須要有一個配置文件,還需要制定特定的目錄,然後才能在命令行中啟動,呵呵,其實還有一種簡單的方法,那就是可以把他集成到WTK2.0中去,WTK2.0提供了對他的支持,安裝的方法和retroguard一模一樣。他就可以完成對一些特殊的擴充包進行混淆了。
最後,我在聊一下如何加入第三方提供的包和模擬器,就以Nokia為例,Nokia的官方技術網站中提供了很多的針對與不同設備手機的開發包(主要包括Nokia 60設備,Nokia 40設備,Nokia 7210,Nokia 3300等)。要下載這些包,你必須先成為諾基亞網站的正式用戶,然後可以得到用戶名和密碼.在安裝這些開發包之前,必須先安裝一個叫做nds_jme的工具包,它主要是提供了不同的Nokia設備SDK之間的管理和一些特殊的工具,例如音頻代碼工具和模擬器的管理工具。采用第三方工具的好處就在於它提供了一些依賴於特定硬件的擴充包,可以讓我們開發很多底層所提供的功能。
在安裝nds_jme的工具包後,就可以安裝nS60_jme_sdk的60系統的開發包了,安裝的路徑可以選擇在WTK\wtklib\devices下,這樣就可以和你的WTK系統整合起來了。啟動WTK的KtoolBar後,你可以從devices下拉框中看到60系統的設備,這時就可以啟動60設備來調試你的應用程序了。有一點比較關鍵,就是你每次必須要先把MIDP應用程序打成壓縮包後再點擊運行來啟動模擬器進行應用程序的調試。好了,到此為止,您應該已經基本了解到手機開發平台的選擇方法和J2ME的基本配置過程。我們下一部分將介紹如何逐步由策劃、設計到開發你的第一個手機游戲的全過程了。