本人所有文章,暂时只作为个人闲暇之余的爱好,如偶有客官路过,权当我是打酱油的吧。
一、建立相关文件夹,包括source和resource两部分。
比如source为 MOCOR\\MS_MMI\source\mmi_app\app\ 目录下新建一个名为 sparrow 的目录,其内再分别创建 c 和 h 子目录,分别存放c 文件和h文件;
resource为 MOCOR\MS_MMI\source\resource\mmi_res_240x320\ 目录下新建一个名为 sparrow的目录,其内创建MMI_RES_DEFAULT,再在MMI_RES_DEFAULT下创建ANIM, DATA, IMAGE 三个目录,分别存放动画、数据和图片资源。
二、将文件加入makefile。
1,在app.mk文件中添加新模块的头文件和代码文件目录,如下:
ifeq ($(strip $(MMI_MOCOR_SPARROW)), TRUE)
MINCPATH += MS_MMI/source/mmi_app/app/sparrow/h
endif
ifeq ($(strip $(MMI_MOCOR_SPARROW)), TRUE)
MSRCPATH += MS_MMI/source/mmi_app/app/sparrow/c
endif
2,在app.mk文件中添加要新建的代码文件,我们先添加一个文件 sparrow_main.c 到 c 目录下,如下:
ifeq ($(strip $(MMI_MOCOR_SPARROW)), TRUE)
SOURCES += sparrow_main.c
endif
3,添加资源文件,在文件resource.mk中添加目录和文件,如下:
ifeq ($(strip $(MMI_MOCOR_SPARROW)), TRUE)
SRCPATH += MS_MMI/source/mmi_app/app/sparrow/h
endif
只需要添加一个文件 sparrow_mdu_def.h即可,所有该模块新添加的会用到的资源文件(字符串除外)都需要在该文件内声明。
ifeq ($(strip $(MMI_MOCOR_SPARROW)), TRUE)
SOURCES += sparrow_mdu_def.h
endif
当然,上面添加的文件是需要自己创建的,包括sparrow_main.c、sparrow_mdu_def.h,其中sparrow_mdu_def.h必须命名成 "模块名_mdu_def.h“。
三、编译
1,首先编译平台,在工程目录下执行:
如果是第一次编译,需要执行:
make p=*** new
make p=*** m=simulator
否则执行
make p=*** update
make p=*** m=resource
make p=*** m=simulator
2,之后,会在build/***_builder/win目录下生成VC工程simulator.dsw
用VC6.0打开该工程,选择msdevkernel为Active project,编译。
3,编译结束后,点击运行
第一次运行的时候,会让我们选择可执行文件,选择build\yithe_fp_builddir\win\bin目录下的MSDev.exe即可,通常情况下,模拟器会自动选择其他配置文件(比如sim卡信息、skin等),如下图所示:
第一次运行
选择好 msdev.exe 后,点击OK,弹出如下模拟器画面。
等待startup
开机方法可以是长按开机键,像普通手机开机一样,或者直接在模拟器上点击右键,在弹出菜单中单击start即可。
==至此,模拟器的开发环境搭建完成了。
我们自己添加的模块,因为没有编写任何代码,所以当前环境下是没有任何体现的,接下来我们添加一个最简单的窗口来体现自己添加的模块吧。
四、添加代码
Mocor平台的菜单中,除了主菜单外,各级菜单没有区别,我的代码中,为了方便,把sparrow模块放到了我自己的一个应用中。
1、添加基本代码
要添加一个新的模块,除了在app和resource目录下新建相关文件夹(sparrow, c, h等),还有一些基本的代码需要添加,包括:
1.1 在mmi_res_prj_def.h 中声明新模块
RES_ADD_MODULE(MMI_MODULE_SPARROW, \\sparrow\\sparrow_mdu_def.h)
这个语句的主要作用是,编译resource时添加 sparrow 的相关资源。
1.2 初始化模块
主要是把相关id注册到系统中,包括 win_id 和 menu_id,即窗口Id和菜单Id。
在sparrow_main.c中添加初始化代码:
/******************************************************************************
* MMIAPISPARROW_InitModule - 初始化模块
* DESCRIPTION: -
* 注册Menu、WinId等。
* Input:
* Output:
* Returns:
*
* modification history
* --------------------
* 01a, 14sep2011, written
* --------------------
******************************************************************************/
PUBLIC void MMIAPISPARROW_InitModule(void)
{
// 注册菜单
MMISPARROW_RegMenuGroup();
// 注册窗口
MMISPARROW_RegWinIdNameArr();
}
(关于菜单、窗口id如何组织到一起的,请查看本blog中文章。)
未完待续。