资源生成的过程

来源:互联网 发布:手机软件连不上网络 编辑:程序博客网 时间:2024/05/01 23:53

资源的总入口-----à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会在stringimageid 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,算法很简单已知道每个APPmin 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-->开机动画)。

原创粉丝点击