Symbian OS 应用程序在手机上无法运行的种种原因
设计一个在Symbian OS上的应用程序并不是件容易的事,会碰到许多问题,特别是对于一个设计新手,会遇到更多的问题,有时设计一个非常简单的程序,在模拟器上能运行得好好的,但在手机上却运行不了。最近,我在我原有的工程上加入从Nokia forum上下载的一部分代码模块,结果是编译通过了,但在手机上却一打开程序就退出了,经过艰苦耐心的问题排查,原来又是这样的问题:下载的代码中全局变量没有定义好(我想会不会是Nokia故意设的陷井)。其实,象这样的问题不止发生一次了,在这里好好总结一下,免得以后又在白费功夫,也让刚接触Symbian开发的人有借鉴作用。一般程序在Symbian OS手机上无法运行有如下几种常见的原因:
1、程序编译出来的版本与手机上安装的操作系统版本不一致。当前针对Symbian OS应用程序的开发版本有好多种,如:S60v1.0、S60v2.0、S60v3.0、UIQ2.1、UIQ3.0等,在开发前一定要先确定一下开发的程序是要在什么样的手机上运行,其中S60系列和UIQ系列的编码方法差别较大,Nokia的Symbian智能手机大部分是S60系列的,而索爱的Symbian智能手机大部分是UIQ系列的;
2、应用程序中的程序ID号不一致。每个Symbian应用程序都有一个可以唯一标识该程序的ID号,且在整个应用程序中有多个地方用到这个ID号,如:mmp文件、pkg文件、app文件(程序入口文件)、XXXAIF.rss文件,这些文件中的程序ID号必须是一致的,否则会造成程序打不开;
3、全局变量定义不当。Symbian OS v9.0版本可以支持全局变量了,但在以前版本是不支持全局变量的,如果要定义全局变量则必须把全局变量定义成“static const”的形式,而且在MMP文件中必须加入“EPOCALLOWDLLDATA”这样的标识,如果不这样做,则在模块器上可以运行,但在手机上会造成程序打不开的现象;
4、资源文件定义不当。这个就比较麻烦,原因也是很多,如果发现在构造某个窗口时程序出现退出的现象,一般就要查一下有关这个窗口的资源文件定义是否对了;
5、程序中使用了受限的API。这个主要出现在Symbian OS v9.0中,原以为Symbian OS v9.0可以支持全局变量会变量方便多了,但却在API上加了个“Capability”的级别限制,让程序员在开发程序时束手束脚了。
发表于 @ 2007年06月19日 14:18:00 |
|
编辑|
举报|
收藏