往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)
模块级build-profile.json5文件
配置文件结构
模块级build-profile.json5文件整体的结构如下。
apiType
targets
└── name
└── runtimeOS
└── config
└── distroFilter / distributionFilter
└── apiVersion
└── policy
└── value
└── screenShape
└── policy
└── value
└── screenWindow
└── policy
└── value
└── screenDensity
└── policy
└── value
└── countryCode
└── policy
└── value
└── deviceType
└── buildOption
└── atomicService
└── preloads
└── moduleName
└── source
└── abilities
└── name
└── pages
└── res
└── icon
└── label
└── launchType
└── pages
└── sourceRoots
└── resource
└── directories
└── output
└── artifactName
showInServiceCenter
buildOption
buildOptionSet
└── name
└── debuggable
└── copyFrom
└── resOptions
└── compression
└── media
└── enable
└── filters
└── method
└── type
└── blocks
└── files
└── path
└── size
└── resolution
└── exclude
└── path
└── size
└── resolution
└── copyCodeResource
└── enable
└── excludes
└── externalNativeOptions
└── path
└── abiFilters
└── arguments
└── cppFlags
└── cFlags
└── targets
└── sourceOption
└── workers
└── nativeLib
└── filter
└── excludes
└── pickFirsts
└── pickLasts
└── enableOverride
└── select
└── package
└── version
└── include
└── exclude
└── debugSymbol
└── strip
└── exclude
└── headerPath
└── collectAllLibs
└── excludeFromHar
└── excludeSoFromInterfaceHar
└── librariesInfo
└── name
└── linkLibraries
└── napiLibFilterOption
└── excludes
└── pickFirsts
└── pickLasts
└── enableOverride
└── arkOptions
└── runtimeOnly
└── sources
└── packages
└── types
└── obfuscation
└── ruleOptions
└── enable
└── files
└── consumerFiles
└── buildProfileFields
└── integratedHsp
└── transformLib
└── branchElimination
└── byteCodeHar
└── bundledDependencies
└── autoLazyImport
└── apPath
└── hostPGO
└── removePermissions
└── name
buildModeBinder
└── buildModeName
└── mappings
└── targetName
└── buildOptionName
entryModules
配置文件字段说明
下表为"Ability"类型的Module(HAP)对应的模块级build-profile.json5中配置项包含的字段,"Library"类型的Module(HAR和HSP)对应的模块级build-profile.json5中配置项为下表罗列范围的子集。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
apiType | 字符串 | 可选 | API模型类型:
|
对象数组 | 可选 | 定义的target,可配置多个;若配置,数组长度至少为1。 | |
showInServiceCenter | 布尔值 | 可选 | 是否显示在服务中心:
|
对象 | 可选 | 模块在构建过程中的相关配置。 其中不支持配置name、debuggable和copyFrom字段。 在FA模型中,arkOptions配置中仅支持配置types字段。 | |
buildOptionSet | 对象数组 | 可选 | 表16buildOption的集合,其中name字段必填,每个配置都是当前支持的编译过程中所有可用工具的通用配置选项集。 |
对象数组 | 可选 | 构建模式(debug、release 等)与构建配置(buildOption)的关联配置。通过该配置可以将不同的构建配置和target进行组合,并绑定到对应的构建模式上,其中构建模式需要在工程级别的构建模式列表中已定义。 | |
entryModules | 字符串数组 | 可选 | Feature类型模块所关联的入口模块。 |
targets
targets用于给模块配置多目标产物,可配置多个;若配置,数组长度至少为1。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
name | 字符串 | 必选 | target名称。 |
runtimeOS | 字符串 | 可选 | target的目标运行环境:
|
对象 | 可选 | target相关配置。 | |
对象 | 可选 | target的源码范围。 | |
对象 | 可选 | target包含的资源目录。 | |
对象 | 可选 | 定制产品生成的应用包的配置。 |
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
directories | array | 可选 | 资源目录地址。 |
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
artifactName | string | 必选 | 自定义产品生成的应用包名称,可由数字、英文字母、中划线、下划线和英文句号(.)组成,支持输入版本号。 |
targets字段示例:
"targets": [
{
"name": "default",
"resource": {
"directories": ["./src/main/resources"]
},
"output": {
"artifactName": "customizedTargetOutputName-1.0.0"
}
}
]
config
config是target相关配置。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
对象 | 可选 | 应用市场分发规则。在FA模型中使用。 | |
对象 | 可选 | 应用市场分发规则。在Stage模型中使用。 | |
deviceType | 字符串数组 | 可选 | target支持的设备类型,必须在module.json5中已定义。 在FA模型中,对应的文件为config.json。 |
对象 | 可选 | 模块在构建过程中的相关配置。 其中不支持配置name、debuggable和copyFrom字段。 | |
对象 | 可选 | 元服务相关配置,仅支持在Stage模型中配置。 |
source
source用于指定target的源码范围。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
对象数组 | 可选 | 自定义target的能力范围。 在FA模型工程中支持对Ability源码目录下的page页面进行定制。 | |
字符串数组 | 可选 | Stage模型工程中支持对pages源码目录的page页面进行定制,数组长度至少为1。 | |
字符串数组 | 可选 | Stage模型工程中支持对差异化代码空间进行定制,数组长度至少为1。数组中的值有以下限制:
当数组中存在多个值时,寻址的优先级为数组中值的顺序。 |
source字段示例:
"targets": [
{
"name": "default",
"source": {
"pages": [ // Stage模型
"pages/Index"
],
"abilities": [ // FA模型
{
"name": ".MainAbility",
"pages": [
"pages/index"
]
}
],
"sourceRoots": [
"./src/default"
]
}
}
]
distroFilter/distributionFilter
distroFilter/distributionFilter用于指定应用市场分发规则,distroFilter在FA模型中使用,distributionFilter在Stage模型中使用。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
对象 | 可选 | 支持的apiVersion范围。 | |
对象 | 可选 | 屏幕形状的支持策略。 | |
对象 | 可选 | 应用运行时窗口的分辨率支持策略。 | |
对象 | 可选 | 屏幕的像素密度支持策略。 | |
对象 | 可选 | 应用需要分发的国家地区码。 |
apiVersion
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
policy | 字符串 | 必选 | 取值规则:
|
value | 整型数组 | 必选 | 支持的取值为API Version存在的整数值,例如10。 |
screenShape
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
policy | 字符串 | 必选 | 取值规则:
|
value | 字符串数组 | 必选 | 支持的取值范围:
|
screenWindow
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
policy | 字符串 | 必选 | 当前取值仅支持“include”。
|
value | 字符串数组 | 必选 | 单个字符串的取值格式为“宽*高”,取值为整数像素值,例如"454*454"。 |
screenDensity
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
policy | 字符串 | 必选 | 取值规则:
|
value | 字符串数组 | 必选 | 取值范围:
|
countryCode
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
policy | 字符串 | 必选 | 取值规则:
|
value | 字符串数组 | 必选 | 国家地区码取值,具体值以ISO-3166-1标准为准。支持多个国家和地区枚举定义。 |
distroFilter/distributionFilter字段示例:
"targets": [
{
"name": "default",
"config": {
"distributionFilter": {
"apiVersion": {
"policy": "include",
"value": [12]
},
"screenShape": {
"policy": "include",
"value": [
"circle",
"rect"
]
},
"screenWindow": {
"policy": "include",
"value": [
"454*454",
"466*466"
]
},
"screenDensity": {
"policy": "exclude",
"value": [
"ldpi",
"xldpi"
]
},
"countryCode": {
"policy": "include",
"value": [
"CN"
]
}
}
},
}
]
atomicService
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
对象数组 | 可选 | 定义当前模块运行时预加载的模块。 |
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
moduleName | 字符串 | 可选 | 预加载的模块名称。 |
atomicService字段示例:
"targets": [
{
"name": "default",
"config": {
"atomicService": {
"preloads": [
{
"moduleName": "preloadSharedLibrary"
}
]
}
}
}
]
abilities
abilities用于自定义target的能力范围。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
name | 字符串 | 必选 | 指定target选择的ability的名称。 |
字符串数组 | 可选 | FA模型中,指定target选择的ability的page。 | |
res | 字符串数组 | 可选 | 指定资源目录。 |
icon | 字符串 | 可选 | 指定ability图标文件的索引,格式为"$media:ability_icon"。 |
label | 字符串 | 可选 | 指定对用户可见的名称,要求采用该名称的资源索引,以支持多语言。 |
launchType | 字符串 | 可选 | 指定ability的启动模式:
|
abilities字段示例:
"targets": [
{
"name": "default",
"source": {
"abilities": [
{
"name": "EntryAbility",
"icon": "$media:layered_image",
"label": "$string:EntryAbility_label",
"launchType": "singleton"
}
]
}
}
]
buildOption
buildOption是模块在构建过程中的相关配置,buildOptionSet和targets中也支持配置buildOption。此外,工程级build-profile.json5中也支持配置buildOption。工程级别buildOption配置会与模块级别的buildOption进行合并。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
name | 字符串 | 可选 | 构建配置方案buildOption的名称。 |
debuggable | 布尔值 | 可选 | 当前编译产物是否为可调试模式(debug):
当使用release的构建模式时,默认为false。 |
copyFrom | 字符串 | 可选 | 配置已定义的buildOption的name,表示从本模块已有的buildOption复制配置。 |
对象 | 可选 | 资源编译配置项。 | |
对象 | 可选 | Native编译配置项。 | |
对象 | 可选 | 源码相关配置。使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理。 | |
对象 | 可选 | Native 库(.so)相关配置。 | |
对象 | 可选 | NAPI库(.so)文件的筛选选项。标记为废弃,不建议使用,推荐使用nativeLib/filter。 | |
对象 | 可选 | ArkTS编译配置。 | |
对象数组 | 可选 | 指定编译时需要删除的依赖包中的冗余权限,模块本身的权限不会被删除,仅HAP/HSP模块支持配置。 |
sourceOption
sourceOption是源码相关配置,使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
workers | 字符串数组 | 可选 | 指定使用node.js工作器的JS/TS源代码,源代码在构建过程中单独处理。 |
sourceOption字段示例:
"buildOption": {
"sourceOption": {
"workers": [
"./src/main/ets/common/constants/CommonConstants.ets"
]
}
}
napiLibFilterOption
napiLibFilterOption是NAPI库(.so)文件的筛选选项,字段已废弃,不建议使用,推荐使用nativeLib/filter。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
excludes | 字符串数组 | 可选 | 排除的.so文件。罗列的NAPI库将不会被打包。 |
pickFirsts | 字符串数组 | 可选 | 按照.so文件的优先级顺序,打包最高优先级的.so文件。 |
pickLasts | 字符串数组 | 可选 | 按照.so文件的优先级顺序,打包最低优先级的.so文件。 |
enableOverride | 布尔值 | 可选 | 是否允许当.so文件重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件:
|
arkOptions
arkOptions是ArkTS编译配置。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
对象 | 可选 | 配置动态import的文件和依赖的包名,仅支持在Stage模型中配置。 runtimeOnly为非必选配置,当工程需要以变量方式动态import文件、目录的相对路径或三方包时,需要通过配置runtimeOnly来确保其加入编译流程。 | |
字符串数组 | 可选 | 自定义类型,可配置包名或d.ts/d.ets文件路径。 | |
对象 | 可选 | 代码混淆配置。 | |
对象 | 可选 | 运行时可获取的自定义构建参数,支持键值对配置,key可由数字、英文、下划线、中划线组成,value类型仅支持string、number、boolean。 | |
integratedHsp | 布尔值 | 可选 | 是否为集成态HSP。
|
字符串 | 可选 | 字节码插桩插件配置,允许开发者在编译时对字节码进行插桩修改,仅支持Stage模型,格式为相对路径,不同系统要求的文件类型如下,文件内容需要在对应平台生成,不能拷贝修改后缀名混用。
| |
branchElimination | 布尔值 | 可选 | 是否启用代码分支裁剪,减少编译产物大小,开启后,在release编译模式下,不会被执行到的代码分支会被裁剪掉,示例如下:
|
byteCodeHar | 布尔值 | 可选 | 是否构建字节码HAR,仅在HAR模块中配置后生效。
|
bundledDependencies | 布尔值 | 可选 | 是否支持将多个源码HAR(本地+远程)打包成一个字节码HAR。字节码HAR、HSP、npm不会被打包进去,仅会合并源码HAR。
|
autoLazyImport | 布尔值 | 可选 | 编译时是否自动将符合lazy-import语法规范的import语句添加"lazy"关键字。仅支持在源码中添加"lazy"关键字,不包含依赖的字节码HAR包或HSP。
|
apPath | 字符串 | 可选 |
应用热点信息文件路径。 |
hostPGO | 布尔值 | 可选 | 是否启用配置文件引导优化功能:
从API 10开始废弃。 |
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
sources | array | 可选 | 配置动态import的文件/文件夹的相对路径。 配置的文件/文件夹必须在工程中真实存在,且文件的后缀只能为ets或ts。 |
packages | array | 可选 | 配置动态import依赖的包名。 该包名需要和工程级/模块级oh-package.json5的dependencies中的名字保持一致。 |
arkOptions字段示例:
"buildOption": {
"arkOptions": {
"runtimeOnly": {
"sources": ["./src/main/ets/utils/Calc.ets"],
"packages": ["myHar"]
},
"buildProfileFields": {
"buildOptionSetData": "BuildOptionSetDataRelease",
"data": "DataRelease"
},
"transformLib": "./dll/example.dll",
"branchElimination": true,
"autoLazyImport": true
}
}
removePermissions
removePermissions是一个对象数组,用于编译HAP/HSP模块时,指定需要删除的依赖包中的冗余权限,模块本身的权限不会被删除。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
name | 字符串 | 必选 | 待删除的权限名称,需要包含在依赖包的module.json的requestPermissions中。 |
removePermissions字段示例:
"buildOption": {
"removePermissions": [
{
"name": "ohos.permission.ABILITY_BACKGROUND_COMMUNICATION"
},
{
"name": "ohos.permission.ACCELEROMETER"
}
]
}
resOptions
resOptions是资源编译配置项。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
对象 | 可选 | 对工程预置图片资源进行纹理压缩的编译配置参数。 | |
对象 | 可选 | 对模块的src/main/ets目录下的资源文件(非源码文件)拷贝的编译配置参数。 说明 该字段对不开启混淆的源码HAR不生效。 |
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
enable | 布尔值 | 可选 | 是否将ets目录下的资源文件打包到产物中。
|
excludes | 字符串数组 | 可选 | 根据glob语法排除匹配到的文件,匹配到的文件不会被打包到产物中。当enable配置为false时excludes不生效。 |
copyCodeResource字段示例:
"buildOption": {
"resOptions": {
"copyCodeResource": {
"enable": true,
"excludes": ['./entry/src/main/ets/component/big_picture.png', '**/*.yml', '**/subDir/**'],
}
}
}
compression
compression是对工程预置图片资源进行纹理压缩的编译配置参数。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
对象 | 可选 | 对资源目录下media目录的图片进行纹理压缩的配置参数。 | |
对象数组 | 可选 | 文件过滤配置参数。 说明 编译过程中会依次遍历图片文件,并与filters条件进行匹配,一旦匹配成功,则完成该图片的处理。当工程级和模块级同时配置时,先按照模块级的过滤条件匹配,一旦匹配成功,则忽略工程级的过滤条件;如果模块级的没有匹配成功,继续按工程级的条件进行匹配。 |
media
media是对资源目录下media目录的图片进行纹理压缩的配置参数。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
enable | 布尔值 | 可选 | 是否对media图片启用纹理压缩。
|
filters
filters是文件过滤配置参数。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
对象 | 必选 | 纹理压缩的方式。 | |
对象 | 可选 | 指定用来参与压缩的文件,与exclude字段配合使用。 | |
对象 | 可选 | 从files中剔除掉不需要压缩的文件。 |
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
type | 字符串 | 必选 | 转换类型。
|
blocks | 字符串 | 必选 | astc/sut转换类型的扩展参数,决定画质和压缩率,当前仅支持"4x4"。 |
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
path | 字符串数组 | 可选 | 指定“按路径匹配”的过滤条件,符合glob规范,格式为相对路径,配置示例: |
size | 二维数组 | 可选 | 指定“按大小匹配”的过滤条件,格式为[min,max],闭区间,表示大小从min到max之间的文件,配置示例:
|
resolution | 二维数组 | 可选 | 指定“按分辨率匹配”的过滤条件,配置示例:
|
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
path | 字符串数组 | 可选 | 同files/path。 |
size | 二维数组 | 可选 | 同files/size。 |
resolution | 二维数组 | 可选 | 同files/resolution。 |
compression字段示例:
"buildOption": {
"resOptions": {
"compression": {
"media": {
"enable": true // 是否对media图片启用纹理压缩
},
// 纹理压缩文件过滤,非必填,不填会压缩资源目录中的所有图片
"filters": [
{
"method": {
"type": "sut", // 转换类型
"blocks": "4x4" // 转换类型的扩展参数
},
// 指定用来参与压缩的文件,需要满足所有条件且不被exclude过滤的文件才会参与压缩
"files": {
"path": ["./**/*"], // 指定资源目录中的所有文件
"size": [[0, '10k']], // 指定大小10k以下的文件
// 指定分辨率小于2048*2048的图片
"resolution": [
[
{ "width": 0, "height": 0 }, // 最小宽高
{ "width": 2048, "height": 2048 } // 最大宽高
]
]
},
// 从files中剔除掉不需要压缩的文件,需要满足所有过滤条件的文件才会被剔除
"exclude": {
"path": ["./**/*.jpg"], // 过滤所有jpg文件
"size": [[0, '1k']], // 过滤大小1k以下的文件
// 过滤分辨率小于1024*1024的图片
"resolution": [
[
{ "width": 0, "height": 0 }, // 最小宽高
{ "width": 1024, "height": 1024 } // 最大宽高
]
]
}
}
]
}
}
}
buildModeBinder
buildModeBinder是构建模式(debug、release 等)与构建配置(buildOption)的关联配置。通过该配置可以将不同的构建配置和target进行组合,并绑定到对应的构建模式上。如果没有配置buildModeBinder,默认的绑定策略请参考合并编译选项规则。
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
buildModeName | 字符串 | 可选 | 构建模式名称,需要在工程级别的buildModeSet中定义。 |
对象数组 | 可选 | target和buildOption之间的一对一映射关系。 |
字段名称 | 类型 | 是否必选 | 含义 |
---|---|---|---|
targetName | 字符串 | 可选 | target名称。 |
buildOptionName | 字符串 | 可选 | 构建配置buildOption名称。 |
buildModeBinder字段示例:
"buildModeBinder": [
{
"buildModeName": "debug",
"mappings": [
{
"targetName": "default",
"buildOptionName": "release"
}
]
}
]