跳到主要内容

工程级build-profile.json5文件

配置文件结构

工程级build-profile.json5文件整体的结构如下。

app
└── signingConfigs
└── name
└── material
└── storePassword
└── certpath
└── keyAlias
└── keyPassword
└── profile
└── signAlg
└── storeFile
└── type
└── products
└── name
└── signingConfig
└── bundleName
└── buildOption
└── packOptions
└── buildAppSkipSignHap
└── fastBuildApp
└── enableSourceCodeCheck
└── deduplicateHar
└── appWithSignedPkg
└── enableIncrementalSoCompress
└── debuggable
└── generateSharedTgz
└── resOptions
└── compression
└── media
└── enable
└── filters
└── method
└── type
└── blocks
└── files
└── path
└── size
└── resolution
└── exclude
└── path
└── size
└── resolution
└── resCompileThreads
└── copyCodeResource
└── enable
└── includes
└── excludes
└── ignoreResourcePattern
└── excludeHarRes
└── includeAppScopeRes
└── idDefinedFilePath
└── externalNativeOptions
└── path
└── abiFilters
└── arguments
└── cppFlags
└── sourceOption
└── workers
└── nativeLib
└── filter
└── excludes
└── pickFirsts
└── pickLasts
└── enableOverride
└── select
└── package
└── version
└── includePattern
└── excludePattern
└── include
└── exclude
└── debugSymbol
└── strip
└── exclude
└── headerPath
└── collectAllLibs
└── excludeFromHar
└── excludeSoFromInterfaceHar
└── excludeSoFromBinXO
└── napiLibFilterOption
└── excludes
└── pickFirsts
└── pickLasts
└── enableOverride
└── arkOptions
└── buildProfileFields
└── types
└── tscConfig
└── targetESVersion
└── maxFlowDepth
└── autoLazyImport
└── autoLazyFilter
└── include
└── exclude
└── reExportCheckMode
└── branchElimination
└── skipOhModulesLint
└── expandImportPath
└── enable
└── exclude
└── apPath
└── hostPGO
└── strictMode
└── noExternalImportByPath
└── useNormalizedOHMUrl
└── caseSensitiveCheck
└── duplicateDependencyCheck
└── harLocalDependencyCheck
└── enableStrictCheckOHModule
└── disableSendableCheckRules
└── nativeCompiler
└── removePermissions
└── name
└── preloadSystemSo
└── runtimeOS
└── arkTSVersion
└── compileSdkVersion
└── compatibleSdkVersion
└── targetSdkVersion
└── compatibleSdkVersionStage
└── bundleType
└── label
└── icon
└── versionCode
└── versionName
└── buildVersion
└── resource
└── directories
└── output
└── artifactName
└── vendor
└── buildModeSet
└── name
└── buildOption
└── multiProjects
└── capabilities
└── bundleName
└── config
└── name
└── capability
└── subCapabilities
└── name
└── capability
modules
└── name
└── srcPath
└── targets
└── name
└── applyToProducts

配置文件字段说明

工程级build-profile.json5文件包含以下字段。

表1 工程级build-profile.json5文件字段说明

字段名称类型可选/必选含义
app对象必选编译配置信息。
modules对象数组必选工程中包含的所有模块的信息,数组长度至少为1。

app

app是工程级的编译配置,包含签名、product等信息。

表2 app

字段名称类型可选/必选含义
signingConfigs对象数组可选签名方案信息,可配置多个。
products对象数组可选产品品类,可配置多个。如需配置多个,相关说明请参见配置多目标产物章节。
buildModeSet对象数组可选构建模式集合,可配置多个。
multiProjects布尔值可选当前工程是否支持多工程构建: - true:支持。 - false(缺省默认值):不支持。
capabilities对象数组可选应用开通的开放能力,具体开通方式请参考关联注册应用进行签名。 从DevEco Studio 6.0.0 Beta5版本开始支持。

modules

modules是一个对象数组,用于描述工程中包含的所有模块,数组长度至少为1。模块配置包括名称、路径和target-product关联配置。

表3 modules

字段名称类型可选/必选含义
name字符串必选模块的名称。该名称需与module.json5文件中的module.name保持一致。 在FA模型中,对应的文件为config.json。
srcPath字符串必选模块的源码路径,为模块根目录相对工程根目录的相对路径,允许模块根目录不在当前工程下,详情请参考导入/引用模块。 说明: 当前支持引用其他工程下的HAR和HSP模块。
targets对象数组可选模块的target信息,用于定制多目标构建产物时,配置模块target和应用product之间的关联关系。

表4 targets

字段名称类型可选/必选含义
name字符串必选target名称,在各个模块级build-profile.json5中的targets字段定义。HAR模块无需配置。
applyToProducts字符串数组可选target关联的product。HAR模块无需配置。

modules字段示例:

{
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default" // 表示将该模块下的"default" Target打包到"default" Product中
]
}
]
}
]
}

signingConfigs

signingConfigs是一个对象数组,用于配置签名方案,可配置多个。

表5 signingConfigs

字段名称类型可选/必选含义
name字符串必选签名方案的名称,仅支持数字和字母,长度为1~64个字符。
material对象必选签名方案相关材料,如密码、证书等。 通过File > Project Structure... > Project > Signing Configs界面,进行自动签名后,material节点中的各配置项会自动填充。
type字符串可选签名类型: - HarmonyOS - OpenHarmony

表6 material

字段名称类型可选/必选含义
storePassword字符串必选密钥库密码,以密文形式呈现。
certpath字符串必选调试或发布证书文件地址,文件后缀为.cer。
keyAlias字符串必选密钥别名信息。
keyPassword字符串必选密钥密码,以密文形式呈现。
profile字符串必选调试或发布证书Profile文件地址,文件后缀为.p7b。
signAlg字符串必选密钥库signAlg参数。当前可配置值SHA256withECDSA。
storeFile字符串必选密钥库文件地址,文件后缀为.p12。

signingConfigs字段示例:

{
"app": {
"signingConfigs": [
{
"name": "default",
"type": "HarmonyOS",
"material": {
"certpath": "D:\\SigningConfig\\debug_hos.cer",
"storePassword": "******",
"keyAlias": "debugKey",
"keyPassword": "******",
"profile": "D:\\SigningConfig\\debug_hos.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "D:\\SigningConfig\\debug_hos.p12"
}
}
]
}
}

products

products是一个对象数组,用于配置产品品类信息,可配置多个,如通用默认版、付费版、免费版等。如需配置多个,相关说明请参见配置多目标产物章节。

表7 products

字段名称类型可选/必选含义
name字符串必选产品的名称,必须存在name为"default"的product。
signingConfig字符串可选当前产品品类的签名方案名称,需要在signingConfigs.name中定义。如果没有配置,默认不签名。
compatibleSdkVersion字符串/数值必选标识应用/元服务运行所需兼容的最低SDK版本,应用/元服务不能安装在低于该版本的设备。当前支持的版本参考所有HarmonyOS版本。相关字段与应用兼容性关系参见应用兼容性说明。 - 运行环境是HarmonyOS时,字段类型是字符串,配置示例:"compatibleSdkVersion": "6.1.0(23)"。 - 运行环境是OpenHarmony时,字段类型是数值,配置示例:"compatibleSdkVersion": 23。 说明: 构建APP包时,打包工具会对HSP和HAP的compatibleSdkVersion字段进行校验,满足条件的才能打包,具体请参考打包工具
targetSdkVersion字符串/数值可选标识应用/元服务运行所需目标SDK版本,是系统提供的前向兼容手段。如果新SDK版本中API行为发生变更,将应用/元服务安装到新系统后,可通过该字段提供向前兼容手段,在新系统版本保持老的API行为。 如未配置,默认与compileSdkVersion保持一致。当前支持的版本参考所有HarmonyOS版本。相关标签与应用兼容性关系参见应用兼容性说明。 - 运行环境是HarmonyOS时,字段类型是字符串,配置示例:"targetSdkVersion": "6.1.0(23)"。 - 运行环境是OpenHarmony时,字段类型是数值,配置示例:"targetSdkVersion": 23。 说明: - 建议配置该字段。 - 构建APP包时,打包工具会对HSP和HAP的targetSdkVersion字段进行校验,满足条件的才能打包,具体请参考打包工具
compileSdkVersion字符串/数值可选标识编译应用/元服务所使用的SDK版本。当前支持的版本参考所有HarmonyOS版本。相关标签与应用兼容性关系参见应用兼容性说明。 - 运行环境是HarmonyOS时,字段类型是字符串,配置示例:"compileSdkVersion": "6.1.0(23)"。 - 运行环境是OpenHarmony时,字段类型是数值,配置示例:"compileSdkVersion": 23。 说明: - 运行环境是HarmonyOS时,该字段不需要显性配置,编译时默认使用DevEco Studio内置的SDK版本。如果配置,只能配置为当前DevEco Studio配套的SDK版本,不允许配置为其他SDK版本。 - 运行环境是OpenHarmony时,必须配置该字段。
compatibleSdkVersionStage字符串可选当compatibleSdkVersion为API 12时,用于控制不同beta版本的兼容,默认值为beta1,应用/元服务不能安装在低于该版本的设备。 当compatibleSdkVersion高于API 12时,该字段无效,无需配置。 说明: 配置betaX就能生成在对应betaX版本镜像上运行的应用,但是无法使用高于betaX版本的特性,例如在API 12中beta3版本提供的sendable function和lazy import两个特性在配置beta2或beta1时无法正常使用。
bundleName字符串可选产品的包名。
buildOption对象可选产品的编译构建配置。
runtimeOS字符串可选产品的运行环境: - HarmonyOS - OpenHarmony
arkTSVersion字符串可选ArkTS语法检查工具的版本号:1.0,1.1。 默认为当前ArkTS语法检查工具支持的最新版本。 仅API 11及以上版本工程支持。
bundleType字符串可选包的类型: - app:应用 - atomicService:元服务 - shared:共享包
label字符串可选应用的名称。 说明: 配置products中的label、icon、versionCode、versionName、resource字段后,编译构建时将根据此处的配置替换app.json5中的相关配置,常用于应用和元服务可分可合构建打包场景。
icon字符串可选应用的图标。
versionCode整型数值可选应用的版本号。
versionName字符串可选应用的版本名称。
buildVersion字符串可选应用的构建版本号。 从DevEco Studio 6.1.0 Beta2版本开始支持。
resource对象可选名称和图标对应的资源所在目录。
output对象可选定制产品生成的应用包的配置。
vendor字符串可选供应商。

表8 resource

字段名称类型可选/必选含义
directories字符串数组必选资源地址路径。

表9 output

字段名称类型可选/必选含义
artifactName字符串必选自定义产品生成的应用包名称,可由数字、英文字母、中划线、下划线和英文句号(.)组成,支持输入版本号。

products字段示例:

{
"products": [
{
"name": "default",
"signingConfig": "default",
"bundleName": "com.example.myapplication",
"compatibleSdkVersion": "6.1.0(23)",
"targetSdkVersion": "6.1.0(23)",
"runtimeOS": "HarmonyOS",
"arkTSVersion": "1.1",
"bundleType": "app",
"label": "$string:app_name",
"icon": "$media:app_background",
"versionCode": 1000000,
"versionName": "1.0.0",
"buildVersion": "1",
"resource": {
"directories": [
"./AppScope/resources"
]
},
"output": {
"artifactName": "customizedTargetOutputName-1.0.0"
},
"vendor": "customizedProductVendorName",
}
]
}

buildModeSet

buildModeSet是一个对象数组,表示构建模式集合,可配置多个构建模式。

表10 buildModeSet

字段名称类型可选/必选含义
name字符串必选构建模式名称。默认生成debug,release和test三种模式,支持开发者自定义,其中test模式虽然没有出现在配置文件中,但是利用测试框架开启测试时会自动使用test编译模式。
buildOption对象可选构建模式使用的具体配置信息。

capabilities

capabilities是应用开通的开放能力,具体开通方式请参考关联注册应用进行签名

表11 capabilities

字段名称类型可选/必选含义
bundleName字符串必选当前开放能力归属的包名。
config对象数组必选具体的开放能力配置。

config

表12 config

字段名称类型可选/必选含义
name字符串必选开放能力名称。
capability字符串可选开放能力的唯一标识符。如果subCapabilities不存在,则该值必填。
subCapabilities对象数组可选具体的子开放能力。如果存在子开放能力,则该值必填。

表13 subCapabilities

字段名称类型可选/必选含义
name字符串必选子开放能力名称。
capability字符串必选子开放能力的唯一标识符。

buildOption

buildOption是构建使用的具体配置信息,buildModeSet和products下均支持配置buildOption。此外,模块级build-profile.json5中也支持配置buildOption。工程级别buildOption配置会与模块级别的buildOption进行合并,具体合并规则和优先级请参考合并编译选项规则

表14 buildOption

字段名称类型可选/必选含义
packOptions对象可选打包相关配置项。
debuggable布尔值可选当前编译产物是否为可调试模式: - true:可调试。构建的产物包的ets目录下存在sourceMaps.map文件,此文件包含源码映射等信息。 - false:不可调试。 如果未配置debuggable字段,使用release的编译模式时,默认值为false,使用其他编译模式时,默认值为true。
generateSharedTgz布尔值可选编译HSP模块时是否生成tgz包。 - true:生成。 - false:不生成。 如果未配置generateSharedTgz,根据debuggable字段决定是否生成tgz包。debuggable为true时,不生成tgz包,debuggable为false时,生成tgz包。 从DevEco Studio 5.1.1 Beta1版本开始支持。 说明: 该字段配置后仅对HSP模块生效。
resOptions对象可选资源编译配置项。
externalNativeOptions对象可选Native编译配置项。
sourceOption对象可选源码相关配置。使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理。
nativeLib对象可选Native 库(.so)相关配置。
napiLibFilterOption对象可选NAPI库(.so)文件的筛选选项。标记为废弃,不建议使用,推荐使用nativeLib/filter
arkOptions对象可选ArkTS 编译配置。
strictMode对象可选严格模式。
nativeCompiler字符串可选指定Native编译时使用的编译器,包括: - Original(缺省默认值):原有的OpenHarmony Native编译器。 - BiSheng:使用毕昇编译器进行Native编译。 说明: 升级到DevEco Studio 5.1.1 Release版本后,新建Native C++工程默认使用毕昇编译器,打开历史工程会弹窗提示,点击立即体验可以切换使用毕昇编译器。
removePermissions对象数组可选编译HAP/HSP模块时,指定需要删除的依赖包中的冗余权限,模块本身的权限不会被删除。
preloadSystemSo布尔值可选是否收集应用入口所使用的系统so,收集的系统so会在应用冷启动时进行预加载,优化应用的冷启动性能。 - true:收集。 - false(缺省默认值):不收集。 从DevEco Studio 6.0.0 Beta3版本开始支持。 说明: - 应用入口:在module.json5的module下配置的srcEntry标签,或者在module.json5的abilities中配置了具有入口能力的skills标签(即配置了entity.system.home和ohos.want.action.home)。 - 仅支持HAP和字节码HAR,编译HAP时,被应用入口import的文件或者源码HAR,如果存在系统so,也会被收集;字节码HAR在被集成时,系统so会被合并到HAP中。 - 变量动态import不支持收集。 - preloadSystemSo和hvigor-config.json5文件的ohos.arkCompile.singleFileEmit字段互斥,不支持同时设置为true。

packOptions

packOptions是打包相关配置项。

表15 packOptions

字段名称类型可选/必选含义
buildAppSkipSignHap布尔值可选构建APP时,是否跳过生成签名HAP: - true:跳过,即不生成签名HAP。 - false(缺省默认值):不跳过,即生成签名HAP。 编译构建APP时,无需生成签名HAP,可将此参数修改为true,从而提升编译构建性能。
fastBuildApp布尔值可选构建APP时,是否在模块下生成HAP/HSP产物。 - true:不生成HAP/HSP产物,直接生成APP产物,可加快构建速度。 - false(缺省默认值):生成HAP/HSP产物,同时生成APP产物。 说明: - 当fastBuildApp配置为true时,无论buildAppSkipSignHap配置为true还是false,都不会生成HAP产物。 - 当fastBuildApp配置为false时,是否生成HAP产物,以buildAppSkipSignHap配置为准。
enableSourceCodeCheck布尔值可选是否检查HAP/HSP/HAR包(不包括未开启混淆的源码HAR)产物中的源码文件,如果检查,当产物中存在源码文件时,编译时会进行Warning提示。 - true(缺省默认值):检查。 - false:不检查。 从DevEco Studio 6.0.0 Beta3版本开始支持。 说明: - 源码文件是指包含以下后缀的文件:['.c', '.h', '.cpp', '.cs', '.java', '.rs', '.py', '.go', '.ets', '.js', '.ts']。 - release模式编译的混淆源码har包中的'.js', '.ts'和'.d.ets'文件不会被检查。 - resources目录下的'.js'文件不会被检查。
deduplicateHar布尔值可选构建APP/HAP/HSP时,当HAP/HSP依赖相同的HAR时(包括HAP和HSP依赖相同的HAR,多个HSP依赖相同的HAR),是否去除HSP中重复的HAR,减少包体积。 - true:去除,HAR仅会打包到HAP中,同时需要配置以下字段。 - 工程级build-profile.json5中配置idDefinedFilePath。 - 工程级build-profile.json5的useNormalizedOHMUrl配置为true。 - module.json5的libIsolation配置为false。 - false(缺省默认值):不去除,HAR会打包到每个HAP/HSP中。 说明: - 从DevEco Studio 6.0.1 Beta1版本开始支持,并且设备系统需要升级到6.0.1(21),工程级build-profile.json5的compatibleSdkVersion需要配置为6.0.1(21)。 - 多个HSP依赖相同的HAR时,依赖HSP的HAP需要显式配置依赖该HAR。 - 仅支持本地HSP模块,不支持已打包的HSP包。 - 不支持去除重复HAR的场景: - 一个应用包含多个HAP时 - 单独运行或调试HSP - 仪器测试和本地单元测试 - 预览场景
appWithSignedPkg布尔值可选构建APP时,除了默认的app包之外,是否额外生成产物名称带all的app包(xxx-all-unsigned.app和xxx-all-signed.app),app包里的hap和hsp都是签名的包。 - true:除了默认的app包之外,额外生成产物名称带all的app包,包里的hap和hsp都是签名的包。 - false(缺省默认值):只生成默认的app包,包里的hap和hsp都是未签名的包。 从DevEco Studio 6.0.2 Beta1版本开始支持。 说明: 要生成xxx-all-unsigned.app和xxx-all-signed.app,除了appWithSignedPkg配置为true之外,需要确保已配置签名材料,并且hvigor-config.json5中的enableSignTask未配置为false。
enableIncrementalSoCompress布尔值可选构建HAP/HSP时,如果工程中包含大量so并开启了压缩so体积的配置开关(module.json5的compressNativeLibs或hvigor-config.json5的ohos.pack.compressLevel),可以开启此开关复用上一次构建已经压缩好的so,加快打包速度。 - true:开启增量压缩,如果so包内容未改变,HAP/HSP将会复用已经压缩好的so包。 - false(缺省默认值):不开启增量压缩,每次构建对所有so重新进行压缩。 从DevEco Studio 6.1.0 Beta1版本开始支持。
"buildOption": {
"packOptions": {
"buildAppSkipSignHap": true,
"fastBuildApp": false,
}
}

resOptions

resOptions是资源编译配置项。

表16 resOptions

字段名称类型可选/必选含义
compression对象可选对工程预置图片资源进行纹理压缩的编译配置参数。
resCompileThreads整型数值可选资源编译的线程数量 ,最小为1,最大为主机的CPU核数。 该字段从DevEco Studio 5.1.0 Release版本开始支持。
copyCodeResource对象可选对模块的src/main/ets目录下的资源文件(非源码文件)拷贝的编译配置参数。 说明: 该字段对不开启混淆的源码HAR不生效。
ignoreResourcePattern字符串数组可选根据glob语法,对资源目录resources或开发者自定义的资源目录下的文件/文件夹名称进行过滤,匹配到的文件不会被打包到产物中。 从DevEco Studio 5.1.1 Beta1版本开始支持。 说明: - 如果规则中带有路径(例如./src/main/a.png),该规则不生效。 - 如果未配置该字段,打包HAP/HSP时存在默认的过滤规则:默认不打包.git、.svn、.scc、.ds_store、desktop.ini、picasa.ini、cvs、thumbs.db以及以.开头的隐藏文件/目录和以~结尾的文件。 - 配置该字段后,会覆盖默认的过滤规则;如果字段配置为空数组,则不应用任何过滤规则,即全部资源都打包。
excludeHarRes字符串数组可选编译HAP/HSP模块时,指定不参与资源编译的三方HAR包的包名,配置后,依赖HAR包中的资源不会被打包到产物中,支持直接依赖和间接依赖。 从DevEco Studio 6.0.0 Beta2版本开始支持。 说明: 该字段仅对编译HAP/HSP生效。
includeAppScopeRes布尔值可选编译HSP时,是否将AppScope目录下的资源打包到产物中。 - true(缺省默认值):打包。 - false:不打包。 从DevEco Studio 6.0.0 Beta2版本开始支持。 说明: - 该字段仅对HSP模块生效。 - 配置为false后,app.json5的icon和label字段不再对HSP模块生效。
idDefinedFilePath字符串可选使用HAR包去重能力时(即工程级build-profile.json5的deduplicateHar配置为true),指定用户自定义的json5文件路径,用于固定资源id,支持绝对/相对路径,文件示例如下。 去除重复的HAR包后,HAR仅会打包到HAP中,因此HSP需要通过这些固定的id,跨包访问HAP中的资源。 从DevEco Studio 6.0.1 Beta1版本开始支持。

idDefinedFilePath指定的固定资源id的json5文件示例:

// id-config.json5
{
"record": [{
"type": "string", // 资源类型,推荐应用内所有的资源都固定id
"name": "app_name", // 资源名称
"id": "0x01000000" // 用户自定义的资源id,仅支持十六进制,支持的id范围是[0x01000000, 0x06FFFFFF],[0x08000000, 0xFFFFFFFF]
}, {
"type": "float",
"name": "float1",
"id": "0x01000001"
}, {
"type": "media",
"name": "background",
"id": "0x01000002"
}, {
"type": "profile",
"name": "profile1",
"id": "0x01000003"
}]
}

表17 copyCodeResource

字段名称类型可选/必选含义
enable布尔值可选是否将src/main/ets目录下的资源文件(.ets/.ts/.js以外的其他文件)打包到产物中。 - true(缺省默认值):打包。 - false:不打包。
includes字符串数组可选- 当enable为true时,用于指定打包的资源文件,其他资源文件均不会打包到产物中,支持glob语法,以"**/"开头。 - 当enable为false时,includes不生效。 从DevEco Studio 6.0.0 Beta2版本开始支持。 说明: includes和excludes互斥,只能配置一个。
excludes字符串数组可选- 当enable为true时,用于指定不打包的资源文件,其他资源文件均会打包到产物中,支持glob语法,以"**/"开头。 - 当enable为false时,excludes不生效。

  • 模块的src/main/ets目录下,编译时仅处理.ets/.ts/.js文件,其他文件会被当作资源文件打包进产物中,不会进行混淆或加密,如需过滤请配置excludes字段。
  • 请勿将源码等文件放在以.开头的系统隐藏目录中,可能会导致过滤规则失效,会将src/main/ets目录下的所有文件作为资源文件打包进产物中,不会进行混淆或加密。

resOptions字段示例:

"buildOption": {
"resOptions": {
"resCompileThreads": 2,
"copyCodeResource": {
"enable": true,
"excludes": ['**/entry/src/main/ets/component/big_picture.png', '**/*.yml', '**/subDir/**'], // includes字段配置方式相同
},
"ignoreResourcePattern": ['*.png' ,'abc.json'],
"excludeHarRes": ['har'],
"idDefinedFilePath": "./id-config.json5", // 支持绝对路径和相对路径
}
}

sourceOption

sourceOption是源码相关配置,使用不同的标签对源代码进行分类,以便在构建过程中对不同的源代码进行不同的处理。

表18 sourceOption

字段名称类型可选/必选含义
workers字符串数组可选指定使用node.js工作器的JS/TS源代码,源代码在构建过程中单独处理。

sourceOption字段示例:

"buildOption": {
"sourceOption": {
"workers": [
"./src/main/ets/common/constants/CommonConstants.ets"
]
}
}

napiLibFilterOption

napiLibFilterOption是NAPI库(.so)文件的筛选选项,字段已废弃,不建议使用,推荐使用nativeLib/filter

表19 napiLibFilterOption

字段名称类型可选/必选含义
excludes字符串数组可选排除的.so文件。罗列的NAPI库将不会被打包。
pickFirsts字符串数组可选按照.so文件的优先级顺序,打包最高优先级的.so文件。
pickLasts字符串数组可选按照.so文件的优先级顺序,打包最低优先级的.so文件。
enableOverride布尔值可选是否允许当.so文件重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件: - true:允许。 - false(缺省默认值):不允许。

arkOptions

arkOptions是ArkTS编译配置。

表20 arkOptions

字段名称类型可选/必选含义
buildProfileFields对象可选用于ArkTS的构建配置。自定义类型,key可由数字、英文、下划线、中划线组成,value类型仅支持string、number、boolean。
types字符串数组可选自定义类型,可配置包名或d.ts/d.ets文件路径。
tscConfig对象可选与编译TS语法相关的配置选项。
autoLazyImport布尔值可选编译时是否自动将符合lazy-import语法规范的import语句添加"lazy"关键字。仅支持在源码中添加"lazy"关键字,不包含依赖的字节码HAR包或HSP。关于lazy-import的介绍及相关影响请参考延迟加载(lazy import)。 - true:添加。 - false(缺省默认值):不添加。 说明: - 如果配置为true,编译时不会做场景识别,即源码中任何符合语法规范的import语句都会被添加"lazy"。 - 仅支持Stage模型。
autoLazyFilter对象可选自定义添加"lazy"关键字的模块,仅当build-profile.json5中的autoLazyImport或hvigor-config.json5中的ohos.defaults.autoLazyImport配置为true时生效。 从DevEco Studio 6.0.1 Beta1版本开始支持。
reExportCheckMode字符串可选针对以下场景,编译时是否进行拦截报错:使用lazy import导入的变量,在同文件中被再次导出。 - noCheck(缺省默认值):不检查,不报错。 - compatible:兼容模式,报Warning。 - strict:严格模式,报Error。 该字段从DevEco Studio 5.0.5 Release版本开始支持。
branchElimination布尔值可选是否启用代码分支裁剪,减少编译产物大小,开启后,在release编译模式下,不会被执行到的代码分支会被裁剪掉,示例请参考branchElimination示例。 - true:启用(将导致使用"ApplyChanges"功能时,对const声明的常量的值进行的修改可能不生效)。 - false(缺省默认值):不启用。 说明: - 仅支持API 11及以上的Stage模型。 - HAR模块仅字节码HAR配置生效,非字节码HAR配置不生效。 - 仅支持const声明的bool类型常量和const声明的string/number类型常量的判断表达式。 - 不支持间接导入,例如A文件中定义const变量A1,B文件导入A1,导出B1,ets导入B1进行判断,无法进行裁剪。
skipOhModulesLint布尔值可选是否跳过工程中oh_modules目录的ArkTS规则检查。从DevEco Studio 6.0.0 Beta1版本开始支持。 - true:跳过。 - false(缺省默认值):不跳过。
expandImportPath对象可选import路径展开相关配置选项。 从DevEco Studio 6.0.0 Beta3版本开始支持。
apPath字符串可选说明: API 11及以上版本不再支持,即该字段配置后不再生效。 应用热点信息文件路径。
hostPGO布尔值可选是否启用配置文件引导优化功能: - true:启用。 - false(缺省默认值):不启用。 从API 10开始废弃,由于partial模式可能存在兼容性问题,请使用Target AOT能力,不建议使用Host AOT。
  • branchElimination字段配置为true时,代码分支的裁剪情况示例如下:

    // 编译生成的BuildProfile文件
    export const DEBUG = false;
    export const VERSION_CODE = 100;
    // 开发者自定义的ets文件
    import { DEBUG } from 'BuildProfile';
    import { VERSION_CODE } from 'BuildProfile';
    if (DEBUG)
    {XXX} // 该分支会被裁剪掉
    else
    {XXX}
    if (VERSION_CODE){XXX} // 该语法发生了类型转换,不支持代码裁剪。
    if (VERSION_CODE === 100){XXX} // 若需要裁剪代码,使用该方式,显式指定判断条件为boolean类型。

表21 tscConfig

字段名称类型可选/必选含义
targetESVersion字符串可选指定TS语法编译产物的目标运行时EcmaScript版本,包括: - ES2017 - ES2021(缺省默认值)。
maxFlowDepth整型数值可选设置最大控制流递归深度,范围为[2000,65535],默认为2000。 该字段从DevEco Studio 5.1.0 Release版本开始支持。 说明: maxFlowDepth不支持动态修改,即在hvigorfile.ts/hvigorconfig.ts文件中,不支持通过setBuildProfileOpt方法设置maxFlowDepth。

表22 expandImportPath

字段名称类型可选/必选含义
enable布尔值可选是否启用import路径展开,启用后可以提升应用的运行时性能。关于import路径展开的原理及开启后的副作用请参考通过import路径展开优化性能。 - true:启用。 - false(缺省默认值):不启用。 说明: - import XXX from 'A',A必须为本地HAR模块,并且仅当A为包名时支持进行展开,A为相对路径或包名+路径都不支持展开。 - HAR模块单独编译时不生效。
exclude字符串数组可选配置oh-package.json5中的依赖别名,用于指定不展开import语句的依赖,仅支持本地HAR模块。

表23 autoLazyFilter

字段名称类型可选/必选含义
include字符串数组可选- 当autoLazyImport或ohos.defaults.autoLazyImport为true时,指定自动添加"lazy"关键字的包名(即oh-package.json5中的name),其他包不会添加"lazy"关键字,支持正则语法。 - 当autoLazyImport为false时,include不生效。 说明: - include和exclude互斥,只能配置一个。 - include不支持配置空数组或空字符串,至少配置一个包名,并且包名不能重复。
exclude字符串数组可选- 当autoLazyImport或ohos.defaults.autoLazyImport为true时,指定不添加"lazy"关键字的包名,其他包都会添加"lazy"关键字,支持正则语法。 - 当autoLazyImport为false时,exclude不生效。 说明: - include和exclude互斥,只能配置一个。 - exclude不支持配置空数组或空字符串,至少配置一个包名,并且包名不能重复。

arkOptions字段示例:

"buildOption": {
"arkOptions": {
"buildProfileFields": {
"targetData": "TargetData",
"data": "DataTargetDefault"
},
"tscConfig": {
"targetESVersion": "ES2021",
"maxFlowDepth": 3000,
},
"autoLazyImport": true,
"autoLazyFilter": {
"include": ['entry']
},
"reExportCheckMode": "compatible",
"branchElimination": true,
"expandImportPath": {
"enable": true,
"exclude": ['localhar']
},
}
}

strictMode

strictMode用于定义严格模式。

表24 strictMode

字段名称类型可选/必选含义
noExternalImportByPath布尔值可选是否严格检查绝对路径导入方式和相对路径跨模块导入方式。 - true:严格检查。 - false:不严格检查。 说明: 从DevEco Studio NEXT Beta1(5.0.3.800)版本开始,当工程级build-profile.json5中useNormalizedOHMUrl配置为true时,noExternalImportByPath缺省默认值为true;当useNormalizedOHMUrl配置为false时,noExternalImportByPath缺省默认值为false。
useNormalizedOHMUrl布尔值可选是否使用标准化的OHMUrl(OHMUrl的定义参考以下说明)格式,标准化的OHMUrl统一了原有OHMUrl的格式。使用集成态HSP和字节码HAR需使用标准化的OHMUrl格式。 - true:使用标准化的OHMUrl格式。 - false(缺省默认值):不使用标准化的OHMUrl格式。 说明: - 从API 12开始支持。 - 一个ets文件在编译后会成为安装包的一部分,这个ets文件对应的字节码称为一个字节码段,OHMUrl是用来定位一个字节码段的标识。 - 若工程引用了HAR/HSP,需确保工程的useNormalizedOHMUrl配置和HAR/HSP的useNormalizedOHMUrl配置保持一致,同时配置为true或false。 - useNormalizedOHMUrl设置为true时,可能对本地源码HAR的混淆产生影响,具体请参考本地源码HAR包。 - 从DevEco Studio NEXT Beta1(5.0.3.800)版本开始,当useNormalizedOHMUrl设置为true时,不允许通过相对路径跨模块或绝对路径导入文件,oh-package.json5中依赖的包使用的别名需要和依赖包的oh-package.json5的name保持一致,具体的适配指导请参考变更说明
caseSensitiveCheck布尔值可选导入文件是否严格校验大小写,支持相对路径和软链接。 - true:严格校验。 - false(缺省默认值):不严格校验。
duplicateDependencyCheck布尔值可选是否校验本地HSP模块有无依赖相同的HAR。仅在Build App(s)起效。 - true:如果本地HSP模块依赖了相同的HAR(包括本地/远程、直接/间接),则编译报错。(注意:当依赖链中存在远程HSP,则该远程HSP及其依赖链不参与校验)。 - false(默认缺省值):不启用校验。
harLocalDependencyCheck布尔值可选是否对HAR产物启用本地依赖校验。 - true:如果oh-package.json5中的dependencies、dynamicDependencies存在本地依赖,则编译报错。 - false(默认缺省值):不启用校验。 说明: 除HAR模块外,HSP模块编译时也会生成HAR产物,该配置同样生效。
enableStrictCheckOHModule布尔值可选调用远程HAR/HSP包中的方法时,是否严格校验传入参数的类型。 - true:严格校验,如果参数类型是undefined/null,报Error错误。 - false(默认缺省值):不严格校验,如果参数类型是undefined/null,报Warning告警。 从DevEco Studio 6.0.1 Beta1版本开始支持。
disableSendableCheckRules字符串数组可选指定需要关闭校验的Sendable规则,当前仅支持配置"arkts-sendable-class-decorator",表示支持在Sendable class上使用自定义装饰器。具体检查规则请参考Sendable类和Sendable函数禁止使用除@Sendable外的装饰器。 从DevEco Studio 6.0.2 Beta1版本开始支持。

strictMode字段示例:

"buildOption": {
"strictMode": {
"useNormalizedOHMUrl": true,
"caseSensitiveCheck": true,
"disableSendableCheckRules": ["arkts-sendable-class-decorator"],
}
}

removePermissions

removePermissions是一个对象数组,用于编译HAP/HSP模块时,指定需要删除的依赖包中的冗余权限,模块本身的权限不会被删除。

表25 removePermissions

字段名称类型可选/必选含义
name字符串必选待删除的权限名称,需要包含在依赖包的module.json的requestPermissions中。

removePermissions字段示例:

"buildOption": {
"removePermissions": [
{
"name": "ohos.permission.ABILITY_BACKGROUND_COMMUNICATION"
},
{
"name": "ohos.permission.ACCELEROMETER"
}
]
}

compression

compression是对工程预置图片资源进行纹理压缩的编译配置参数。

表26 compression

字段名称类型可选/必选含义
media对象可选对资源目录下media目录的图片进行纹理压缩的配置参数。
filters对象数组可选文件过滤配置参数。 说明: 编译过程中会依次遍历图片文件,并与filters条件进行匹配,一旦匹配成功,则完成该图片的处理。当工程级和模块级同时配置时,先按照模块级的过滤条件匹配,一旦匹配成功,则忽略工程级的过滤条件;如果模块级的没有匹配成功,继续按工程级的条件进行匹配。

media

media是对资源目录下media目录的图片进行纹理压缩的配置参数。

表27 media

字段名称类型可选/必选含义
enable布尔值可选是否对media图片启用纹理压缩。 - true:启用。 - false(缺省默认值):不启用。 说明: - 在linux系统的构建场景下,请确认系统环境已安装libGL1库。 - 对图片进行纹理压缩会改变文件名称和内容,在分层图标以及二次编辑的场景下会引起图片显示异常,请进一步使用filters排除掉这部分文件。

filters

filters是文件过滤配置参数。

表28 filters

字段名称类型可选/必选含义
method对象必选纹理压缩的方式。
files对象可选指定用来参与压缩的文件,与exclude字段配合使用。
exclude对象可选从files中剔除掉不需要压缩的文件。

表29 method

字段名称类型可选/必选含义
type字符串必选转换类型。 - astc(Adaptive Scalable Texture Compression):自适应可变纹理压缩,一种对GPU友好的纹理格式,可在设备侧更快地显示,有更少的内存占用。 - sut(SUper compression for Texture) :纹理超压缩,可在设备侧更快地显示,有更少的内存占用,相比astc具备更大压缩率和更少ROM占用。
blocks字符串必选astc/sut转换类型的扩展参数,决定画质和压缩率,当前仅支持"4x4"。

表30 files

字段名称类型可选/必选含义
path字符串数组可选指定“按路径匹配”的过滤条件,符合glob规范,格式为相对路径。
size二维数组可选指定“按大小匹配”的过滤条件,格式为[min,max],闭区间,表示大小从min到max之间的文件。 - 每个数值可以填数字、字符串或字符串中带单位(大小写均可),如[0, '1k']。 - 单位K/k=1024,M/m=1024*1024,G/g=1024*1024*1024,T/t=1024*1024*1024*1024。 - 区间最大值可省略,表示无限大,如['3K']。
resolution二维数组可选指定“按分辨率匹配”的过滤条件,配置示例: resolution:[ [ { width:32, height:32 }, // 最小宽高 { width:64, height:64 }, // 最大宽高 ], // 分辨率在32*32到64*64之间的图片 [ { width:200, height:200 }, // 最小宽高 // 此处第2个不填表示最大宽高是无限大 ], // 分辨率大于200*200的图片 ] - width和height只能是数字。 - 最大宽高可以省略,表示无限大。

表31 exclude

字段名称类型可选/必选含义
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 } // 最大宽高
]
]
}
}
]
}
}
}