原文地址:http://www.cppblog.com/kesalin/archive/2009/07/09/89615.html
一.开发环境的搭建
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
备注:可以不安装在c:下,安装在其他盘符下也可以运行。在启动模拟器的时候有一个问题,模拟器一闪而过,这个问题的解决办法比较奇妙我也不知道为什么,把耳机插上就可以正常启动了。
3,开发环境配置
a),语言切换:
默认安装的是英文的模拟器环境,如果你需要使用中文模拟器或在模拟器上显示中文,你需要这么做:点击 开始 -> 程序 -> S60 Developer Tools -> 3rd Edition FP2 -> 1.01 -> Languages -> Change to Chinese,这样就把语言切换成中文了。
备注:不知道为什么在我的电脑上v5版本没办法设置语言。
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.3版本的已经没有这个设置了。
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 程序)
这个是我模拟器跑出来的hello world程序。
三,开发流程
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);
备注:这个我还没有具体试过,但是看了看是可以使用的。这里也可以知道,程序的图标也是根据\gfx文件夹的.svg图标生成的,在helloworldbasic程序中可以看出.cvg图标被转换为helloworldbasic_aif.mif,所有要改变程序的图标,只要改变svg图标文件就可以了,svg文件的制作可以参考网上的内容。
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();
}
备注:在我的IDE中,我编译的是helloworldbasic程序,helloworldbasic.rls文件中定义了这些文件的用途,这也是实现多个语言版本的一种用法,可以看出helloworldbasic_31.rls表示为中文,当时文件的编码是采用UTF8的,所有用ide打开时是乱码。这些文件可能记录了程序的名称等等一些文字信息如果要改变程序的名称可以修改这些宏。
#ifdef LANGUAGE_SC
#include "helloworldbasic_01.rls" // default U.K. English
#elif defined LANGUAGE_01
#include "helloworldbasic_01.rls" // U.K. English
#elif defined LANGUAGE_09
#include "helloworldbasic_09.rls" // Finnish
#elif defined LANGUAGE_31
#include "helloworldbasic_31.rls" // PRC Chinese
#elif defined LANGUAGE_32
#include "helloworldbasic_32.rls" // Japanese
#endif
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
两个文件,将它们拷贝到手机上就可以安装应用程序了。
备注:Build Configurations 下共有五项东西,看看标题就能够知道大概的意思了,这里为什么要选择Phone Release(GCCE),是因为debug是不能发布程序的,没有选择armv5因为编译器要钱去购买,而gcc是免费的。