资源的总入口-----àInitializeResourceVariables( )
Map jtbl(jump table )
Mmidatatype.h : Resource table
1.加到RESOURCE_BASE_ENUM
#ifdef __MMI_ANDA_DSM__
RESOURCE_BASE_RANGE(APP_ANDA, 100),
#endif
这个宏展开是这样的:
ap_id,
RESOURCE_BASE_##id = ap_id,
RESOURCE_BASE_##id##_END = ap_id + count – 1
所以APP_ANDA不需要在其他地方定义,这里本身就在定义了!
2. Fill resouce table and define XXX_BASE and XXX_BASE_MAX for each application(加到数组g_mmi_resource_base_table中)
#ifdef __MMI_ANDA_DSM__
#define APP_ANDA_BASE ((U16) RESOURCE_BASE_APP_ANDA)
#define APP_ANDA_BASE_MAX ((U16) RESOURCE_BASE_APP_ANDA_END)
RESOURCE_BASE_TABLE_ITEM(APP_ANDA)
#endif
3.有了上面两步,就可以在自己应用的h文件中定义需要的资源ID了,如
typedef enum
{
STR_ANDAAPP_TITLE = APP_ANDA_BASE + 1,//这个base是纽带,和上面的定义联系起来
STR_JIQING_STR1, //超级玩家
STR_JIQING_STR2,
}STRINGID_LIST_ANDAAPP;
APP_ANDA_BASE + 1会在string、image的id enum中都用,不会重复吗?
resource_verno.h:
#define RESOURCE_TYPE_AUDIO 0x00000000
#define RESOURCE_TYPE_IMAGE 0x01000000
#define RESOURCE_TYPE_FONT 0x02000000
#define RESOURCE_TYPE_STR 0x03000000
#define RESOURCE_TYPE_J2ME 0x04000000
#define RESOURCE_TYPE_IME 0x05000000
#define RESOURCE_TYPE_LANG_PACK 0x06000000
CustDataRes.h:
typedef struct ResourceInfo
{
void *pValue;
void *pDisplayValue;
U32 nAppId;
U32 nMinId;
U32 nMaxId;
} ResourceInfo;
ADD_APPLICATION_STRING2(stringId, string, display)
|
|
SetStringWithDisplay(stringId, string, display, #stringId, __FILE__);
|
|
RESPRTONERECORD
RESPRTONERECORD(fp, nImgId, data, enum_value, resfile)将数组中某些数据的格式化输出到string_resource_usage.txt中。具体过程是:
1.GetOffsetFromResourceBase(nImgId)从g_mmi_resource_base_table中找到此ID所在的应用的索引,即为offset,算法很简单已知道每个APP的min max只要此ID在此范围即可确定
2.RESPRT(fp, app, base, ID, strID, size, data, resfile)
string_resource_usage.txt各列对应的数据分别是这个函数的参数,其中fp指的是文件名
RESPRT(fp,g_mmi_resource_base_table[offset].appname, g_mmi_resource_base_table[offset].min,nImgId,enum_value,g_ressize, data, resfile);
修改全局变量的值如:
CurrMaxStringId++;
StrIsPopulate[nStrId] = 1;
StrEnum[nStrId] = pEnum_value;
Str[nStrId] = pString;
IMAGE最终Resgen后生成数组的位置:
Custimgdatahw.h是放置一般的图片的地方,但是后来mtk把开机logo、开关机动画、墙纸的图片放到Custimgdatahwext.h里面去了,还有一个很特别的图片就是加载nand时显示的进度条,这是开机lcd显示的第一张图片,放在custnfbprogressimg.c中,不过一般公司都会修改此张图片,可能不再是进度条,但是入口不会改变,在Nfb_loader.c中用宏NFB_DisplayProgressBar(X)进行封装。(顺便说一下mtk开机LCD显示过程,一般是:NAND加载图片-->开机LOGO-->开机动画)。