序言:记录一个新平台的学习过程。
1、大概是去年公司9周年年庆的前一周花了1330元买了Nokia5230这款智能手机,其搭载的是ARM11的CPU和Symbian第五版的OS,是个很典型的嵌入式开发平台,对于从事软件行业的我,自然少不了在这个平台上玩玩应用开发了,于是就有了这部笔记。
2011-11-07 01:18:07 [虽然这个系统已经有点过气了,但是我还是选择学习它,理由很简单 —— 因为拥有,所以珍惜……]
2、既然要开发应用,自然首先要去了解这个平台有哪些开发方式了,在Nokia的官网了解到,开发方式还是挺多的,有如下方式:Widget、J2ME、QtSDK、SymbianSDK。通过简单的了解,知道了Widget就是Web开发(html+javascript的方式),通过这种方式做了个“魔方计时器”,结果发现计时非常的不精确,况且我本来就不喜欢Web开发,于是很自然的将此方法排除,但是不得不说,这是最简单的一种开发方式。然后就是J2ME,这就是大名鼎鼎的Java了,我在大学就开始玩这个了,那时就写了个“MD5计算器”,在舍友的手机上也跑起来了,感觉挺好玩的,所以我自然一开始选择了这种方式,也就是扩展了大学时写的那个程序,加入了几个其它的Hash算法,也就改名叫“Hash计算器”了,后来把画图、线程等技术也都简单弄通了,但是接下来想玩玩手机的重力感应(这些硬件扩展功能其实才是移动开发最好玩的东东)等功能时,发现Java不怎么好用了,似乎对这些外设支持得不是很好,而且Java也不是我最喜欢的语言,我最喜欢的语言是C/C++,于是乎,开始了解上面提到的后面那两种开发方式了,一开始非常搞不清它们的关系,随着时间的流逝,随着工作中技术的进展(这段时间在工作中技术可谓突飞猛进啊,了解了很多计算机底层的东西),终于了解并理解了这两种方式的区别,QtSDK:Qt是一种应用程序框架,它定义了一整套的供应用开发的API,并且在很多平台上实现了(例如:Windows、Linux、Mac、Symbian等等),可以这样理解,其实Qt很类似Windows上的MFC,MFC是通过调用Win32SDK完成各种功能的,同理,在Symbian上,Qt是通过SymbianSDK来实现各种功能的,所以可以这样理解,Qt只是在SymbianSDK的基础上封装了一层,前面提到过,Qt在很多平台都有实现,所以用Qt写出来的程序可以在很多平台上运行,只要编译时选择相应的平台就可以了,我尝试了Qt在Symbian、Windows和Linux平台上的表现,很不错,尤其是在Linux上实现了UI编程,这可是我第一次在Linux上写UI程序啊。好了,不扯得太远了,回到正题,开始选择Qt,郁闷即将开始,我那时下载的是NokiaQt4.6版本的,下载好,安装好,首先开始浏览一下里面的开发文档,然后被里面各种各样的目录内容弄得云里雾里的,当时不是很明白为什么里面好像又有个SymbianSDK的目录,不管了,先编个程序试试,打开QtCreate,玩玩各种UI控件,拖拖拽拽,跟MFC开发Windows程序差不多,很快HelloWorld级别的东东就出来了,然后开始玩Sensor(传感器,也就是重力感应、距离感应之类的外设了),很郁闷,一开始就发现编译不过,连Qt自带的例子都编译不过,然后开始试着全部在命令行下完成各种编译操作的,其中也碰到了很多问题,不过最后还是编译过了,但是又运行不了,哦,还要安装qt_installer.sis和qtmobility.sis(这个东西很类似DirectX(玩过CS、魔兽争霸吗?玩过的话就肯定装过它了)、Java虚拟机等等这类环境组建,专业点的说法就叫‘运行时环境’,runtime这个英文经常见吧,就是它了),这个烂东西差不多11M,而且还必须装在C盘,害我不得不卸载了一些其它的软件,并且对于我的手机来说还真是太占空间了,不过最后总算正确的完成了读取手机剩余电量的小功能,然后就是距离感应器了(这个东东我把它和环境光感应器搞混了,一直以为是环境光感应器,结果搞了好久都没有成功,最后还好意识到了这点,才最终搞定),玩通这个后其它的什么重力感应器的都顺带搞定了,这时写了第一个程序“Sensor测试工具”,后来又写了“水平仪”、“俄罗斯方块”(这个是半成品,没有最终完成),这段时间搞定了Qt里的线程、画图、文件操作,数据结构之类的各种技术,后来还移植了tinyxml、Box2D这些开源库到手机上简单玩玩。随着时间的过去和自身的成长,发现Qt也有不好的地方,首先感觉就是臃肿,一个Qt运行时库就很占地方了,其次UI不是很好控制,其中我在玩菜单栏时,里面有个选项我是怎么也去不掉,灰常郁闷,后来让我彻底对Qt失望的就是更新了NokiaQt4.7,一个超级大的库,1.77G啊,下了很久,也装了很久,运行起来也感觉比较卡,最后发现跟4.6还不兼容,而且不知怎么搞的,居然编译不出sisx文件,xx的,懒得跟它玩了,早知道不升级还好,真是让人抓狂,那一刻,我彻底厌倦了NokiaQt。总结一下前面这3种开发让我最后放弃的原因:【1】、Widget——简陋,就像个破草屋,很简单也很简陋。【2】、Java——功能弱,估计是我没有使用Nokia官方的JavaSDK开发包(注:我是用Wireless Toolkit 2.5.2的,还是大学时下载的哦,那时Sun还没有被收购……)的缘故吧,唉,不过也懒得装了。【3】、Qt——不成熟,运行时库比较笨重(至少在Symbian平台上,我的感觉是这样的)。最后我选择了SymbianSDK配合Carbide.c++这样的黄金搭档,这个开发方式是最难的,但是确是最强大的,相当于在Windows上直接使用Win32SDK来开发应用一样,虽然低效些,但是强大。个人感觉,开发一个平台的应用,还是本地代码王道,正如百度更懂中文、英特尔更懂奔腾这样的道理一样。好了,接下来的日子里,才是真正的开始玩Symbian开发了。
2011-11-07 21:09:29 [享受编程的乐趣,让生活更美好]
3、SymbianSDK与Carbide.c++的环境还是很容易搭建的,但是搭建好后,第一个程序就没有编译通过,后来找到原因是ActivePerl的版本不对,我装的版本过高了!原来Symbian的开发文档里面就有明确说明对版本是有要求的,具体的就是:ActivePerl-5.6.1.635MSWin32-x86.msi,最后我通过QQ旋风在ftp://ftp.activestate.com/ActivePerl/Windows/5.6/ActivePerl-5.6.1.635-MSWin32-x86.msi把安装包下载了下来,安装后编译顺利通过。好了,那么接下来就可以面对一个全新的系统,从零开始了,我第一个想到的就是要建立调试手段,很自然的想法就是让程序对自己的操作有所表示,例如弹出对话框,在界面输出文字什么的等等,要打印信息,很自然的就要用到字符串这种基本类型,结果也着实折腾了一番,在那一堆的描述符和类中转来转去,最后还是忍不住百度谷歌了(本来想完全通过自己看文档手册搞定了,苦于求进展心切,还是搜索吧),问题自然是很简单的解决了,最后发现TBuf就很好用了,与C++中的string类型比较类似了,而弹出信息框这个功能在IDE生成的实例工程中就有,所以到这里,简单的调试手段就有了。接下来看代码,把代码大致的框架和相关文件作用了解后,像Help文档就知道怎么改了,当然,一开始也不知道,也是网上搜索的(真失败呀,我老是在作弊,呵呵),然后菜单栏里的菜单项则是照葫芦画瓢的就知道怎么扩展了,之后很快就把GUI引擎玩通过了(这其中有把画直线的操作放在错误的函数里导致程序退出的问题,后来才想到,具体的绘图操作必须放在特定的地方,其它函数只能调用类似‘刷新’操作的函数),可以在手机的屏幕上画画了,再接着显示字符串到屏幕上也搞定了(一开始也挂了,后来网上查到,是要设置字体类型,xx的,居然没有默认的),再接着把触摸屏幕的消息也捕获到了(这其中拖拽消息一开始没有捕获到,后来发现是要使能才有的),至此,先玩到一段落先。
2011-11-08 23:59:21 [体验一个全新平台的开发,从新开始认知计算机编程]
4、好久没有写笔记了,中间因为工作的关系停止了一段时间,不过最近又开始继续玩了,最近弄清楚了以下几大块的概念:“异常退出(leave)”、“清除栈(CleanupStack)”、“两阶段构造(ConstructL())”、“Symbian的命名规则”。搞懂这些之后再看SDK中的那些Demo就没有那么郁闷了,目前的进度是搞定了内存位图(即:实现了双缓冲绘图机制)以及Sensor(传感器)编程,至少把距离感应器玩通了,其它的感应器也类似的了,基本没有什么问题了。
2012-01-21 21:11:47 [感受Symbian,学习一个OS的思想]
5、半年没有更新这部笔记了,看来坚持确实是件难事,我一向就不喜欢写日记,写写随记还行。半年时间,对于Symbian编程我又进步了不少,首先是年后刚开始上班,不是太忙,业余时间里就把印象中童年时期第一个玩到的游戏(俄罗斯方块)给实现了,当然,也可能是红白机的超级玛丽,反正是记不太清楚了,不过至少我清楚的记得我拥有的第一台游戏机就是俄罗斯方块,这个俄罗斯方块我首先是在Windows下把核心部分架构并实现了,也可以称为“引擎”吧,然后也在Windows上基于MFC写了个Demo,把核心部分调通测通,接着就往Symbian上移植了,其中用到的技术主要有:屏幕绘图、内存位图、传感器、定时器、中文、程序图标以及一些极其简单的UI(主要就是菜单选项),最后还有操作手机的震动器,消除四行或速度提升时会震动提示,增加用户体验而已,呵呵。大概断断续续写了两个多月这样吧,期间包括一些简单的内测,然后没有什么问题也就在互联网上分享出来了(‘官方’地址:http://blog.csdn.net/leng_que/article/details/7505791),至此,感觉Symbian编程估计也就玩到这了,剩下的无非就是再增加技术种类以及提高技术细节了,这类事情如果不是工作需要,我是不会太花费时间和精力去玩的,毕竟是‘玩玩’而已,点到即可,有了这些基础,想要提高也不会太难。
2012-07-11 01:01:09 [Symbian,我入门了]
6、本来估计Symbian编程也就到此为止了,后来却机缘巧合的接了个Symbian的项目,于是就接着玩接着折腾了呗,其中主要涉及到了多视图结构、列表控件、输入对话框、消息确认对话框、文件读写、HTTP网络通信、XML解析、浏览器控件等等,完成这个项目,中间也碰到了些许诡异的Bug,不过基本都一一解决了,看着稳定的程序出炉上线,感觉还是不错的。在这段过程中,我更多且更清楚的了解了Symbian中的一些特性,比如其中的活动对象、UI相关的资源定义文件(rss)、安装包制作相关的文件(pkg)、以及mif图像文件等等。嗯,差不多也就是这样了,以后估计也没什么太多需要笔记的了,或者以后有空可以再玩玩Android和iOS的开发,呵呵。其实每个平台的开发过程都是差不多的,就拿Symbian来说吧,首先是硬件:一台Windows系统的PC、一部Symbian系统的手机、一个蓝牙适配器(方便将程序传输到手机上进行真机调试),然后是软件:SymbianSDK、Carbide.c++,基本就可以了,软件的话去Nokia的官方开发者社区去下载比较好,然后根据里面的说明把开发环境搭建好,剩下的事情就是通过SDK的文档、百度谷歌以及自己的思考去一步步入门和前进了。这部Symbian手机也用了快两年了,两年时间,断断续续的在折腾着这个系统,从中也学到了许多,同时这两年也是Symbian逐渐没落的两年,如今Andriod和IOS大放光芒,显得Symbian是多么的黯淡无光,不过不管什么系统什么平台,终究是一种规则的集合,其中总是有好有坏的,只要我们能从中学到东西就好。
2012-07-11 21:15:26 [我在进步着,Symbian却在没落着……]