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