我的Symbian編程回憶錄
序言:記錄一個新平臺的學(xué)習(xí)過程。
1、大概是去年公司9周年年慶的前一周花了1330元買了Nokia5230這款智能手機(jī),其搭載的是ARM11的CPU和Symbian第五版的OS,是個很典型的嵌入式開發(fā)平臺,對于從事軟件行業(yè)的我,自然少不了在這個平臺上玩玩應(yīng)用開發(fā)了,于是就有了這部筆記。
2011-11-07 01:18:07 [雖然這個系統(tǒng)已經(jīng)有點過氣了,但是我還是選擇學(xué)習(xí)它,理由很簡單 —— 因為擁有,所以珍惜……]
2、既然要開發(fā)應(yīng)用,自然首先要去了解這個平臺有哪些開發(fā)方式了,在Nokia的官網(wǎng)了解到,開發(fā)方式還是挺多的,有如下方式:Widget、J2ME、QtSDK、SymbianSDK。通過簡單的了解,知道了Widget就是Web開發(fā)(html+javascript的方式),通過這種方式做了個“魔方計時器”,結(jié)果發(fā)現(xiàn)計時非常的不精確,況且我本來就不喜歡Web開發(fā),于是很自然的將此方法排除,但是不得不說,這是最簡單的一種開發(fā)方式。然后就是J2ME,這就是大名鼎鼎的Java了,我在大學(xué)就開始玩這個了,那時就寫了個“MD5計算器”,在舍友的手機(jī)上也跑起來了,感覺挺好玩的,所以我自然一開始選擇了這種方式,也就是擴(kuò)展了大學(xué)時寫的那個程序,加入了幾個其它的Hash算法,也就改名叫“Hash計算器”了,后來把畫圖、線程等技術(shù)也都簡單弄通了,但是接下來想玩玩手機(jī)的重力感應(yīng)(這些硬件擴(kuò)展功能其實才是移動開發(fā)最好玩的東東)等功能時,發(fā)現(xiàn)Java不怎么好用了,似乎對這些外設(shè)支持得不是很好,而且Java也不是我最喜歡的語言,我最喜歡的語言是C/C++,于是乎,開始了解上面提到的后面那兩種開發(fā)方式了,一開始非常搞不清它們的關(guān)系,隨著時間的流逝,隨著工作中技術(shù)的進(jìn)展(這段時間在工作中技術(shù)可謂突飛猛進(jìn)啊,了解了很多計算機(jī)底層的東西),終于了解并理解了這兩種方式的區(qū)別,QtSDK:Qt是一種應(yīng)用程序框架,它定義了一整套的供應(yīng)用開發(fā)的API,并且在很多平臺上實現(xiàn)了(例如:Windows、Linux、Mac、Symbian等等),可以這樣理解,其實Qt很類似Windows上的MFC,MFC是通過調(diào)用Win32SDK完成各種功能的,同理,在Symbian上,Qt是通過SymbianSDK來實現(xiàn)各種功能的,所以可以這樣理解,Qt只是在SymbianSDK的基礎(chǔ)上封裝了一層,前面提到過,Qt在很多平臺都有實現(xiàn),所以用Qt寫出來的程序可以在很多平臺上運(yùn)行,只要編譯時選擇相應(yīng)的平臺就可以了,我嘗試了Qt在Symbian、Windows和Linux平臺上的表現(xiàn),很不錯,尤其是在Linux上實現(xiàn)了UI編程,這可是我第一次在Linux上寫UI程序啊。好了,不扯得太遠(yuǎn)了,回到正題,開始選擇Qt,郁悶即將開始,我那時下載的是NokiaQt4.6版本的,下載好,安裝好,首先開始瀏覽一下里面的開發(fā)文檔,然后被里面各種各樣的目錄內(nèi)容弄得云里霧里的,當(dāng)時不是很明白為什么里面好像又有個SymbianSDK的目錄,不管了,先編個程序試試,打開QtCreate,玩玩各種UI控件,拖拖拽拽,跟MFC開發(fā)Windows程序差不多,很快HelloWorld級別的東東就出來了,然后開始玩Sensor(傳感器,也就是重力感應(yīng)、距離感應(yīng)之類的外設(shè)了),很郁悶,一開始就發(fā)現(xiàn)編譯不過,連Qt自帶的例子都編譯不過,然后開始試著全部在命令行下完成各種編譯操作的,其中也碰到了很多問題,不過最后還是編譯過了,但是又運(yùn)行不了,哦,還要安裝qt_installer.sis和qtmobility.sis(這個東西很類似DirectX(玩過CS、魔獸爭霸嗎?玩過的話就肯定裝過它了)、Java虛擬機(jī)等等這類環(huán)境組建,專業(yè)點的說法就叫‘運(yùn)行時環(huán)境’,runtime這個英文經(jīng)常見吧,就是它了),這個爛東西差不多11M,而且還必須裝在C盤,害我不得不卸載了一些其它的軟件,并且對于我的手機(jī)來說還真是太占空間了,不過最后總算正確的完成了讀取手機(jī)剩余電量的小功能,然后就是距離感應(yīng)器了(這個東東我把它和環(huán)境光感應(yīng)器搞混了,一直以為是環(huán)境光感應(yīng)器,結(jié)果搞了好久都沒有成功,最后還好意識到了這點,才最終搞定),玩通這個后其它的什么重力感應(yīng)器的都順帶搞定了,這時寫了第一個程序“Sensor測試工具”,后來又寫了“水平儀”、“俄羅斯方塊”(這個是半成品,沒有最終完成),這段時間搞定了Qt里的線程、畫圖、文件操作,數(shù)據(jù)結(jié)構(gòu)之類的各種技術(shù),后來還移植了tinyxml、Box2D這些開源庫到手機(jī)上簡單玩玩。隨著時間的過去和自身的成長,發(fā)現(xiàn)Qt也有不好的地方,首先感覺就是臃腫,一個Qt運(yùn)行時庫就很占地方了,其次UI不是很好控制,其中我在玩菜單欄時,里面有個選項我是怎么也去不掉,灰常郁悶,后來讓我徹底對Qt失望的就是更新了NokiaQt4.7,一個超級大的庫,1.77G啊,下了很久,也裝了很久,運(yùn)行起來也感覺比較卡,最后發(fā)現(xiàn)跟4.6還不兼容,而且不知怎么搞的,居然編譯不出sisx文件,xx的,懶得跟它玩了,早知道不升級還好,真是讓人抓狂,那一刻,我徹底厭倦了NokiaQt??偨Y(jié)一下前面這3種開發(fā)讓我最后放棄的原因:【1】、Widget——簡陋,就像個破草屋,很簡單也很簡陋?!?】、Java——功能弱,估計是我沒有使用Nokia官方的JavaSDK開發(fā)包(注:我是用Wireless Toolkit 2.5.2的,還是大學(xué)時下載的哦,那時Sun還沒有被收購……)的緣故吧,唉,不過也懶得裝了?!?】、Qt——不成熟,運(yùn)行時庫比較笨重(至少在Symbian平臺上,我的感覺是這樣的)。最后我選擇了SymbianSDK配合Carbide.c++這樣的黃金搭檔,這個開發(fā)方式是最難的,但是確是最強(qiáng)大的,相當(dāng)于在Windows上直接使用Win32SDK來開發(fā)應(yīng)用一樣,雖然低效些,但是強(qiáng)大。個人感覺,開發(fā)一個平臺的應(yīng)用,還是本地代碼王道,正如百度更懂中文、英特爾更懂奔騰這樣的道理一樣。好了,接下來的日子里,才是真正的開始玩Symbian開發(fā)了。
2011-11-07 21:09:29 [享受編程的樂趣,讓生活更美好]
3、SymbianSDK與Carbide.c++的環(huán)境還是很容易搭建的,但是搭建好后,第一個程序就沒有編譯通過,后來找到原因是ActivePerl的版本不對,我裝的版本過高了!原來Symbian的開發(fā)文檔里面就有明確說明對版本是有要求的,具體的就是:ActivePerl-5.6.1.635MSWin32-x86.msi,最后我通過QQ旋風(fēng)在ftp://ftp.activestate.com/ActivePerl/Windows/5.6/ActivePerl-5.6.1.635-MSWin32-x86.msi把安裝包下載了下來,安裝后編譯順利通過。好了,那么接下來就可以面對一個全新的系統(tǒng),從零開始了,我第一個想到的就是要建立調(diào)試手段,很自然的想法就是讓程序?qū)ψ约旱牟僮饔兴硎荆鐝棾鰧υ捒?,在界面輸出文字什么的等等,要打印信息,很自然的就要用到字符串這種基本類型,結(jié)果也著實折騰了一番,在那一堆的描述符和類中轉(zhuǎn)來轉(zhuǎn)去,最后還是忍不住百度谷歌了(本來想完全通過自己看文檔手冊搞定了,苦于求進(jìn)展心切,還是搜索吧),問題自然是很簡單的解決了,最后發(fā)現(xiàn)TBuf就很好用了,與C++中的string類型比較類似了,而彈出信息框這個功能在IDE生成的實例工程中就有,所以到這里,簡單的調(diào)試手段就有了。接下來看代碼,把代碼大致的框架和相關(guān)文件作用了解后,像Help文檔就知道怎么改了,當(dāng)然,一開始也不知道,也是網(wǎng)上搜索的(真失敗呀,我老是在作弊,呵呵),然后菜單欄里的菜單項則是照葫蘆畫瓢的就知道怎么擴(kuò)展了,之后很快就把GUI引擎玩通過了(這其中有把畫直線的操作放在錯誤的函數(shù)里導(dǎo)致程序退出的問題,后來才想到,具體的繪圖操作必須放在特定的地方,其它函數(shù)只能調(diào)用類似‘刷新’操作的函數(shù)),可以在手機(jī)的屏幕上畫畫了,再接著顯示字符串到屏幕上也搞定了(一開始也掛了,后來網(wǎng)上查到,是要設(shè)置字體類型,xx的,居然沒有默認(rèn)的),再接著把觸摸屏幕的消息也捕獲到了(這其中拖拽消息一開始沒有捕獲到,后來發(fā)現(xiàn)是要使能才有的),至此,先玩到一段落先。[!--empirenews.page--]
2011-11-08 23:59:21 [體驗一個全新平臺的開發(fā),從新開始認(rèn)知計算機(jī)編程]
4、好久沒有寫筆記了,中間因為工作的關(guān)系停止了一段時間,不過最近又開始繼續(xù)玩了,最近弄清楚了以下幾大塊的概念:“異常退出(leave)”、“清除棧(CleanupStack)”、“兩階段構(gòu)造(ConstructL())”、“Symbian的命名規(guī)則”。搞懂這些之后再看SDK中的那些Demo就沒有那么郁悶了,目前的進(jìn)度是搞定了內(nèi)存位圖(即:實現(xiàn)了雙緩沖繪圖機(jī)制)以及Sensor(傳感器)編程,至少把距離感應(yīng)器玩通了,其它的感應(yīng)器也類似的了,基本沒有什么問題了。
2012-01-21 21:11:47 [感受Symbian,學(xué)習(xí)一個OS的思想]
5、半年沒有更新這部筆記了,看來堅持確實是件難事,我一向就不喜歡寫日記,寫寫隨記還行。半年時間,對于Symbian編程我又進(jìn)步了不少,首先是年后剛開始上班,不是太忙,業(yè)余時間里就把印象中童年時期第一個玩到的游戲(俄羅斯方塊)給實現(xiàn)了,當(dāng)然,也可能是紅白機(jī)的超級瑪麗,反正是記不太清楚了,不過至少我清楚的記得我擁有的第一臺游戲機(jī)就是俄羅斯方塊,這個俄羅斯方塊我首先是在Windows下把核心部分架構(gòu)并實現(xiàn)了,也可以稱為“引擎”吧,然后也在Windows上基于MFC寫了個Demo,把核心部分調(diào)通測通,接著就往Symbian上移植了,其中用到的技術(shù)主要有:屏幕繪圖、內(nèi)存位圖、傳感器、定時器、中文、程序圖標(biāo)以及一些極其簡單的UI(主要就是菜單選項),最后還有操作手機(jī)的震動器,消除四行或速度提升時會震動提示,增加用戶體驗而已,呵呵。大概斷斷續(xù)續(xù)寫了兩個多月這樣吧,期間包括一些簡單的內(nèi)測,然后沒有什么問題也就在互聯(lián)網(wǎng)上分享出來了(‘官方’地址:http://blog.csdn.net/leng_que/article/details/7505791),至此,感覺Symbian編程估計也就玩到這了,剩下的無非就是再增加技術(shù)種類以及提高技術(shù)細(xì)節(jié)了,這類事情如果不是工作需要,我是不會太花費時間和精力去玩的,畢竟是‘玩玩’而已,點到即可,有了這些基礎(chǔ),想要提高也不會太難。
2012-07-11 01:01:09 [Symbian,我入門了]
6、本來估計Symbian編程也就到此為止了,后來卻機(jī)緣巧合的接了個Symbian的項目,于是就接著玩接著折騰了唄,其中主要涉及到了多視圖結(jié)構(gòu)、列表控件、輸入對話框、消息確認(rèn)對話框、文件讀寫、HTTP網(wǎng)絡(luò)通信、XML解析、瀏覽器控件等等,完成這個項目,中間也碰到了些許詭異的Bug,不過基本都一一解決了,看著穩(wěn)定的程序出爐上線,感覺還是不錯的。在這段過程中,我更多且更清楚的了解了Symbian中的一些特性,比如其中的活動對象、UI相關(guān)的資源定義文件(rss)、安裝包制作相關(guān)的文件(pkg)、以及mif圖像文件等等。嗯,差不多也就是這樣了,以后估計也沒什么太多需要筆記的了,或者以后有空可以再玩玩Android和iOS的開發(fā),呵呵。其實每個平臺的開發(fā)過程都是差不多的,就拿Symbian來說吧,首先是硬件:一臺Windows系統(tǒng)的PC、一部Symbian系統(tǒng)的手機(jī)、一個藍(lán)牙適配器(方便將程序傳輸?shù)绞謾C(jī)上進(jìn)行真機(jī)調(diào)試),然后是軟件:SymbianSDK、Carbide.c++,基本就可以了,軟件的話去Nokia的官方開發(fā)者社區(qū)去下載比較好,然后根據(jù)里面的說明把開發(fā)環(huán)境搭建好,剩下的事情就是通過SDK的文檔、百度谷歌以及自己的思考去一步步入門和前進(jìn)了。這部Symbian手機(jī)也用了快兩年了,兩年時間,斷斷續(xù)續(xù)的在折騰著這個系統(tǒng),從中也學(xué)到了許多,同時這兩年也是Symbian逐漸沒落的兩年,如今Andriod和IOS大放光芒,顯得Symbian是多么的黯淡無光,不過不管什么系統(tǒng)什么平臺,終究是一種規(guī)則的集合,其中總是有好有壞的,只要我們能從中學(xué)到東西就好。
2012-07-11 21:15:26 [我在進(jìn)步著,Symbian卻在沒落著……]