罗朝辉(飘飘白云) 2009.07.09
http://www.cppblog.com/kesalin
(转载时请注明作者和出处。未经许可,请勿用于商业用途)
目录:
一, 环境配置
二, 项目设置
三, 开发流程
四, 参考书籍
一,环境配置
1,开发工具下载
开发环境选用Jdk1.5 + ActivePerl-5.6 + S60_3rd + Carbide.C++.V2.0,请依次文件下载一下文件放到D:/SymbianTools目录下:
Jdk1.5 :
http://java.sun.com/javase/downloads/index_jdk5.jsp
ActivePerl-5.6.1.635-MSWin32-x86.msi :
下载地址:http://downloads.activestate.com/ActivePerl/Windows/5.6/
S60 Platform SDKs for Symbian OS, for C++:
下载地址:http://www.forum.nokia.com/info/sw.nokia.com/id/4a7149a5-95a5-4726-913a-3c6f21eb65a5/S60-SDK-0616-3.0-mr.html
选择:S60 3rd Edition, Feature Pack 1
Carbide.c++ 2.0
下载地址:http://www.forum.nokia.com/Tools_Docs_and_Code/Tools/IDEs/Carbide.c++/
2,开发工具安装
注意:请将以上3个工具安装到同一个磁盘下(比如C:/盘下),要不在后面可能会碰到奇怪的问题,并且工程代码也需要与开发工具放到同一个磁盘下才能运行,Nokia的开发工具还真够挑剔的,:)
先安装Jdk1.5到 C:/apps/下,安装完成之后,再安装ActivePerl到C: /apps/下,安装完成之后,再安装S60_3rd SDK到C:/下,在安装S60 SDK的过程中会询问:没有安装CSL Arm Toolchain,要立即安装么?选择立即安装就可以了,之后可能还会弹出一个警告对话框,直接忽略就可以了,不会有什么影响的。
安装Carbide.c++ 2.0,安装过程中选择 Professional Edition
3,开发环境配置
a),语言切换:
默认安装的是英文的模拟器环境,如果你需要使用中文模拟器或在模拟器上显示中文,你需要这么做:点击 开始 -> 程序 -> S60 Developer Tools -> 3rd Edition FP2 -> 1.01 -> Languages -> Change to Chinese,这样就把语言切换成中文了。
b),在命令行中输入 path 查看下把你的 path 环境变量中有没有包含CSL Arm Toolchain的安装路径,如果没有将它添加到 path 环境变量中去,如我的是添加 C:/Program Files/CSL Arm Toolchain/bin
c),控制台打印输出调试:
修改C:/Symbian/9.2/S60_3rd_FP1_6/Epoc32/Data/epoc.ini 文件中的
LogToFile 0
LogToDebugger 0
为
LogToFile 1
LogToDebugger 1
使用时,打开工程的 mmp 文件,在其中的 static libraries 中添加 ecrt0 库,在需要在控制台输出信息的文件中包含头文件 #include <e32debug.h>,然后我们就可以如在C中使用printf一样使用:
RDebug::Print(_L("###CImageManager::LoadImage %d/n"), idx); 来将打印信息输出到控制台了。
d),有时候编译会出现如下问题问题
the file 'AknExNote.rsg' cannot be opened
或者类似" 工程名_XXXX.rsg" 文件无法找到的错误,可以通过如下办法解决,打开命令行,进入 C:/Symbian/9.2/S60_3rd_FP1_6/Series60Ex/note/group 目录下,依次输入以下命令:
bldmake bldfiles
abld build winscw udeb
这样就会在C:/Symbian/9.2/S60_3rd_FP1_6/Epoc32/BUILD/Carbide/workspace/工程名/group/工程名/WINSCW 下生成对应的 rsg 文件。
e),系统头文件可能是因为版本不兼容等问题,编译时可能会说找不到 ecom.h 头文件,这里需要修改:C:/Symbian/9.2/S60_3rd_FP1_6/Epoc32/include/http/cauthenticationfilterinterface.h 的头文件包含路径,将 #include <ecom.h>修改为 #include <ecom/ecom.h> 就可以了。
二, 项目设置
1,在开始 -> 程序 -> Carbide.c++ v2.0 打开Carbide.c++编译器,将workspace设置在安装开发工具的同一个磁盘里面(理由前面说了)。在Window -> Preferences -> General -> Editors -> Text Editors 左侧的 Show line numbers前面打勾,这样就会显示代码行号。
2,导入工程:选择 File -> Import,在对话框中选择 Symbian OS -> Symbina OS Bld inf file,然后 next, 选择 C:/Symbian/9.2/S60_3rd_FP1_6/Examples/Basics/HelloWorld/Bld.inf,然后 next,一路默认,直到 finish 就可以导入工程了。
3,在工程浏览器视图(Project Explorer)中右击项目 HelloWorld,在弹出菜单中选择 Build Project,应该可以顺利编译通过了,然后再在弹出菜单中选择 Run as -> Run symbina OS Appion,在弹出对话框中选择Finish。这样就可以在模拟器中运行程序了。(模拟器启动速度可能比较慢,你点击模拟器界面中照相机按钮下面的蓝色椭圆按钮进入应用程序界面,选择 installed进入已安装程序界面,就可以找到安装的 HelloWorld 程序)
三,开发流程
1, 如何在工程中导入图片资源:
a),将bmp图片(名字要为英文)拷贝到 工程名/gfx 目录下,这样你在Carbide.c++打开group下面的 工程名.mmp 文件,选择 Sources栏(题外话:Libraries栏是配置库的,前面说的调试库就在这里设置),选择右边的 Bitmaps,如果下面没有任何mbm文件,就添加一个;如果有了直接双击打开。在弹出的对话框中选择Add From Project,选择你刚刚拷贝到gfx目录下的bmp图片就可以了,确定。
b),然后重新编译工程,就会在C:/Symbian/9.2/S60_3rd_FP1_6/Epoc32/include目录下自动生成工程名.mbg文件,里面是定义了一些enum变量对应你加入的图片id,在代码中你可以使用这些id来引用图片资源。
c),这样你就可以在项目中如下代码所示装载图片了:
_LIT (KImagesFilename,"//System//Apps//工程名//工程名.mbm");
CFbsBitmap* iFbsBmp = m_EikEnv.CreateBitmapL(KImagesFilename, 图片id);
2,如何在工程中加入中文字符串:
a),只能使用utf8格式的中文字符文本,所以你需要将文本格式(gb2312)的文本文件转换成utf8才能在工程中使用。具体操作见下。
b),在data目录中添加文本文件: cntext.txt,内容如下:(注意CHARACTER_SET UTF8不可少!)
CHARACTER_SET UTF8
#define qtn_connect_confirm "允许应用程序访问网络么?"
#define qtn_exit_confirm "确定退出应用程序么?"
c),在data目录中添加bat文件:charconverter.bat,内容如下:
@echo off
charconv -input=gb2312 cntext.txt -output=utf8 cntext.loc
pause
d),运行此bat,就可以在data目录下生成cntext.loc文件,这时在Carbide.c++中工程中的data目录下就可以看到这三个文件了,打开data/工程名.rss文件,添加包含
#include "cntext.loc"
再在下方的Resources for messages处添加以下内容:
RESOURCE TBUF32 r_connect_confirm { buf=qtn_connect_confirm; }
RESOURCE TBUF32 r_exit_confirm { buf=qtn_exit_confirm; }
打开data/工程名_reg.rss文件,看看有没有包含 工程名_0xXXXXXX.rsg 文件(XXXX是16进制的UID,编译项目时会在C:/Symbian/9.2/S60_3rd_FP1_6/Epoc32/include目录下自动生成该文件),如果没有就添加包含:
#include <工程名_0xXXXXXX.rsg>
e),这时重新编译项目,就会在工程名_0xXXXXXX.rsg文件中生成字符串资源ID
#define R_CONNECT_CONFIRM 0x5edfa00e
#define R_EXIT_CONFIRM 0x5edfa00f
f), 这样在项目中你就可以通过如下代码来使用中文字符串了。
CAknQueryDialog* dlg = CAknQueryDialog::NewL();
HBufC* pFormat = StringLoader::LoadLC(R_EXIT_CONFIRM);
dlg->SetPromptL(*pFormat);
if(dlg->ExecuteLD(R_STAR_CONFIRMATION_QUERY))
{
Exit();
}
3),发布到手机上,在Carbide.c++中右击项目,在弹出菜单中选择项目属性Properties,选择
Carbider.C++栏目下面的Build Configurations,在右边的Configuration中选择Phone Release
(GCCE) ,然后在下面的SIS Builder中Add新的sis,选择sis/项目名_s60_.._.pkg文件,然后OK,
Apply,OK,重新编译就会在sis目录下生成:
项目名_s60_.._.sis
项目名_s60_.._.six
两个文件,将它们拷贝到手机上就可以安装应用程序了。
4),常见的按键值:
左软键 0xa4 164
右软键 0xa5 165
确定键 0xa7 167
左键 0xe 14
右键 0xf 15
上键 0x10 16
下键 0x11 17
5),去除项目向导自动生成的默认左菜单,只要将 工程名.rss 中的 r_menu 清空就可以了。
RESOURCE MENU_PANE r_menu
{}
四, 参考书籍
对比了一下,比较好的参考书籍是<Symbian OS C++ for Mobile Phones>中文版第三版