# AWTK 应用程序中的资源 ## 一、项目目录结构 使用 [AWTK Designer](https://awtk.zlg.cn/) (下文简称:Designer)可以创建 AWTK 项目,默认情况下,项目的目录结构如下表所示: | 项目 | 说明 | | ------------- | ----------------------------------------------------------------------------- | | 3rd | 存放 Designer 安装的插件(自定义控件)以及其他第三方库。 | | bin | 存放可执行文件和动态库。 | | design | 存放项目的原始资源,可在Designer上编辑。 | | lib | 存放静态库。 | | res | 存放项目运行时需要的资源,由 Designer 打包或者scripts/update_res.py脚本生成。 | | scripts | 存放编译项目和打包资源的脚本。 | | src | 存放项目的源码文件。 | | tests | 存放项目的单元测试代码。 | | project.json | 项目的描述文件,包含项目设置等信息,Designer 可通过该文件打开项目。 | | manifest.json | 校验文件,保存项目文件的 md5 信息。 | | SConstruct | SCons编译脚本。 | ## 二、资源目录结构 项目创建后,design 目录默认有一个名称为"default"的主题目录。主题的目录结构如下表所示: | 项目 | 说明 | | ------- | ------------------------------------------------------------------------------- | | data | 存放该主题的自定义资源,即除了字体、图片、语言、样式、UI、XML、脚本之外的文件。 | | fonts | 存放该主题使用的字体,内涵子目录详见下文。 | | images | 存放该主题使用的图片,内涵子目录详见下文。 | | scripts | 存放该主题使用的脚本文件。 | | strings | 存放该主题使用的语言文件。 | | styles | 存放该主题使用的样式文件。 | | ui | 存放该主题使用的UI文件。 | (1) fonts 目录中包含以下子目录: - config:临时目录,存放记录字体的保留字符的文件; - origin:临时目录,存放被裁剪的TTF的原始文件。 (2) images 目录中包含以下子目录: - xx:存放与屏幕密度无关的图片; - x1:存放普通密度屏幕上使用的图片; - x2:存放2倍密度屏幕上使用的图片; - x3:存放3倍密度屏幕上使用的图片; - svg:存放svg图片。 > 备注:AWTK运行时会优先在 x1、x2、x3 目录中的其中一个查找图片(比如LCD的DPR=1,则在x1目录),如果找不到,则在xx目录中查找。 ## 三、如何使用常规资源 这里说的常规资源指的是 字体、图片、UI、样式等资源,具体的使用方法可以参考文档:[AWTK 中的资源管理](./assets_manager.md)。 ## 四、如何使用data目录下的资源(自定义资源) 主题中的 data 目录可以存放除了字体、图片、语言、样式、UI、XML、脚本之外的文件,比如项目的配置文件或者其他自定义类型的文件。这里假设项目存在一个配置文件 conf.json,内容如下: ```json { "tom": { "name": "tom", "age": 100 }, "jim": { "name": "jim", "age": 200 }, "kite": { "name": { "first": "kite", "last": "gates" } } } ``` 可以将它存放在项目的 design/default/data 目录中,其中"default"是主题名称,使用 Designer 或执行 scripts/update_res.py 脚本打包资源时,会自动将该目录下的资源打包到 res 的对应目录中。 在代码中,可以通过 assets\_manager\_ref 接口查找并引用资源,代码如下: ```c assets_manager_t* am = assets_manager(); /* 获取资源管理器对象 */ asset_info_t* info = assets_manager_ref(am, ASSET_TYPE_DATA, "conf.json"); /* 查找并引用资源对应资源 */ /* 获取自定义资源并做处理,这里仅打印信息,可根据实际情况编写处理代码 */ log_debug("%s\n", (char*)info->data); assets_manager_unref(am, info); /* 释放引用资源 */ ``` ## 五、相关文档 * [AWTK 中的资源管理](./assets_manager.md)