前言
本篇文章仅会介绍API9之后的Hvigor构建工具及其插件hvigor-ohos-plugin。且仅会介绍stage模型下的配置
1.鸿蒙使用Hvigor工具链对应用/服务进行打包,打包后的产物位于各自模块下的build文件夹中
2.打包后的产物包括一个.app文件和多个.hap文件
●.hap是可以直接运行在模拟器或真机设备中的软件包
●.app则是用于应用/服务上架到华为应用市场
3.任务流的执行是通过构建插件hvigor-ohos-plugin利用Hvigor的任务编排机制实现的
修改构建工具和构建插件版本
修改 hvigor 目录下的 hvigor-config.json5 文件
{
"@ohos/hvigor": "1.6.0",
"dependencies": {
"@ohos/hvigor-ohos-plugin": "1.6.0"
}
}
工程目录、配置文件、配置构建信息
无论是工程(App)级还是模块(Module)级,都提供以下三个文件
1.构建配置文件(build-profile.json5)
2.构建脚本文件(hvigorfile.ts)
3.依赖配置文件(oh-package.json5)
构建配置文件 build-profile.json5
构建配置文件,配置构建过程的一些参数
工程级 build-profile.json5
{
"app": {
// 工程的签名信息,可包含多个签名信息
"signingConfigs": [
{
// 标识签名方案的名称
"name": "default",
// 标识HarmonyOS应用
"type": "HarmonyOS",
// 该方案的签名材料
"material": {
// 调试或发布证书文件,格式为.cer
"certpath": "D:\\SigningConfig\\debug_hos.cer",
// 密钥库密码,以密文形式呈现
"storePassword": "******",
// 密钥别名信息
"keyAlias": "debugKey",
// 密钥密码,以密文形式呈现
"keyPassword": "******",
// 调试或发布证书Profile文件,格式为.p7b
"profile": "D:\\SigningConfig\\debug_hos.p7b",
// 密钥库signAlg参数
"signAlg": "SHA256withECDSA",
// 密钥库文件,格式为.p12
"storeFile": "D:\\SigningConfig\\debug_hos.p12"
}
}
],
// 指定HarmonyOS应用/服务编译时的SDK版本
"compileSdkVersion": 9,
// 指定HarmonyOS应用/服务兼容的最低SDK版本
"compatibleSdkVersion": 9,
// 定义构建的产品品类,如通用默认版、付费版、免费版等
"products": [
{
// 定义产品的名称,支持定制多product目标产物,具体请参考定制多目标构建产物
"name": "default",
// 指定当前产品品类对应的签名信息,签名信息需要在signingConfigs中进行定义
"signingConfig": "default",
}
]
},
"modules": [
{
// 模块名称
"name": "entry",
// 标明模块根目录相对工程根目录的相对路径
"srcPath": "./entry",
// 定义构建的APP产物,由product和各模块定义的targets共同定义
"targets": [
{
// target名称,由各个模块的build-profile.json5中的targets字段定义
"name": "default",
"applyToProducts": [
// 表示将该模块下的“default” Target打包到“default” Product中
"default"
]
}
]
}
]
}
模块级 build-profile.json5
{
// API类型,支持FA和Stage模型
"apiType": 'stageMode',
// 是否在服务中心展示
"showInServiceCenter": true,
"buildOption": {
// 配置筛选har依赖.so资源文件的过滤规则
"napiLibFilterOption": {
// 按照.so文件的优先级顺序,打包最高优先级的.so文件
"pickFirsts": [
"**/1.so"
],
// 按照.so文件的优先级顺序,打包最低优先级的.so 文件
"pickLasts": [
"**/2.so"
],
// 排除的.so文件
"excludes": [
"**/3.so"
],
// 允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
"enableOverride": true
},
// cpp相关编译配置
"externalNativeOptions": {
// CMake配置文件,提供CMake构建脚本
"path": "./src/main/cpp/CMakeLists.txt",
// 传递给CMake的可选编译参数
"arguments": "",
// 用于设置本机的ABI编译环境
"abiFilters": [
"armeabi-v7a",
"arm64-v8a"
],
// 设置C++编译器的可选参数
"cppFlags": ""
},
},
// 定义的Target,开发者可以定制不同的Target,具体请参考定制多目标构建产物
"targets": [
{
"name": "default",
"runtimeOS": "HarmonyOS",
},
{
"name": "ohosTest",
}
]
}
依赖配置文件 oh-package.json5
应用/服务支持通过ohpm来安装、共享、分发代码,管理项目的依赖关系。oh-package.json5格式遵循标准的ohpm规范
工程级 oh-package.json5
{
"name": "myapplication",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {},
"devDependencies": {
"@ohos/hypium": "1.0.6"
}
}
模块级 oh-package.json5
{
"name": "entry",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "index.ets",
"author": "",
"license": "",
"dependencies": {},
}
oh-package.json5中配置ohpm包依赖
ohpm原生三方包
"dependencies": {
// 包名:语义化版本
"eslint": "^7.32.0",
...
}
ohpm三方共享包
"dependencies": {
"@ohos/lottie": "^2.0.0",
...
}
ohpm本地共享模块
"dependencies": {
"library": "file:../library",
...
}
依赖安装和同步
两种方式
1.在Terminal窗口执行ohpm install命令下载依赖包
2.单击编辑器窗口上方的 Sync Now 进行同步
依赖包会存储在工程或各模块的oh_modules目录下
怎么启动构建
1.通过单击或按钮,DevEco Studio会启动应用/服务的编译,并将编译后的HAP部署到设备中
2.通过DevEco Studio的 Build 菜单栏的编译选项进行构建,HAP的构建结果存放于各模块的“build”文件夹下,APP包的构建结果存放于工程的“build”文件夹下
默认开启模块化编译模式
1.应用模块化编译是指 基于ESModule的Bundleless编译模式 ,使用原生ES Module规则构建源码。
2.Stage工程默认开启模块化编译,可有效缩短增量编译时间、减小编译后的包体积
开启AOT编译模式
AOT(Ahead Of Time)即提前编译,能够 在Host端(即运行DevEco Studio的电脑)将字节码提前编译成Target端(即运行应用的设备)可运行的机器码 ,这样字节码可以获得充分编译优化,放到Target端运行时可以获得加速
AOT编译模式
在模块级build-profile.json5文件中,buildOption内的aotCompileMode字段可以设置为以下值,对应不同的AOT模式。
使用type编译模式
json复制代码{
“apiType”: ‘stageMode’,
“buildOption”: {
“aotCompileMode”: “type”
},
…
}
使用partial编译模式
1.使用partial编译模式需要先使用type模式进行编译,获取到ap文件后,再进行partial模式编译
2.这种编译方式类似于Xcode的PGO文件,需要在相应场景下先运行一段时间,然后把ap文件从设备里取出来使用。一般使用较少,大家要了解的话点标题进入自己去看就行,挺简单的