从事symbian开发大半年了,收获不小,除了自己努力以外,多亏坛子里诸高手热心相助。新年之际,温故而知新,也给从事SYMBIAN开发的朋友提供一些参考帮助,可以少走弯路:)
大家可在http://discussion.forum.nokia.com搜索lius1984发的主题贴.也可点击下面的帖子链接
1. 求助:Cannot obtain license for Compiler (feature compiler) with license version >= 2.2
关于破解RVCT编译器方法请参考我博客里的相关文章。RVCT编译器是收费的ARM编译器,对比免费的GCCE编译器,性能不错且生成SIS小很多。不过如果是大规模商业开发最好花钱购买,免得招致麻烦。
2. 代码移植到RVCT后 奇怪的编译错误
代码从win32移植到symbian,编译错误主要是is undefined ,unresolved symbols等,解决方法主要是检查头文件包含,是否安装了openc plugin,是否重复包含甚至把引用顺序换一下也行;很多错误是由在C++文件中调用C头文件引起的,加extern C {},若还不行,试着把后缀.c改成.cpp。 C工程的移植是很繁杂费时的工作,但如果有经验的话,就事半功倍了。
3. 程序安装到手机不能运行,发布者证书签名后的软件无法安装,因安全原因 无法执行文件 -46 ,系统错误-1等问题
模拟器调试成功只是第一步,真机调试更麻烦,因为涉及capability。若出现以上问题,可试着从几个方面尝试:
1)mmp没加需要的能力(比如联网需要networkservices,流媒体播放控制需要multimediaDD等)
2)修改能力或UID后工程有残余,需要really clean
3)若使用开发者证书,要注意UID3是否在你申请的UID范围内。修改UID后要really clean重新build。
4)系统错误-1是因为缺少文件,比如dll,mif等。看PKG文件是否COPY全了。
5)第三方dll能力要高于exe。
4. 真机上无法通过GPRS连接局域网,RSocket在真机上不可用,出现kern exec 3
MMP加networkservices能力。另外,虽然carbide C++的真机调试功能很强大,但有时也会严重误导,所以大家还是要学会真机LOG。其实很简单,用RFileLogger,甚至也可以自己写个简单的log函数。在目前2.5G网络条件下,GPRS连接会阻塞来电(提示‘您拨打的电话不在服务区),这问题到3G时代才能解决:)。另外,真机联网用CMNET方便,相当于有独立IP,而CMWAP是在内网,需要设置中转服务器。
5. 数据库操作和系统错误-1,DBMS-Table 0 错误..
修改了DBMS字段后,需要删除真机上的.db文件,要卸载程序再重新安装。
6. 活动对象和界面被阻塞 ,活动对象下碰到的问题
活动对象在一般应用可以取代多线程,本质就是利用CPU的空闲时间每隔很短时间来调用RunL()函数,这也要求RunL迅速返回。但多线程在移植工程、多媒体编程等各方面仍是不可能缺少的。但有点要注意,UINotifier,画屏,播放音频等涉及WSSESION CONE的操作,必须放在主线程。比如你在设计流媒体音频播放器时,收包你可以新建个线程,但CMdaAudioOutputStream->WriteL必须放在主线程。
7. 连续解码图像和kern exec -3
真机内存有限,类似问题可以尝试增大epocstacksize,epocheapsize。
8. 资源出错,R_LOCALISABLE_APP_INFO,Label not found
RSS文件没加#include <appinfo.rh>,另外appui.cpp中调用资源要大写。
最后跟大家再给大家两个建议:
1.尽早把程序放到真机测试。
2.养成良好的调试习惯,可采用carbide联机调试+真机LOG的组合来快速定位问题。
新的一年,祝大家学习工作愉快:)