restool工具
简介
restool是一种应用工程资源编译工具,通过编译资源文件创建资源索引、解析资源,开发者可以调用资源管理接口获取到对应资源。restool工具保存在sdk安装目录下的toolchains子目录。
参数说明
restool支持的命令选项
| 选项 | 是否可缺省 | 是否存在入参 | 描述 |
|---|---|---|---|
| -i/--inputPath | 不可缺省 | 带参数 | 指定需要构建的资源目录或者资源中间件。 在资源目录中支持指定一个编译好的HAP/HSP资源目录(解压态),在此HAP/HSP的基础上完成叠加编译。 具体可参考如下编译资源命令。 |
| -j/--json | 不可缺省 | 带参数 | 指定config.json或者module.json文件路径。 |
| -o/--outputPath | 不可缺省 | 带参数 | 指定已编译资源的输出路径。 |
| -p/--packageName | 不可缺省 | 带参数 | 指定编译资源的bundle名称。 |
| -r/--resHeader | 不可缺省 | 带参数 | 指定资源的头文件生成路径,文件内容为资源名称与资源ID的映射表,支持4种格式:“.txt”、“.js”、“.h”、“.ts”。 说明: - “.txt”、“.js”、“.h”格式的文件包含-i指定的所有资源目录下的资源映射表。 - 从API version 23开始,支持“.ts”格式,文件内容仅包含-i指定的HAR编译产物的资源目录下的资源映射表。 |
| -e/--startId | 可缺省 | 带参数 | 指定生成资源的起始ID值,例如:0x01000000,范围[0x01000000, 0x06FFFFFF),[0x08000000, 0xFFFFFFFF)。 |
| -f/--forceWrite | 可缺省 | 不带参数 | 如果输出路径已经存在。强制删除,重新生成。 |
| -h/--help | 可缺省 | 不带参数 | 查看工具帮助信息。 |
| -m/--modules | 可缺省 | 带参数 | 多模块 联合编译时,指定多个模块名。用“,”连接。 |
| -x/--append | 可缺省 | 带参数 | 指定生成中间文件的资源目录或单个资源路径。同一个命令可以多次指定。 |
| -z/--combine | 可缺省 | 不带参数 | 针对资源中间文件目录,生成编译结果。 |
| -l/--fileList | 可缺省 | 带参数 | 指定命令选项的集合json文件,例如:resConfig.json。详细格式请查看下方-l/--fileList参数说明。 |
| -v/--version | 可缺省 | 不带参数 | 查看工具版本号。 |
| --ids | 可缺省 | 带参数 | 指定生成id_defined.json的输出目录。 |
| --defined-ids | 可缺省 | 带参数 | 指定id_defined.json文件路径,一般都是通过--ids生成。 id_defined.json包含资源类型、名称及其ID的列表。 开发者可以自定义id_defined.json中的资源ID。 |
| --dependEntry | 可缺省 | 带参数 | FA模型下单独编译feature时,指定entry模块的编译结果目录。 |
| --icon-check | 可缺省 | 不带参数 | 开启icon和startWindowIcon的PNG图片校验功能。 |
| --compressed-config | 可缺省 | 带参数 | 指定需要进行纹理压缩的json配置文件。例如:opt-compression.json,json配置文件的详细格式请查看下方--compressed-config参数说明。 |
| --thread | 可缺省 | 带参数 | 指定资源编译时开启的子线程数量。 说明: 从API version 18开始,支持该选项。 |
| --target-config | 可缺省 | 带参数 | 与“-i”命令同时使用,支持选择编译。 具体可参考如下target-config参数说明。 |
| --ignored-file | 可缺省 | 带参数 | 指定资源文件和资源目录的忽略规则,格式为正则表达式,多个规则之间以“:”分隔。文件、目录的名称与正则表达式匹配的会被忽略。 例如:“.git:.svn”可以忽略所有名称为“.git”、“.svn”的文件和目录。 说明: 从API version 19开始,支持该选项。 |
| --ignored-path | 可缺省 | 带参数 | 指定资源文件和资源目录的忽略规则,格式为正则表达式,多个规则之间以“:”分隔。文件、目录的名称或路径与正则表达式匹配的会被忽略。 例如:“.+/rawfile/.git:.svn”中第一个正则包含指定路径“.+/rawfile/”,可以忽略rawfile目录下的“.git”文件和目录,不会忽略其他目录下的“.git”文件和目录;第二个规则不包含任何指定路径,可以忽略所有名称为“.svn”的文件和目录。 说明: 从API version 23开始,支持该选项。 |
target-config参数说明
支持参数配置类型:MccMnc、Locale、Orientation、Device、ColorMode、Density。
参数格式说明:配置之间用“;”分割,配置中的值用“[]”封装,并使用“,”分割。
MccMnc匹配规则:Mcc(国家码)必须相同;Mnc(网络码)不存在时默认匹配,否则Mnc须相同才匹配。
Locale匹配规则:Locale匹配需满足以下三条规则。
1、语言须相同。
2、脚本(文字)不存在时默认匹配,否则必须相同。
3、国家或地区不存在时默认匹配,否则必须相同。
参数举例说明:Locale[zh_CN,en_US];Device[phone],该参数过滤其他语言,保留能匹配上zh_CN和en_US的语言;过滤其他设备,保留phone;其他参数(如MccMnc、Orientation等)配置不过滤均保留。
-l/--fileList参数说明
用于指定命令选项集合的json文件,json文件包含的字段与命令选项的对应关系如下。
| 字段名称 | 类型 | 命令选项 | 描述 |
|---|---|---|---|
| configPath | string | -j/--json | 请参考-j/--json的说明。 |
| packageName | string | -p/--packageName | 请参考-p/--packageName的说明。 |
| output | string | -o/--outputPath | 请参考-o/--outputPath的说明。 |
| startId | string | -e/--startId | 请参考-e/--startId的说明。 |
| moduleNames | string | -m/--modules | 请参考-o/--outputPath的说明。 |
| ResourceTable | string[] | -r/--resHeader | 可以包含多个路径,相当于多次指定-r/--resHeader。 |
| applicationResource | string | -i/--inputPath | 指定AppScope的资源目录。 |
| moduleResources | string[] | -i/--inputPath | 指定当前模块的资源目录,可以包含多个目录,相当于多次指定-i/--inputPath。 |
| dependencies | string[] | -i/--inputPath | 指定依赖模块的资源目录,可以包含多个目录,相当于多次指定-i/--inputPath。 |
| entryCompiledResource | string | --dependEntry | 请参考--dependEntry的说明。 |
| iconCheck | boolean | --icon-check | 是否启用icon和startWindowIcon的PNG图片校验功能。 - true:启用。 - false(缺省默认值):不启用。 |
| ids | string | --ids | 请参考--ids的说明。 |
| definedIds | string | --defined-ids | 请参考--defined-ids的说明。 |
| compression | string | --compressed-config | 请参考--compressed-config的说明。 |
| thread | integer | --thread | 请参考--thread的说明。 |
| ignoreResourcePattern | string[] | --ignored-file | 请参考--ignored-file的说明。 |
| ignoreResourcePathPattern | string[] | --ignored-path | 请参考--ignored-path的说明。 |
| qualifiersConfig | object | --target-config | 指定选择编译的参数配置,格式为json,支持的字段与--target-config的配置类型一致,字段类型为字符串数组,表示一个配置类型下可以配置多个值。举例说明:{"Locale":["zh_CN","en_US"], "Device":["phone"]}等同于--target-config的配置Locale[zh_CN,en_US];Device[phone]。 说明: 从API version 23开始,支持该字段。 |
--compressed-config参数说明
在DevEco Studio配置纹理压缩的编译配置参数,编译后会在模块的build\default\intermediates\res\default下生成restool的纹理压缩配置文件opt-compression.json,文件结构如下:
{
"context": {
// 纹理压缩库的绝对路径
"extensionPath": "xxx\\xxx\\libimage_transcoder_shared.dll"
},
"compression": {
// 是否对预置media图片资源启用纹理压缩。true:启用,false:不启用。
"media": {
"enable": true
},
// filters是预置media图片资源的过滤配置参数
"filters": [
{
// 纹理压缩的方式,type为转换类型,支持"astc"、"sut"
// block为转换扩展参数,决定画质和压缩率,当前仅支持"4x4"
"method": {
"blocks": "4x4",
"type": "astc"
},
// 需要压缩的media图片资源文件绝对路径
"path": [
"xxx\\MyApplication\\entry\\src\\main\\resources\\base\\media\\startIcon.png",
"xxx\\MyApplication\\entry\\src\\main\\resources\\base\\media\\icon.png",
],
// 需要过滤的media图片资源文件绝对路径
"exclude_path": [],
// 按大小和分辨率匹配path中的图片资源文件路径,符合条件的文件将被压缩
"rules_origin": {
// 二维数组,数组中每个元素表示一个大小范围,单位为字节
"size": [
[
0,
10485760
]
],
// 二维数组,数组中每个元素表示一个分辨率范围,如下表示分辨率从0x0到1024x1024
"resolution": [
[
{
"height": 0,
"width": 0
},
{
"height": 1024,
"width": 1024
}
]
]
},
// 按大小和分辨率匹配exclude_path中的图片资源文件,符合条件的文件将被过滤
"rules_exclude": {
"size": [
[
0,
1048576
]
],
"resolution": [
[
{
"height": 0,
"width": 0
},
{
"height": 64,
"width": 64
}
]
]
}
}
]
}
}
restool支持的子命令
| 命令 | 描述 |
|---|---|
| dump | 以json的格式输出HAP包中resource的内容。 |
dump命令
restool dump [-h] [config] filePath
dump命令参数列表:
| 参数 | 是否可缺省 | 是否存在入参 | 描述 |
|---|---|---|---|
| -h | 可缺省 | 不带参数 | 帮助信息。 |
| config | 可缺省 | 不带参数 | 只打印HAP包中资源的限定词信息。 |
示例:
# 打印HAP包中所有的资源信息
restool dump entry.hap
# 打印HAP包中资源的限定词信息
restool dump config entry.hap
使用实例
例如,entry目录结构如下:
entry/src/main
| |----resource
| | |----base
| | | |----element
| | | |----media
| | | |----profile
| | |----rawfile
| | |----resfile
| |----config.json/module.json
编译资源
编译资源的方式有三种,分别是全量资源编译、增量资源编译和叠加资源编译。其中增量编译仅预览模式可用,用于预览开发阶段的组件效果;全量编译用于构建工程的资源文件;叠加编译支持将工程中的资源叠加进已有的HAP模板资源中,复用已编译的资源项。
1、全量资源编译,命令如下:
restool -i entry/src/main -j entry/src/main/module.json -p com.ohos.demo -o out -r out/ResourceTable.txt -f
2、增量资源编译,具体步骤如下:
步骤一:生成资源中间件,命令如下:
restool -x entry/src/main/resource -o out
步骤二:编译资源中间件,命令如下:
restool -i out1 -i out2 -o out -p com.ohos.demo -r out/ResourceTable.txt -j entry/src/main/module.json -f -z
3、叠加资源编译,命令如下:
# hapResource为解压后的HAP包路径
restool -i entry/src/main -i hapResource -j entry/src/main/module.json -p com.ohos.demo -o out -r out/ResourceTable.txt -f
固定资源ID
固定资源ID,具体步骤如下:
步骤一:创建id_defined.json文件。创建方式有两种,分别是通过命令行和自定义。
- 方式一:通过命令行生成此文件,命令如下:
restool -i entry/src/main -j entry/src/main/module.json -p com.ohos.demo -o out -r out/ResourceTable.txt --ids out -f
- 方式二:自定义文件,文件名必须是id_defined.json,文件内容如下:
{
"record" :
[
{
"id" : "0x01000000", // 资源需要固定的ID值
"name" : "app_name", // 资源名称
"type" : "string" // 资源类型
}
]
}
步骤二:完成资源ID固定。完成固定的方式有两种,通过命令一完成固定或者将自定义的id_defined.json放在resource/base/element/目录下后通过命令二完成固定。
- 命令一:
restool -i entry/src/main -j entry/src/main/module.json -p com.ohos.demo -o out1 -r out1/ResourceTable.txt --defined-ids out/id_defined.json -f
- 命令二:
restool -i entry/src/main -j entry/src/main/module.json -p com.ohos.demo -o out1 -r out1/ResourceTable.txt -f
restool工具错误码
11201001 加载依赖库失败
错误信息
Failed to load the library 'xxx.dll'.
错误描述
加载依赖库失败。
可能原因
- 依赖库路径错误或路径无访问权限。
- 三方依赖库未安装,或路径错误,或路径无访问权限。
- 出现Windows系统报错,由于在用户环境变量和系统环境变量中,排在xxx.dll路径之前的路径文件无法被访问,导致加载依赖库时搜索环境变量错误。
处理步骤
- 检查依赖库路径是否准确且有访问权限。
- 按照错误信息提示安装缺失的三方依赖库,并保证三方依赖库路径准确且有访问权限。
- 将SDK下的xxx/HarmonyOS/previewer/common/bin路径及依赖库所在路径添加至环境变量Path的前两行,两者先后顺序无限制。
11203001 JSON文件打开失败
错误信息
Failed to open the JSON file 'xxx.json'.
错误描述
JSON文件打开失败。
可能原因
JSON文件路径错误,或无访问权限。
处理步骤
检查JSON文件路径是否准确且有访问权限。
11203002 JSON文件解析失败
错误信息
Failed to parse the JSON file: incorrect format.
错误描述
JSON文件格式错误,解析失败。
可能原因
JSON文件格式错误,如包含多余的逗号等。
处理步骤
检查JSON文件格式,可参考JSON。
11203003 JSON节点的类型与预期不匹配
错误信息
The value type of node 'xxx' does not match. Expected type: xxx.
错误描述
JSON中xxx节点的类型错误。
可能原因
JSON中对应节点的类型错误,如预期类型是string,实际类型为number。
处理步骤
检查JSON中xxx节点的类型。
11203004 JSON中缺少必需节点
错误信息
The required node 'xxx' is missing.
错误描述
JSON中缺少必需的xxx节点。
可能原因
JSON中没有配置对应的必需节点,如name、value等。
处理步骤
检查JSON中是否缺少xxx节点。
11203005 JSON中存在空object或空数组
错误信息
The array or object node 'xxx' cannot be empty.
错误描述
JSON中xxx节点为空object或空数组。
可能原因
JSON中对应节点为空,如object配置为{},或数组配置为[]。
处理步骤
检查JSON中xxx节点是否为空。
11203006 JSON中包含多个子节点
错误信息
The node 'xxx' in the JSON file can have only one member.
错误描述
JSON中xxx节点仅能包含一个子节点。
可能原因
JSON中对应节点包含了多个子节点。
处理步骤
检查xxx节点是否仅包含一个子节点。
11203007 无效的JSON节点名称
错误信息
Invalid node name 'xxx'. Valid values: ["boolean","color","float","id","intarray","integer","pattern","plural","strarray","string","symbol","theme"].
错误描述
无效的JSON节点名称xxx。
可能原因
JSON中对应节点的名称错误,不在指定的名称["boolean","color","float","id","intarray","integer","pattern","plural","strarray","string","symbol","theme"]范围内。
处理步骤
检查JSON中xxx节点的名称是否在指定的范围内。
11204001 创建文件失败
错误信息
Failed to create the directory or file 'xxx'.
错误描述
创建文件失败。
可能原因
文件路径错误,或无访问权限。
处理步骤
检查文件路径是否准确且有访问权限。
11204003 删除文件失败
错误信息
Failed to delete the directory or file 'xxx'.
错误描述
删除文件失败。
可能原因
文件路径错误,或无访问权限。
处理步骤
检查文件路径是否准确且有访问权限。
11204004 拷贝文件失败
错误信息
Failed to copy the file from 'xxx' to 'xxx'.
错误描述
拷贝文件失败。
可能原因
文件路径错误,或无访问权限。
处理步骤
检查文件路径是否准确且有访问权限。
11204005 打开文件失败
错误信息
Failed to open the file 'xxx'.
错误描述
打开文件失败。
可能原因
文件路径错误,或无访问权限。
处理步骤
检查文件路径是否准确且有访问权限。
11204006 读取文件失败
错误信息
Failed to read the file 'xxx'.
错误描述
读取文件失败。
可能原因
- 文件路径错误,或无访问权限。
- 文件内容为空。
处理步骤
- 检查文件路径是否准确且有访问权限。
- 检查文件内容是否为空。
11210001 未知命令选项
错误信息
Unknown option 'xxx'.
错误描述
未知命令选项。
可能原因
不支持对应命令选项。
处理步骤
检查命令是否准确,可使用-h查看命令帮助信息,输入正确的命令选项和参数。
11210002 选项缺少必需参数
错误信息
Option 'xxx' requires an argument.
错误描述
选项缺少必需的参数。
可能原因
选项缺少必需的参数,如-i/--inputPath没有指定输入路径。
处理步骤
检查命令是否准确,可使用-h查看命令帮助信息,输入正确的命令选项和参数。
11210003 无效参数
错误信息
Invalid argument value 'xxx'.
错误描述
无效的参数。
可能原因
命令选项均需带有前缀短划线-,选项对应的参数无短划线,若输入选项时遗漏了短划线,该选项将被当作参数处理,无法生效,如输入restool inputPath。
处理步骤
检查命令是否准确,可使用-h查看命令帮助信息,输入正确的命令选项和参数。
11210004 无效的输入路径
错误信息
Invalid input path 'xxx'.
错误描述
无效的输入路径。
可能原因
-i/--inputPath选项指定的路径参数错误,或无访问权限。
处理步骤
检查路径参数是否准确且有访问权限。
11210005 重复的输入路径
错误信息
Duplicated input path 'xxx'.
错误描述
重复的输入路径。
可能原因
多个-i/--inputPath选项指定了相同的输入路径。
处理步骤
检查-i/--inputPath选项指定的路径是否重复。
11210006 包名存在冲突
错误信息
The package names 'xxx' and 'xxx' conflict.
错误描述
包名存在冲突。
可能原因
多次指定了-p/--packageName选项。
处理步骤
检查是否多次指定-p/--packageName选项。