文档环境
开发环境:Windows 11
编译环境:Ubuntu 22.04
开发板型号:DAYU 200(RK3568)
系统版本:OpenHarmony-4.0-Release
功能简介
- 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中,目前有两种编译预安装应用 hap 包的方式,一种为随系统编译时,编译应用源码生成 hap 包的方式,另一种是将已生成的 hap 包放入系统源码中,再进行打包的方式。后者需要开发者使用 DevEco Studio 或其它途径,把应用源码编译构建为 hap 包,再将 hap 放入系统源码中。
- 本文档将以 Launcher 为例,带大家了解如何通过 4.0Release 的系统源码编译应用的方式来打包预安装应用。
- 由于应用依赖和构建工具的升级和替换,3.2Release 系统编译构建应用的方式是 NPM+Webpack,而 4.0Release 使用 OHPM+Hvigor 的方式进行构建,差别较大。
4.0-Release 系统编译 Launcher
1.由于 Launcher 自身原因,导致需要做 2 处改动才可进行源码编译构建。本步骤并非所有项目通用,如果新建的项目可以跳过本步骤,后续 Launcher 或工具更新后也不需要本步骤。
(1)适配系统源码中 NODE_HOME 环境变量的配置,需要修改应用目录下 hvigorw 工具为最新。
文件位置:applications/standard/launcher/hvigorw
内容如下:
#!/bin/bash# ----------------------------------------------------------------------------
# Hvigor startup script, version 1.0.0
#
# Required ENV vars:
# ------------------
# NODE_HOME - location of a Node home dir
# or
# Add /usr/local/nodejs/bin to the PATH environment variable
# ----------------------------------------------------------------------------HVIGOR_APP_HOME="`pwd -P`"
HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js
warn() {echo ""echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}error() {echo ""echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}fail() {error "$@"exit 1
}# Determine node to start hvigor wrapper script
if [ -n "${NODE_HOME}" ];thenEXECUTABLE_NODE="${NODE_HOME}/bin/node"if [ ! -x "$EXECUTABLE_NODE" ];thenfail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed"fi
elseEXECUTABLE_NODE="node"which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path"
fi# Check hvigor wrapper script
if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];thenfail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}"
fi# start hvigor-wrapper script
exec "${EXECUTABLE_NODE}" \"${HVIGOR_WRAPPER_SCRIPT}" "$@"
(2)由于系统编译应用目前不支持配置产品,所以需要把 Launcher 应用源码中有关 pad 的构建项删除。
文件位置:applications/standard/launcher/build-profile.json5
内容如下:
{...{"name": "phone_launcher","srcPath": "./product/phone","targets": [{"name": "default","applyToProducts": ["default",],},],},{"name": "launcher_settings","srcPath": "./feature/settings","targets": [{"name": "default","applyToProducts": ["default",],},],}],
}
文件位置:applications/standard/launcher/feature/settings/build-profile.json5
内容如下:
{"apiType": 'stageMode',"buildOption": {},"targets": [{"name": "default",}],"entryModules": ["phone_launcher"]
}
2.删除或注释系统中默认的 Launcher 应用 hap 包编译方式。
文件位置:applications/standard/hap/BUILD.gn
group("hap") {deps = [...# "//applications/standard/hap:launcher_hap", // 直接删除或注释,不参与编译# "//applications/standard/hap:launcher_settings_hap", // 直接删除或注释,不参与编译...]}
3.在 applications/standard/launcher 目录中增加 BUILD.gn 文件。
内容如下:
import("//build/ohos.gni")ohos_app("launcher_OS") {part_name = "prebuilt_hap"subsystem_name = "applications" hap_name = "Launcher_OS" certificate_profile = "./signature/launcher.p7b"module_libs_dir = "entry"module_install_dir = "app/com.ohos.launcher"js_build_mode = "release"build_level = "module"assemble_type = "assembleHap"
}
说明:
- 此处产物名称 hap_name 定义为 Launcher_OS 是为了区分原系统源码中默认的 hap 包名称,实际可以填写为 Launcher 或任意值。
- BUILD.gn 的模板参数可以参考编译系统提供的模板。
4.在 applications/standard/hap/ohos.build 文件的 module_list 中增加 launcher_OS 模块编译。
{"subsystem": "applications","parts": {"prebuilt_hap": {..."module_list": [..."//applications/standard/launcher:launcher_OS",...]}}
}
5.执行源码编译指令。如果以下 2 个目录产物正确,则说明应用源码编译方式修改成功。
(1)在 out/rk3568/obj/applications/standard/launcher/launcher_OS 目录中,会生成 2 个 hap 的编译产物。
(2)在 out/rk3568/packages/phone/system/app/com.ohos.launcher 目录中,是实际系统环境中的 hap 包产物。
6.烧录系统验证功能。
Launcher 正常启动:
系统应用目录文件正确:
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙开发学习手册》:
如何快速入门:https://qr21.cn/FV7h05
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向