移植s60应用程序第二版到第三版
2009-01-10 11:47
169 查看
移植s60应用程序第二版到第三版
From Forum Nokia Wiki
S60第一版和第二版编译器使用的是gcc for ARM,而第三版版本使用的编译器是支持ABI标准的RVCT 所以造成了第二版和第三版二进制格式不兼容,另外第三版(symbian9.0)采用了新的安全模型导致应用程序的目录结构也有所变化.所以在s60软件从第二版移植到第三版过程中程序的编译及部署需要做一些改变((幸运的是这种变化并不大,你的代码几乎不需要做改变)).本文记录了从s60第一版、第二版移植到第三版的需要做的一些变化及步骤。步骤一:移植的准备工作 在你的项目group目录下分别创建不同平台的组目录,不同的平台放置单独的项目定义文件,拷贝当前的项目定义文(.mmp,.blf )件到不同的组目录。 如果你的项目定义文件以前是在group目录下。在新的目录结构中不用忘记修改项目定义文件中的相对路径,通常情况下修改 '../' 为 '../../'。 为了实现不同版本之间的移植,推荐通过一个头文件存放各个版本的环境变量参数方便我们控制在不同版本之间的编译。生成不同的版本只需要修改头文件即可。创建一个名为projectenv.h的头文件分别拷贝至各个项目组目录。 #ifndef PROJECTENV_H_ #define PROJECTENV_H_ //#define __S60__ 200 #define __S60__ 300 #ifdef __S60__ //do something #else //do somthing #endif #endif /*PROJECTENV_H_*/ 此时你的group目录结构应该和下面的结构类似: │ ├─s60_2nd │ bld.inf │ YourProject.mmp │ projectenv.h │ ├─s60_3rd │ bld.inf │ YourProject.mmp │ projectenv.h 此时两个组目录都是s60第二版下项目定义文件的副本,剩下的工作就是在此基础上进行修改始本项目能够顺利在s60第二版和第三版顺利编译。 [edit] 步骤二 :修改应用程序框架入口S60第二版的以前应用程序都是以多态DLL的形式存在的,第三版应用程序则变成独立的可执行程序。所以从代码方面最大的变化就是应用程序的入口发生了变化。找到你程序框架的入口源文件,通常是YourProjectApp.cpp 修改后的示例如下:... #ifdef EKA2 #include <eikstart.h> LOCAL_C CApaApplication* NewApplication() { return new CYourProjectApp(); } GLDEF_C TInt E32Main() { return EikStart::RunApplication(NewApplication); } #else EXPORT_C CApaApplication* NewApplication() { return new CYourProjectApp; } GLDEF_C TInt E32Dll( TDllReason ) { return KErrNone; } #endif [edit] 步骤三:编写生成应用程序图标的makefile第三版提供了新的加载图标的API,支持普通的位图图标和可缩放图标,位图文件(.bmp)编译成mbm文件,矢量图形(.svg)编译成.mif文件。位图从老的MBM文件中加载,可缩放图标从MIF文件中加载。 第三版中使用MIFCONV工具对位图和矢量图进行编译,目前此工具不能整合在在项目编译的makefile中被调用,我们需要一单独的makefile来调用MIFCONV工具来编译图形资源,这个makefile加入到bld.inf文件中被gnumakefile工具调用。编辑icons_aif.mk拷贝至s60_3rd目录。这里给出icons_aif.mk文件的示例 # ============================================================================== # Name : icons_aif.mk # Part of : # Description : This is file for creating .mbm file # Version : # # ============================================================================== ifeq (WINS,$(findstring WINS, $(PLATFORM))) ZDIR=$(EPOCROOT)epoc32/release/$(PLATFORM)/$(CFG)/Z else ZDIR=$(EPOCROOT)epoc32/data/z endif TARGETDIR=$(ZDIR)/RESOURCE/APPS ICONTARGETFILENAME=$(TARGETDIR)/YourProject.mbm do_nothing : @rem do_nothing MAKMAKE : do_nothing BLD : do_nothing CLEAN : do_nothing LIB : do_nothing CLEANLIB : do_nothing RESOURCE : mifconv $(ICONTARGETFILENAME) /c24,1 ../aif/list_icon.bmp /c24,1 ../aif/context_pane_icon.bmp FREEZE : do_nothing SAVESPACE : do_nothing RELEASABLES : @echo $(ICONTARGETFILENAME) FINAL : do_nothing [edit] 步骤四:编辑bld.inf文件[edit] 第二版//导入环境变量头文件 PRJ_EXPORTS projectenv.h PRJ_MMPFILES YourProject.mmp [edit] 第三版//导入环境变量头文件 PRJ_EXPORTS projectenv.h PRJ_MMPFILES //编译图像资源 gnumakefile icons_aif.mk YourProject.mmp [edit] 步骤五:修改资源文件[edit] 修改主资源文件在第三版中应用程序的主资源文件基本上没有大的变化,唯一的不同是你需要加入一个实现应用程序本地话的结构LOCALISABLE_APP_INFO。解决方案如下:资源文件的头部加入以下代码: ... //我们定义的环境变量头文件 #include <projectenv.h> // Added for SVG-T icon support. #if (__S60__ >= 203) #include <appinfo.rh> #endif 资源文件的尾部加入以下代码: #if (__S60__ >= 300) RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info { short_caption = qtn_app_caption_string; caption_and_icon = CAPTION_AND_ICON_INFO { caption = qtn_app_caption_string; number_of_icons = 2; icon_file = "//resource//apps//YourProject.mbm"; }; } #endif [edit] 增加应用程序注册资源文件第三版不再支持AIF文件,你必须创建一个名字为 <yourproject>_reg.rss的文件(以_reg.rss为后缀 )用来注册应用程序,包括应用程序的UID、启动选项、图标、标题等参数选项。编辑yourproject_reg.rss 其内容如下#include "YourProject.hrh" #include <appinfo.rh> #include <YourProject.rsg> UID2 KUidAppRegistrationResourceFile UID3 0x0E9930B5 RESOURCE APP_REGISTRATION_INFO { app_file="yourproject"; //可执行应用程序的名称 localisable_resource_file = "//resource//apps//yourproject"; localisable_resource_id = R_LOCALISABLE_APP_INFO; embeddability=KAppNotEmbeddable; newfile=KAppDoesNotSupportNewFile; } [edit] 步骤六:修改项目定义文件 (.mmp)以下列出第二版和第三版的几个必要的改变。[edit] 目标文件类型[edit] 第二版TARGET YourProject.app TARGETTYPE app UID 0x100039CE 0x0E9930B5 TARGETPATH /system/apps/YourProject [edit] 第三版TARGET YourProject.exe TARGETTYPE exe UID 0x100039CE 0xE4DC9E88 TARGETPATH /system/apps/YourProject 在这里除了生成的目标类型有变化外,UID的范围也有变化。更多的UID信息 请参考 http://www.symbiansigned.com/. [edit] 资源文件[edit] 第二版RESOURCE YourProject.rss RESOURCE YourProject_caption.rss [edit] 第三版START RESOURCE YourProject.rss HEADER TARGET YourProject.rsc TARGETPATH resource/apps END //RESOURCE START RESOURCE yourproject_reg.rss TARGET project_reg.rsc TARGETPATH /private/10003a3f/apps END //RESOURCE [edit] 应用程序信息文件第三版不再支持aif文件,在.mmp文件中把 Aif直接去掉即可。[edit] 第二版AIF YourProject.aif ../aif projectaif.rss c24 context_pane_icon.bmp context_pane_icon_mask.bmp list_icon.bmp list_icon_mask.bmp [edit] 第三版AIF YourProject.aif ../aif projectaif.rss c24 context_pane_icon.bmp context_pane_icon_mask.bmp list_icon.bmp list_icon_mask.bmp除此之外还有一些可选项,比如CAPABILITY,SECUREID,VENDORID,EPOCSTACKSIZE等,通常情况下不用对这些选项做额外的设置。 [edit] 编译运行完成以上的步骤以后我们就可以进入到不同的项目定义文件组通过命令行或者用 vs.2003,carbide等ide 导入项目定义文件 编译和生成目标平台代码了。没有啥意外的话应该可以顺利通过编译,如果希望你的应用程序顺利的在第三版的设备上运行可能还需要一些细微的调试工作。 |
相关文章推荐
- 移植s60应用程序第二版到第三版
- 移植s60应用程序第二版到第三版
- 移植s60应用程序第二版到第三版
- 关于在eclipse上开发nokia s60 第三版的J2ME应用程序的问题
- 第二版移植第三版后不能生成lib文件,解决办法
- S60第二版与第三版的系统技术区别介绍
- 第二版移植到第三版
- 【引用】Linux应用程序开发(一)---移植thttpd+Sqlite3+PHP5到arm linux(4)
- Symbian S60 清理模拟器下安装的应用程序
- 将应用程序移植到uCLinux下时需要注意的问题
- S60第三版手机软件发布签名问题解决之道
- 将 Linux 应用程序移植到 64 位系统上
- Zynq-Linux移植学习笔记之22-Linux应用程序调用shell脚本
- 怎样移植你的POWERPLAY应用程序
- 针对移动网络设备移植和优化Adobe AIR应用程序(四)
- qt4的安装-应用程序设计及在arm板上的移植
- 用S60操作系统SDK开发NOKIA手机应用程序-学习笔记(2)
- 用S60操作系统SDK开发NOKIA手机应用程序(4)- 界面层框架及一些特性
- (GPS移植三部曲)Linux下移植GPS应用程序之常见问题的分析与解决方法之三
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题