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