[MTK FP]如何通过ICON ID的value找到对应的ICON
来源:互联网 发布:windows toolkit 下载 编辑:程序博客网 时间:2024/06/07 02:20
Hardware platform: MT6250
Software platform: MTK 11B
Lcd size: 220X176
1. 问题描述
如上图,如果接收到MMS provision,手机显示为默认图片(没有图片时显示该图片)。以此案例为例,本文介绍一种根据icon id的value来查找该icon放置位置的方法。
2. icon id的value跟踪
通常的界面跟踪方法,就是打断点在函数void dm_redraw_category_screen(void)上,然后观察ShowCategoryXXXScreen()的调用细节,这里的细节如下:
继续在下面函数打断点:
S32 mmi_um_ui_sh_get_async_item(S32 start_index, gui_iconlist_menu_item *menu_data, S32 num_of_item)
从该函数继续跟踪,代码堆栈如下:
srv_um_cache_search()
srv_um_check_msg_info_by_ref()
mmi_um_ui_fsm_ef_srv_check_msg_info_by_ref()
mmi_um_ui_fsm_ef_get_msg_info()
mmi_um_ui_sh_get_async_item()
load_chunk_asyncdynamic_item_buffer()
gui_list_menu_locate_highlighted_item()
gui_list_menu_goto_item()
gui_asyncdynamic_list_menu_goto_item()
asyncdynamic_list_goto_item_no_redraw()
wgui_async_list_resize_multi_icontext_menu()
ShowCategory263Screen_ext()
观察下图,可以查看icon_id的value为0xcc6d
3. 根据icon id的value来查找icon id的name
Icon id的值为0xcc6d,也就是十进制的52333
任意查看一个icon id对应的十进制值,比如mmi_rp_app_unifiedmessage_def.h中:
IMG_UM_UNREAD_ICON = 51240 + 1, /* BASE_ID + 1 */
这里IMG_UM_UNREAD_ICON的值为51241,而值52333的icon id应该在那个文件中呢?
所有定义资源id value的头文件,都在mmi_rp_all_defs.h中被include。那么我们以上面的mmi_rp_app_unifiedmessage_def.h文件为例看下他们之间的关系吧。
a. mmi_rp_all_defs.h包含mmi_rp_app_unifiedmessage_def.h
……
#include "mmi_rp_app_unifiedmessage_def.h"
#include "mmi_rp_app_search_web_def.h"
……
b. mmi_rp_app_unifiedmessage_def.h中定义了IMG_UM_UNREAD_ICON的value
/******************** Image resource IDs - begin ********************/
typedef enum
{
IMG_UM_UNREAD_ICON = 51240 + 1, /* BASE_ID + 1 */
IMG_UM_SEND_FAILED_ICON,
IMG_UM_MAIN_ID,
……
MMI_RP_APP_UNIFIEDMESSAGE_IMG_MAX
}mmi_rp_app_unifiedmessage_img_enum;
/******************** Image resource IDs - finish ********************/
如果我们能够把每个.h文件中定义的BASE_ID value和.h文件名按顺序列出来,那我们可以根据icon id value所在的范围,找出其所在的文件,然后在文件中找到其name。
下面的python程序就可以按序列出每个.h文件中定义的BASE_ID value和.h文件名:
# -*- coding: utf-8 -*-# It is ok at python-3.3.1rc1.msi installer condition.import osimport reimport localedef print_base_image_id_by_filename(filename, dictonary): start = False f = open(filename, 'r') for tmp_line in f: if re.match(r'^/[*]+ Image resource IDs - begin [*]+/$', tmp_line): start = True if re.match(r'^/[*]+ Image resource IDs - finish [*]+/$', tmp_line): start = False if start: m = re.match(r'^[ \t]+[\w_\d]+ = (\d+) \+ ', tmp_line) if m: s = locale.atoi(m.group(1)) dictonary[s] = filename f.close()def print_image_id(filename): dictonary = {} f = open(filename, 'r') for line in f: m = re.match(r'^#include "(.*)"$', line) if m: print_base_image_id_by_filename(m.group(1), dictonary) f_output = open('aest.txt', 'w+') for number in sorted(dictonary.keys()): f_output.write(locale.str(number)) f_output.write('\t') f_output.write(dictonary[number]) f_output.write('\n') f_output.close() f.close()print_image_id(r'mmi_rp_all_defs.h')
本程序基于python-3.3.1rc1.msi安装程序运行。所有的.h文件都在如下目录,这里也把python程序放置到这个目录下:
\mtk_6250\plutommi\Customer\CustomerInc\
并运行程序,最终生成的a_output.txt内容如下:
…….
52230 mmi_rp_app_cca_def.h
52331 mmi_rp_app_provbox_def.h
52567 mmi_rp_app_nss_def.h
…….
如上,52333这个值会出现在文件mmi_rp_app_provbox_def.h中,通过该文件来查看icon id的name:
typedef enum
{
IMG_ID_PROVBOX_APP_ICON = 52331 + 1, /* BASE_ID + 1 */
IMG_ID_PROVBOX_UNREAD,
IMG_ID_PROVBOX_READ,
MMI_RP_APP_PROVBOX_IMG_MAX
}mmi_rp_app_provbox_img_enum;
4. 根据icon id的名称来查找icon id的路径
ProvBox.res中可以查到IMG_ID_PROVBOX_UNREAD的路径为:
\\\\MainLCD\\\\ProvBox\\\\ProvBox_MsgUnread.pbm
该PR中,在图片包中文件名称为ProvBox_MsgUnread.png,而这里索引的名称是以.pbm为后缀的,所以修改为如下即可:
\\\\MainLCD\\\\ProvBox\\\\ProvBox_MsgUnread.png
5. 代码修改后效果查看
- [MTK FP]如何通过ICON ID的value找到对应的ICON
- 对于发生Hash冲突的key,如何找到对应value?
- 简单指南针icon(不像icon的icon..)
- 如何制作网页URL的图标(Icon)
- 如何快速确认一个缺失的ICON
- 如何隐藏已安装apk的icon
- android 如何调整状态栏icon的间距
- 如何实现ICON右上角的数字显示
- shortcut icon和icon的区别
- ios icon 需要的icon尺寸
- Android图片设备icon资源文件对应的文件夹
- iOS自动生成对应大小的icon图片代码
- 如何通过类名找到对应的dex文件
- Flex中如何通过icon样式从SWF中指定一个Button的例子
- ICON的大小
- 提供ICON的网站
- WindowsVista的官方ICON
- fusion-icon的问题
- 以.shtml为后缀的文件
- 在Web服务器启动阶段做初始化
- XCode经常出现的错误------ EXC_BAD_ACCESS 解决方案
- 2013年4月_武科大程序设计大赛_解题报告(problem 1004)
- 漫谈Cookie与Session 及其区别和联系
- [MTK FP]如何通过ICON ID的value找到对应的ICON
- strut2面试题
- 正则表达式知识汇总
- C#读取文件操作
- 一位ACMer过来人的心得
- 二叉树转双向链接表_LEARN FORM CSDN JULY
- Python文件编码---gbk?OR utf8?
- android 如何反编译apk文件
- NSString+NSMutableString+NSValue+NSAraay用法汇总