对MTK还不太熟,只是知道添加资源的大概步骤。以前都是在09A上添加的,听说10A变化很大,还好有一份官方文档《10A_MMI_Resource_Training.pdf》写的很详细。就动手做一下吧。
先回顾一下09A添加资源的方法:
1、在plutommi/mmi/Inc/MMIDataType.h文件增加资源ID范围。
2、在MMI目录下新增MyFirstApp文件夹。编写XXXdef.h文件用于定义字符串、屏幕、图片ID。编写XXX_entry.c用于编写菜单高亮函数和入口函数。
3、把res_XXX.c放到plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI目录下,在该文件编写population_XXX()函数用于添加菜单、字符串、图片等资源。大概要用到ADD_APPLICATION_MENUITEM、ADD_APPLICATION_STRING2、ADD_APPLICATION_IMAGE2、ADD_APPLICATION_MENUITEM_HILITE_HANDLER等。
4、然后找到Populate_Res.c文件,在PopulateResData()函数里面调用刚才编写的函数。会有多个,注意看是哪个宏起作用。
5、在plutommi\Customer\CustResource\PLUTO_MMI\ref_list.txt增加字符串。
6、在plutommi\Customer\Images\XXXX对应的目录下增加图片,增加后要重新压缩成image.zip
7、在GlobalMenuItem.h增加菜单ID。
8、在Res_MainMenu.c找到相应的菜单,在下面增加子菜单。会有多个PopulateMainMenuRes函数,要看具体的宏开关,__MMI_VERSION_2__代表以列表的方式显示菜单。
要这么多步骤,然后看看《10A_MMI_Resource_Training.pdf》吧。
文档开头讲了新架构的目的,是为了减少修改文件的次数和操作步骤,当编译出错时有更清晰的LOG并且更容易找到错误,减少编译时间。
新架构的特点:1、在Build目录下会生成资源编译的LOG。2、自动生成资源ID的定义,并放在CustomerInc目录下。(至于怎么增加资源在下文提到。)3、在ResGenerator目录下会生成Debug目录,如果资源编译出错可以根据命令行到这里查找LOG。还有Temp目录,该目录用于存放编译时的.o文件。4、把添加资源的文件移到你的应用程序目录,可以建一个名为XXX_Res的文件夹,新建资源文件命名为XXX.res,再建一个ref_list_xxx.txt文件存放字符串对应的各国版本。
再仔细对比下两种架构的区别吧:
1、增加资源ID范围。老的版本是在MMIDataType.h文件,而新的是在mmi_res_range_def.h完成。而且代码有一点点修改:
Old:
Step1:
RESOURCE_BASE_RANGE(APP_FILEMANAGER, 600),
Step2:
#define FILE_MANAGER_BASE ((U16) GET_RESOURCE_BASE(APP_FILEMANAGER))
#define FILE_MANAGER_BASE_MAX ((U16) GET_RESOURCE_MAX(APP_FILEMANAGER))
RESOURCE_BASE_TABLE_ITEM(APP_FILEMANAGER)
New:
Step1:
RESOURCE_BASE_RANGE(APP_FILEMANAGER, 600),
Step2:
#define FILE_MANAGER_BASE ((U16) GET_RESOURCE_BASE(APP_FILEMANAGER))
#define FILE_MANAGER_BASE_MAX ((U16) GET_RESOURCE_MAX(APP_FILEMANAGER))
RESOURCE_BASE_TABLE_ITEM_PATH(APP_FILEMANAGER, ".\\mtkapp\\FileMgr\\fmgr_res\\")
2、定义资源ID。老版本是用户自己定义在xxxdef.h文件中。新版本会在plutommi\Customer\CustomerInc目录自动生成mmi_rp_app_XXXX_def.h文件。
3、增加资源。老版本是编写一个Res_XXX.c文件并放到plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI目录下。新版本只要在你的应用文件XXXRes目录下新建一个XXX.res文件,在该文件新增资源就行了。同时你可以看到系统在plutommi\Customer\ResGenerator\debug\res目录下为你生成了一个mmi_rp_app_XXX.c文件。
4、增加资源的方法。可以参考闹钟的资源添加方法。一个老版本的例子:
新版本:void PopulateAlarmRes(void) { ADD_APPLICATION_STRING2(ALARMS_SNOOZE_STRINGID,"Snooze","Snooze alarm button."); ADD_APPLICATION_STRING2(ALARM_REPEAT_STRING,"Repeat","Repeat"); ADD_APPLICATION_MENUITEM((MENU_ID_ALM_AUDIO_OPT_FMRADIO,0,2,MENU_ID_ALM_FMRADIO_CHANNEL_LIST, MENU_ID_ALM_FMRADIO_MANUAL_INPUT,SHOW,NONMOVEABLE,DISP_LIST,STR_GLOBAL_OPTIONS,0)); ADD_APPLICATION_MENUITEM_HILITE_HANDLER(ORGANIZER_ALARM_MENU, HighlightAlmMenu); }
5、插入菜单。相应地主菜单的文件也变化了,老版本是在Res_MainMenu.c中,而新版本是在MainMenu.res中修改了。<APP id="APP_ALARM"> /* When you use any ID of other module, you need to add that header file here, so that Resgen can find the ID */ <!--Include Area--> <INCLUDE file="GlobalResDef.h"/> <INCLUDE file="GlobalMenuItems.h"/> <INCLUDE file = "mmi_rp_app_mainmenu_def.h"/> <!-----------------------------------------------------String Resource Area-----------------------------------------------------> /* String ID of you Application, we will get string from ref_list.txt for all languages */ <STRING id="STR_ID_ALM_STRINGID"/> <STRING id="ALARMS_SNOOZE_STRINGID"/> <MENU id="ORGANIZER_ALARM_MENU" type="APP_MAIN" parent="MAIN_MENU_EXTRA_MENUID" str="STR_GLOBAL_ALARM" img="ORGANIZER_MENU_ALARMS_IMAGEID" highlight="HighlightAlmMenu" shortcut="ON" shortcut_img="ORGANIZER_MENU_ALARMS_IMAGEID" launch="EntryAlmMenu"> </APP>
到这里已经可以完成菜单的添加了。如果把文档看下去就是每个XML标签的细节。现在没什么时间了,后面再续写。
还有一点编译查LOG得小经验记录下:
1、查看option.mak的宏有没有起作用、库有没有被编译到,可以在build\工程名\log\infomake.log查得到。
2、查看菜单有没有添加上,可以找plutommi\Customer\CustResource\CustMenuTree_Out.c文件,里面有所有菜单的目录树。
3、要查看MMI_Features.h的宏有没有被编译到,可以查看所有build\工程名\MMI_Features.h文件。
4、如果是使用ADD_APPLICATION_MENUITEM_HILITE_HANDLER绑定高亮菜单的时间,资源编译完成后可以在Mmi_menu_handlers.h检查是否有对应上。